v2.2.2 shipped the modem kernel modules from #2594, and that part works. With an EC20/EC25 (2c7c:0125) attached, option, qmi_wwan, cdc_mbim and cdc-wdm all load, /dev/ttyUSB0-3 show up, and wwan0 is created:
option 1-1:1.0: GSM modem (1-port) converter now attached to ttyUSB0
qmi_wwan 1-1:1.4: cdc-wdm0: USB WDM device
qmi_wwan 1-1:1.4 wwan0: register 'qmi_wwan' at usb-4000c000.usb-1, WWAN/QMI device
But /dev/cdc-wdm0 never appears. The kernel side is fine — /sys/class/usbmisc/cdc-wdm0/dev reads 180:176 and major 180 is in /proc/devices. Creating the node by hand and opening it gives EPERM.
Repro (no modem needed):
docker run --rm --privileged alpine sh -c \
'mknod /dev/w c 180 176 2>/dev/null; (exec 3<>/dev/w) && echo OK || echo EPERM'
2.2.2 (2020200, kernel 7.0.14) → EPERM
Not the driver rejecting it. Opening a major-180 minor with no device behind it also returns EPERM rather than ENODEV, so it's denied before reaching the driver:
| major:minor |
result |
| 180:176 (cdc-wdm0, real device) |
EPERM |
| 180:0 (same major, no device) |
EPERM |
| 108:0 (ppp, fixed in #2524) |
OK |
| 188:0 (ttyUSB) |
OK |
| 10:200 (net/tun) |
OK |
Same shape as major 108 in #2524 / #2528 — looks like the device allowlist is missing 180.
Impact: cdc-wdm is the control channel libqmi and ModemManager actually use. Without it a cellular modem is limited to the AT serial ports — SMS and USSD still work, but there's no way to bring up a data connection, so wwan0 never gets an IP. qmi_wwan has already bound the interface; only the node is missing.
Environment: OrbStack 2.2.2 (2020200), kernel 7.0.14-orbstack-00374-gbbca68e8d741, macOS 26.5.2 (Apple Silicon), Quectel EC20F (2c7c:0125).
v2.2.2 shipped the modem kernel modules from #2594, and that part works. With an EC20/EC25 (
2c7c:0125) attached,option,qmi_wwan,cdc_mbimandcdc-wdmall load,/dev/ttyUSB0-3show up, andwwan0is created:But
/dev/cdc-wdm0never appears. The kernel side is fine —/sys/class/usbmisc/cdc-wdm0/devreads180:176and major 180 is in/proc/devices. Creating the node by hand and opening it givesEPERM.Repro (no modem needed):
docker run --rm --privileged alpine sh -c \ 'mknod /dev/w c 180 176 2>/dev/null; (exec 3<>/dev/w) && echo OK || echo EPERM'2.2.2 (2020200, kernel 7.0.14) →
EPERMNot the driver rejecting it. Opening a major-180 minor with no device behind it also returns
EPERMrather thanENODEV, so it's denied before reaching the driver:Same shape as major 108 in #2524 / #2528 — looks like the device allowlist is missing 180.
Impact:
cdc-wdmis the control channel libqmi and ModemManager actually use. Without it a cellular modem is limited to the AT serial ports — SMS and USSD still work, but there's no way to bring up a data connection, sowwan0never gets an IP.qmi_wwanhas already bound the interface; only the node is missing.Environment: OrbStack 2.2.2 (2020200), kernel 7.0.14-orbstack-00374-gbbca68e8d741, macOS 26.5.2 (Apple Silicon), Quectel EC20F (
2c7c:0125).