RG255C-GL miniPCIe Card with Thinkpad x220 on Linux

Hello,

I am new here, if I post this question in the wrong forum, thanks for giving me a hint.

I am not at all a computer expert, but I am trying to get a Quectel RG255C-GL R17 RedCap- 5G - module running on a Thinkpad x220 with Kubuntu 24.04 (Kernel: 6.8.0-55-generic ). Previously, I used successful the old broadcom-module.

It was recognized right away by the system, but never was available in the networkmanager applet and never functioned. After getting the source code of the most recent kernel-drivers option and qmi, I get this:

usb-devicesT: Bus=02 Lev=02 Prnt=03 Port=03 Cnt=01 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=0316 Rev=05.15 S: Manufacturer=Quectel S: Product=RG255C-GL S: SerialNumber=423900eb C: #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=(none) E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none) E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=(none) E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan_q E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=86(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
Any hints, what I could do?

lsusb -t
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/6p, 480M
|__ Port 002: Dev 004, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 001: Dev 005, If 0, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 001: Dev 005, If 1, Class=Application Specific Interface, Driver=[none], 480M
|__ Port 001: Dev 005, If 2, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 001: Dev 005, If 3, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 001: Dev 005, If 4, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 001: Dev 005, If 5, Class=Communications, Driver=cdc_ncm, 480M
|__ Port 001: Dev 005, If 6, Class=CDC Data, Driver=cdc_ncm, 480M
|__ Port 003: Dev 006, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 003: Dev 008, If 0, Class=Printer, Driver=[none], 480M
|__ Port 003: Dev 008, If 1, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 2, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 3, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 4, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 5, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 6, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 004: Dev 009, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 004: Dev 007, If 0, Class=Mass Storage, Driver=uas, 480M
|__ Port 006: Dev 003, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 006: Dev 003, If 1, Class=Video, Driver=uvcvideo, 480M
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/8p, 480M
|__ Port 001: Dev 003, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 001: Dev 003, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 004: Dev 004, If 0, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 004: Dev 004, If 1, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 004: Dev 004, If 2, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 004: Dev 004, If 3, Class=Vendor Specific Class, Driver=qmi_wwan_q, 480M

Please try

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

Dear Bean.Wang,

Thanks a lot for your message:

user@x220:~$ sudo modprobe option
[sudo] Passwort für user:
user@x220:~$
user@x220:~$ echo 2C7C 0316 FF | sudo tee /sys/bus/usb-serial/drivers/option1/new_id
2C7C 0316 FF
user@x220:~$

Does that help?

Thanks for your valuable assistance!

Dear Bean.Wang,

I followed your advices and now, I can see the wwan-module in the network-manager applet - great!

I created a new broadbandconnection - cant get an internet connection yet, though.

Further hints would be very appreciated!

usb-devices

T: Bus=01 Lev=02 Prnt=07 Port=03 Cnt=01 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=0316 Rev=05.15
S: Manufacturer=Quectel
S: Product=RG255C-GL
S: SerialNumber=423900eb
C: #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan_q
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=86(I) Atr=03(Int.) MxPS= 8 Ivl=32m

I don’t know how you create the broadbandconnection. Normally with the opensource tool such as ModemManager and libqmi, the qmi_wwan_q cannot work well.

Dear Bean.Wang

thanks for your Input.

I am using NetworkManager.

If there is a better way to establish a mobile broadband connection - please tell me!

Thanks a lot!

If you are using the NetworkManager actually you are using the ModemManager to manage the RG255C.
Fist I think you should not try the qmi_wwan_q. Please just try the qmi_wwan.c.
https://lore.kernel.org/netdev/tencent_17DDD787B48E8A5AB8379ED69E23A0CD9309@qq.com/

Please also check the How to use the RG255C with ModemManager and qmicli - Technical Subjects / Driver - Quectel Forums.

Dear Bean.Wang

I dont understand how to load qmi_wwan.c

udo modprobe qmi_wwan.c
modprobe: FATAL: Module qmi_wwan.c not found in directory /lib/modules/6.8.0-56-generic

OK I compiled and loaded it.

Meanwhile, I managed to get the modul recognized after boot, in the NM Applet I can click on the connection, but cant connect!

I am allmost there, please a litte more hints!

Seems, that NM cant activate the connection

