No ttyUSB for EM061K-GL with Kernel v6.8

Hello!
I am using a Thinkpad T14 Gen. 5 that comes with a Quectel EM061K-GL, running Ubuntu 24.04.

I have been able to communicate with the modem via /dev/cdc-wdm0 and mmcli.
While trying to understand how I can interact with the eSIM, I noticed I do not have any ttyUSB devices being created for the modem.

The device shows up with PID:VID 2c7c:6008

I have read a couple of posts here and tried writing new VIDs into sysfs new_id but without any success.
I also made sure the “option” kernel module is loaded. But so far no luck getting the three ttyUSB devices to appear.

I’d be very thankful if you’d be able to suggest what I could do to get the ttyUSB devices to appear.

Best,

Lazlo

Could you show
lsusb -t
and
cat /sys/kernel/debug/usb/devices

It seems not a Quectel Modem.

1 Like

Hello,

here is the output of lsusb -t

/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/1p, 480M
/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 20000M/x2
/:  Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 004: Dev 002, If 0, Class=Chip/SmartCard, Driver=[none], 12M
    |__ Port 007: Dev 003, If 0, Class=Vendor Specific Class, Driver=[none], 12M
    |__ Port 008: Dev 004, If 0, Class=Communications, Driver=cdc_mbim, 480M
    |__ Port 008: Dev 004, If 1, Class=CDC Data, Driver=cdc_mbim, 480M
    |__ Port 008: Dev 004, If 2, Class=Vendor Specific Class, Driver=[none], 480M
    |__ Port 009: Dev 005, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 009: Dev 005, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 009: Dev 005, If 2, Class=Video, Driver=uvcvideo, 480M
    |__ Port 009: Dev 005, If 3, Class=Video, Driver=uvcvideo, 480M
    |__ Port 009: Dev 005, If 4, Class=Application Specific Interface, Driver=[none], 480M
    |__ Port 010: Dev 006, If 0, Class=Wireless, Driver=btusb, 12M
    |__ Port 010: Dev 006, If 1, Class=Wireless, Driver=btusb, 12M
/:  Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/2p, 20000M/x2

And this is the contents of /sys/kernel/debug/usb/devices


T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 1
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 6.08
S:  Manufacturer=Linux 6.8.0-52-generic xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=0000:00:0d.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=10000 MxCh= 4
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 3.10 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
P:  Vendor=1d6b ProdID=0003 Rev= 6.08
S:  Manufacturer=Linux 6.8.0-52-generic xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=0000:00:0d.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

T:  Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh=12
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 6.08
S:  Manufacturer=Linux 6.8.0-52-generic xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=0000:00:14.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

T:  Bus=03 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  2 Spd=12   MxCh= 0
D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=2ce3 ProdID=9563 Rev= 1.20
S:  Manufacturer=Generic
S:  Product=EMV Smartcard Reader
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 50mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=0b(scard) Sub=00 Prot=00 Driver=(none)
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=1ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=  16 Ivl=0ms
E:  Ad=83(I) Atr=02(Bulk) MxPS=  16 Ivl=0ms

T:  Bus=03 Lev=01 Prnt=01 Port=06 Cnt=02 Dev#=  3 Spd=12   MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=10 Prot=ff MxPS= 8 #Cfgs=  1
P:  Vendor=06cb ProdID=00f9 Rev= 0.00
S:  SerialNumber=c8536a29bc60
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=83(I) Atr=03(Int.) MxPS=   8 Ivl=4ms

T:  Bus=03 Lev=01 Prnt=01 Port=07 Cnt=03 Dev#=  4 Spd=480  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=2c7c ProdID=6008 Rev= 5.04
S:  Manufacturer=Quectel
S:  Product=EM061K-GL
S:  SerialNumber=73c7093
C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=500mA
A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms

T:  Bus=03 Lev=01 Prnt=01 Port=08 Cnt=04 Dev#=  5 Spd=480  MxCh= 0
D:  Ver= 2.01 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=174f ProdID=11af Rev=10.10
S:  Manufacturer= 
S:  Product=Integrated Camera
S:  SerialNumber=200901010001
C:* #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=500mA
A:  FirstIf#= 0 IfCount= 2 Cls=0e(video) Sub=03 Prot=00
A:  FirstIf#= 2 IfCount= 2 Cls=0e(video) Sub=03 Prot=00
A:  FirstIf#= 4 IfCount= 1 Cls=fe(app. ) Sub=01 Prot=00
I:* If#= 0 Alt= 0 #EPs= 1 Cls=0e(video) Sub=01 Prot=01 Driver=uvcvideo
E:  Ad=83(I) Atr=03(Int.) MxPS=  32 Ivl=4ms
I:* If#= 1 Alt= 0 #EPs= 0 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
I:  If#= 1 Alt= 1 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=81(I) Atr=05(Isoc) MxPS= 128 Ivl=125us
I:  If#= 1 Alt= 2 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=81(I) Atr=05(Isoc) MxPS= 512 Ivl=125us
I:  If#= 1 Alt= 3 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=81(I) Atr=05(Isoc) MxPS=1020 Ivl=125us
I:  If#= 1 Alt= 4 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=81(I) Atr=05(Isoc) MxPS=1536 Ivl=125us
I:  If#= 1 Alt= 5 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=81(I) Atr=05(Isoc) MxPS=2040 Ivl=125us
I:  If#= 1 Alt= 6 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=81(I) Atr=05(Isoc) MxPS=2304 Ivl=125us
I:  If#= 1 Alt= 7 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=81(I) Atr=05(Isoc) MxPS=2940 Ivl=125us
I:* If#= 2 Alt= 0 #EPs= 1 Cls=0e(video) Sub=01 Prot=01 Driver=uvcvideo
E:  Ad=85(I) Atr=03(Int.) MxPS=  32 Ivl=4ms
I:* If#= 3 Alt= 0 #EPs= 0 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
I:  If#= 3 Alt= 1 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=82(I) Atr=05(Isoc) MxPS= 128 Ivl=125us
I:  If#= 3 Alt= 2 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=82(I) Atr=05(Isoc) MxPS= 256 Ivl=125us
I:  If#= 3 Alt= 3 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=82(I) Atr=05(Isoc) MxPS= 512 Ivl=125us
I:  If#= 3 Alt= 4 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=82(I) Atr=05(Isoc) MxPS= 768 Ivl=125us
I:  If#= 3 Alt= 5 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=82(I) Atr=05(Isoc) MxPS=1020 Ivl=125us
I:  If#= 3 Alt= 6 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=82(I) Atr=05(Isoc) MxPS=1152 Ivl=125us
I:  If#= 3 Alt= 7 #EPs= 1 Cls=0e(video) Sub=02 Prot=01 Driver=uvcvideo
E:  Ad=82(I) Atr=05(Isoc) MxPS=1300 Ivl=125us
I:* If#= 4 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

T:  Bus=03 Lev=01 Prnt=01 Port=09 Cnt=05 Dev#=  6 Spd=12   MxCh= 0
D:  Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=8087 ProdID=0033 Rev= 0.00
C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=1ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms

T:  Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=10000 MxCh= 2
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 3.10 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
P:  Vendor=1d6b ProdID=0003 Rev= 6.08
S:  Manufacturer=Linux 6.8.0-52-generic xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=0000:00:14.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

I also have a picture of the device itself. So you can be sure it is a EM061K-GL.

OK.
Please try

sudo modprobe option
echo  2C7C 6008 FF | sudo tee /sys/bus/usb-serial/drivers/option1/new_id

And then you might see the /dev/ttyUSB0.
Please check whether you can send the AT command via that port.

The version you tried might not support USB AT command.

Hello,

I just tried what you suggested. But without any changes to /dev. No ttyUSB files have been created.

I had a look into ModemManager udev rules. Specifically I checked this file: /usr/lib/udev/rules.d/77-mm-quectel-port-types.rules

I didn’t find any rules for the EM061K-GL to map the ttyUSB files.
So I added the following (but also without any success).

# Quectel EM061K-GL (experimental)
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="6008", ENV{.MM_USBIFNUM}=="00", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_QCDM}="1"
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="6008", ENV{.MM_USBIFNUM}=="01", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_GPS}="1"
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="6008", ENV{.MM_USBIFNUM}=="02", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1"

What I also tried was to update the modem firmware using fwupmgr. The FW update worked.
But that didn’t change anything about the missing ttyUSBs missing.

For your information, this is the output of mmcli -m 0 (inspecting the modem with ModemManager) which will also give you the firmware version.

  ----------------------------------
  General  |                   path: /org/freedesktop/ModemManager1/Modem/0
           |              device id: 69cabe29482d1173b5a29fb108442115b5eeb330
  ----------------------------------
  Hardware |           manufacturer: Quectel
           |                  model: EM061K-GL
           |      firmware revision: EM061KGLAAR01A02M2G
           |         carrier config: default
           |           h/w revision: EM061K-GL
           |              supported: gsm-umts, lte
           |                current: gsm-umts, lte
           |           equipment id: XXXXXXXXXXXXXXXX
  ----------------------------------
  System   |                 device: /sys/devices/pci0000:00/0000:00:14.0/usb3/3-8
           |                physdev: /sys/devices/pci0000:00/0000:00:14.0/usb3/3-8
           |                drivers: cdc_mbim
           |                 plugin: quectel
           |           primary port: cdc-wdm0
           |                  ports: cdc-wdm0 (mbim), wwan0 (net)
  ----------------------------------
  Status   |                  state: disabled
           |            power state: low
  ----------------------------------
  Modes    |              supported: allowed: 3g; preferred: none
           |                         allowed: 4g; preferred: none
           |                         allowed: 3g, 4g; preferred: 4g
           |                         allowed: 3g, 4g; preferred: 3g
           |                current: allowed: 3g, 4g; preferred: 3g
  ----------------------------------
  Bands    |              supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
           |                         utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, 
           |                         eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, eutran-18, 
           |                         eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, eutran-29, 
           |                         eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, eutran-40, 
           |                         eutran-41, eutran-66, eutran-71, utran-19
           |                current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, 
           |                         utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, 
           |                         eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, eutran-18, 
           |                         eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, eutran-29, 
           |                         eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, eutran-40, 
           |                         eutran-41, eutran-66, eutran-71, utran-19
  ----------------------------------
  IP       |              supported: ipv4, ipv6, ipv4v6
  ----------------------------------
  3GPP     |                   imei: XXXXXXXXXXXXXXX
  ----------------------------------
  3GPP EPS | initial bearer ip type: ipv4v6
  ----------------------------------
  SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
           |         sim slot paths: slot 1: none
           |                         slot 2: none (active)