systemctl status NetworkManager
● NetworkManager.service - Network Manager
     Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; pre>
     Active: active (running) since Thu 2025-03-27 06:31:56 CET; 51min ago
       Docs: man:NetworkManager(8)
   Main PID: 1988 (NetworkManager)
      Tasks: 4 (limit: 19008)
     Memory: 18.7M (peak: 35.1M)
        CPU: 6.600s
     CGroup: /system.slice/NetworkManager.service
             └─1988 /usr/sbin/NetworkManager --no-daemon

Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8854] device (ttyU>
Mär 27 07:22:16 x220 NetworkManager[1988]: <warn>  [1743056536.8878] device (ttyU>
Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8888] device (ttyU>
Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8908] policy: auto>
Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8945] device (ttyU>
Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8949] device (ttyU>
lines 1-17...skipping...
● NetworkManager.service - Network Manager
     Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-03-27 06:31:56 CET; 51min ago
       Docs: man:NetworkManager(8)
   Main PID: 1988 (NetworkManager)
      Tasks: 4 (limit: 19008)
     Memory: 18.7M (peak: 35.1M)
        CPU: 6.600s
     CGroup: /system.slice/NetworkManager.service
             └─1988 /usr/sbin/NetworkManager --no-daemon

Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8854] device (ttyUSB2): state change: prepare -> failed (reason 'gsm-registration-timeout', sys-iface-s>
Mär 27 07:22:16 x220 NetworkManager[1988]: <warn>  [1743056536.8878] device (ttyUSB2): Activation: failed for connection 'Sunrise'
Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8888] device (ttyUSB2): state change: failed -> disconnected (reason 'none', sys-iface-state: 'managed')
Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8908] policy: auto-activating connection 'Sunrise' (601a7487-86ed-4621-853b-3d059ba0b3a3)
Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8945] device (ttyUSB2): Activation: starting connection 'Sunrise' (601a7487-86ed-4621-853b-3d059ba0b3a3)
Mär 27 07:22:16 x220 NetworkManager[1988]: <info>  [1743056536.8949] device (ttyUSB2): state change: disconnected -> prepare (reason 'none', sys-iface-state: 'managed>
Mär 27 07:22:17 x220 NetworkManager[1988]: <warn>  [1743056537.1239] modem-broadband[ttyUSB2]: failed to connect modem: Network timeout
Mär 27 07:22:17 x220 NetworkManager[1988]: <info>  [1743056537.1240] device (ttyUSB2): state change: prepare -> failed (reason 'gsm-registration-timeout', sys-iface-s>
Mär 27 07:22:17 x220 NetworkManager[1988]: <warn>  [1743056537.1268] device (ttyUSB2): Activation: failed for connection 'Sunrise'
Mär 27 07:22:17 x220 NetworkManager[1988]: <info>  [1743056537.1291] device (ttyUSB2): state change: failed -> disconnected (reason 'none', sys-iface-state: 'managed')
~

What can I do?

Please check

lsusb -t
mmcli -L

The ModemManager can recognize the RG255C just because that the ModemManager can communicate with the Modem via the ttyUSB port but it cannot set up the internet connection.

lsusb -t
/: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/8p, 480M
|__ Port 001: Dev 003, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 001: Dev 003, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 004: Dev 004, If 0, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 004: Dev 004, If 1, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 004: Dev 004, If 2, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 004: Dev 004, If 3, Class=Vendor Specific Class, Driver=option, 480M
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/6p, 480M
|__ Port 002: Dev 003, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 001: Dev 005, If 0, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 001: Dev 005, If 1, Class=Application Specific Interface, Driver=[none], 480M
|__ Port 001: Dev 005, If 2, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 001: Dev 005, If 3, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 001: Dev 005, If 4, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 001: Dev 005, If 5, Class=Communications, Driver=cdc_ncm, 480M
|__ Port 001: Dev 005, If 6, Class=CDC Data, Driver=cdc_ncm, 480M
|__ Port 003: Dev 006, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 003: Dev 008, If 0, Class=Printer, Driver=[none], 480M
|__ Port 003: Dev 008, If 1, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 2, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 3, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 4, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 5, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 003: Dev 008, If 6, Class=Vendor Specific Class, Driver=[none], 480M
|__ Port 004: Dev 009, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 004: Dev 007, If 0, Class=Mass Storage, Driver=uas, 480M
|__ Port 006: Dev 004, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 006: Dev 004, If 1, Class=Video, Driver=uvcvideo, 480M

mmcli -L
/org/freedesktop/ModemManager1/Modem/0 [Quectel] RG255C-GL

I even phoned my provider: They can SEE, that my quectel module tries to connect!!! So somehow, it makes contact!

But the issue is supposed to be on the Quectel-side, I am very greatful for your assistance!

I even checked the SIM in Question in a smartphone - works flawless. The issue must be with the Quectel! Please, help!

|__ Port 004: Dev 004, If 0, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 004: Dev 004, If 1, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 004: Dev 004, If 2, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 004: Dev 004, If 3, Class=Vendor Specific Class, Driver=option, 480M

The driver is not correct.
You neeed modify the option.c and the qmi_wwan.c.

Thank you so much!

I managed to compile the qmi_wwan.c from the source provided by you.

I still dont get how to get this module in the folder /lib/modules/6.8.0-56-generic
sudo modprobe qmi_wwan.c
modprobe: FATAL: Module qmi_wwan.c not found in directory /lib/modules/6.8.0-56-generic

same error with option.c file I downloaded here - allthough copied in /lib/modules/6.8.0-56-generic .

Is it easier to use Quectel-CM?

I compiled both modules again, when I do sudo cp qmi_wwan.ko /lib/modules/$(uname -r)/ and then ```
sudo depmod or the same with option.ko

NOTHING changes - I still cant connect!

susb -t
/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=ehci-pci/3p, 480M
    |__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/6p, 480M
        |__ Port 006: Dev 003, If 0, Class=Video, Driver=uvcvideo, 480M
        |__ Port 006: Dev 003, If 1, Class=Video, Driver=uvcvideo, 480M
/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=ehci-pci/3p, 480M
    |__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/8p, 480M
        |__ Port 001: Dev 003, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 001: Dev 003, If 1, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 004: Dev 004, If 0, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 004: Dev 004, If 1, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 004: Dev 004, If 2, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 004: Dev 004, If 3, Class=Vendor Specific Class, Driver=option, 480M

Please help me - I am about to return the module to the vendor!

I a VERY dissapointed!

the modifications in qmi_wwan.c and option.c were allready done!

Nevertheless - doesnt work!