NOTE: I replaced the EMEI in the output with XXX … so that is not what ModemManager reports.

(1) Any ideas what else I could try?
(2) Could you direct me to some resource where it is explained when the modem will expose the ttyUSB files or what is required for the modem to expose these?

Thank you so much!

Lazlo

Please check whether /sys/bus/usb-serial/drivers/option1/new_id exists.

T:  Bus=03 Lev=01 Prnt=01 Port=07 Cnt=03 Dev#=  4 Spd=480  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=2c7c ProdID=6008 Rev= 5.04
S:  Manufacturer=Quectel
S:  Product=EM061K-GL
S:  SerialNumber=73c7093
C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=500mA
A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms

The usb interface 0 and 1 is for MBIM network interface.
The interface 2 should be used for DM or AT, but I am not sure.

# Quectel EM061K-GL (experimental)
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="6008", ENV{.MM_USBIFNUM}=="00", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_QCDM}="1"
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="6008", ENV{.MM_USBIFNUM}=="01", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_GPS}="1"
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="6008", ENV{.MM_USBIFNUM}=="02", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1"

It is compatible with the your modem.

I checked. It exists.

lazlo@jericho:~$ ls -l /sys/bus/usb-serial/drivers/option1/
total 0
lrwxrwxrwx 1 root root    0 Jan 30 18:37 module -> ../../../../module/option
-rw-r--r-- 1 root root 4096 Jan 30 18:37 new_id
--w------- 1 root root 4096 Jan 30 18:37 uevent

Just to double check my understanding: kernel module option is the USB serial driver responsible for handling (only) the /dev/ttyUSB interfaces of the modem, right?

I had a look into the source of the driver. By now I am using kernel 6.13.

I found something that makes litte sense to me. From how I see it, there is a list of USB devices built in the driver source code. Each entry represents a USB device and potentially an InterfaceDescriptor.

As listed above in the output of /sys/kernel/debug/usb/devices, the modem DeviceDescriptor and InterfaceDescriptors look like this (Class, Sub Class, Proto)

DeviceDesc: Class=00 Sub=00 Proto=00
      If#=0 Class=02 Sub=0e Proto=00 Driver=cdc_mbim
      If#=1 Class=0a Sub=00 Proto=02 Driver=cdc_mbim
      If#=1 Class=0a Sub=00 Proto=02 Driver=cdc_mbim
      if#=2 Class=ff Sub=ff Proto=ff (Driver=(none)

Just re-hashing what was listed above. Now, you mention Interface 2 must be either diagnostic messages or AT, correct? That would start to make sense. Also, the fact that no driver handles this interface.

So now to my finding in drivers/usb/serial/option.c

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 1e2ae0c6c41c..2feefce7ea54 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1252,6 +1252,7 @@ static const struct usb_device_id option_ids[] = {
        { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x30) },
        { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0x00, 0x40) },
        { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x40) },
+       { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0xff) },
        { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff),
          .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 },
        { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },

None of the existing entries for EM061K-GL (here called LWW - I suspect for “world wide”) match Class=ff Sub=ff Proto=ff. So I went ahead and added that entry.

I haven’t tested it but my hope is, this change will make the driver handle the Interface 2 of the modem.

UPDATE: So after patching option.c i get this in dmesg. But still no ttyUSB

[  614.958636] usbcore: registered new interface driver option
[  614.958653] usbserial: USB Serial support registered for GSM modem (1-port)
[  614.958731] option 3-8:1.2: GSM modem (1-port) converter detected

This is what the USB device looks like now (output from usb-devicescommand)

T:  Bus=03 Lev=01 Prnt=04 Port=07 Cnt=01 Dev#=  6 Spd=480  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=2c7c ProdID=6008 Rev=05.04
S:  Manufacturer=Quectel
S:  Product=EM061K-GL
S:  SerialNumber=73c7093
C:  #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:  If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms

NOTE Now interface two has the option driver assigned!

Right now maybe you can see the /dev/ttyUSBx now. But there is only one.
The module seems working for Laptop only and so that there is no USB AT port maybe.

Did you manage to resolve this issue? I’m also looking into getting the EM061K-GL in my Lenovo notebook to work with Linux in order to download an eSIM - but so far without any luck.

There is no ttyUSB device and lpac (which I understand should be used for managing the eSIM) fails with

SCardConnect() failed: 8010000C (Unknown error: 0xFFFFFFFF8010000C)