Without having to use usb-modeswitch switching the USB modem can be done easily. In this example I use USB CDMA modem with vendor ID 201e and product ID 1023 (when detected as CD-ROM storage) and product ID 1022 (when detected as USB modem or USB storage).
Requirements
Most of these module are present in all modern linux distro.- Kernel module: option (USB Driver for GSM modems)
- Kernel module: usbserial (USB Serial Driver core)
Step 1: Detach the CD-ROM Storage
When you first plug your USB modem it might detected as CD-ROM storage. To identify the modem you can usedmesg
and lsusb
commands. Make sure running these commands as root.
$ dmesg | grep -E 'usb|scsi' [ 1.941521] sd 2:0:0:0: Attached scsi generic sg1 type 0 [ 115.016532] usb 1-2: new full-speed USB device number 3 using ohci-pci [ 115.277003] usb 1-2: New USB device found, idVendor=201e, idProduct=1023 [ 115.277019] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=11 [ 115.277028] usb 1-2: Product: CBP7.1 [ 115.277035] usb 1-2: Manufacturer: China TeleCom [ 115.277043] usb 1-2: SerialNumber: \xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf [ 115.372632] usb-storage 1-2:1.0: USB Mass Storage device detected [ 115.372687] scsi3 : usb-storage 1-2:1.0 [ 115.372967] usbcore: registered new interface driver usb-storage [ 116.391288] scsi 3:0:0:0: CD-ROM CDROM EVDO ReV A 7.00 PQ: 0 ANSI: 2 [ 116.428033] sr1: scsi-1 drive [ 116.429719] sr 3:0:0:0: Attached scsi CD-ROM sr1 [ 116.429928] sr 3:0:0:0: Attached scsi generic sg2 type 5From the output we can see our vendor id and product id are 201e and 1023. The CD-ROM is attached on /dev/sr1. We can also see it using
lsusb
command.
$ lsusb Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet Bus 001 Device 003: ID 201e:1023 Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubTime to detach the CD-ROM storage from /dev/sr1.
$ eject sr1Wait for few seconds and run the
lsusb
or dmesg
again, the product id should change.
$ lsusb Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet Bus 001 Device 003: ID 201e:1022 Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub $ dmesg | grep -Ei 'usb|scsi' [ 1055.584657] usb 1-2: USB disconnect, device number 3 [ 1067.464477] usb 1-2: new full-speed USB device number 4 using ohci-pci [ 1067.727963] usb 1-2: New USB device found, idVendor=201e, idProduct=1022 [ 1067.727976] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=11 [ 1067.727982] usb 1-2: Product: CBP7.1 [ 1067.727987] usb 1-2: Manufacturer: China TeleCom [ 1067.727991] usb 1-2: SerialNumber: \xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf\xffffffc3\xffffffbf\xffffffbf [ 1067.753861] usb-storage 1-2:1.3: USB Mass Storage device detected [ 1067.755149] scsi4 : usb-storage 1-2:1.3 [ 1068.778214] scsi 4:0:0:0: Direct-Access SDVDISK EVDO ReV A 7.00 PQ: 0 ANSI: 0 CCS [ 1068.782201] sd 4:0:0:0: Attached scsi generic sg2 type 0 [ 1068.817068] sd 4:0:0:0: [sdb] Attached SCSI removable disk
Step 2: Attach The Driver to The USB Modem
Right know, the USB modem is not detected as CD-ROM storage anymore but it can not be used since no driver associated with those vendor or product. Here's how to check it.$ lsusb -t 1-2:1.0: No such file or directory 1-2:1.1: No such file or directory 1-2:1.2: No such file or directory /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/8p, 12M |__ Port 1: Dev 2, If 0, Class=HID, Driver=usbhid, 12M |__ Port 2: Dev 4, If 0, Class=vend., Driver=, 12M |__ Port 2: Dev 4, If 1, Class=vend., Driver=, 12M |__ Port 2: Dev 4, If 2, Class=vend., Driver=, 12M |__ Port 2: Dev 4, If 3, Class=stor., Driver=usb-storage, 12MTake a look at device number 4 that's the USB modem and no driver handle the device. We can force the kernel to attach option driver to the device just by playing around with /sys file system. All we have to do is write the vendor id and product id to the
/sys/bus/usb-serial/drivers/option1/new_id
.
The first thing before attaching the driver is to make sure the driver itself is loaded.
$ modprobe option $ lsmod | grep option option 33960 0 usb_wwan 19721 1 option usbserial 38859 2 option,usb_wwanNow we need to tell the kernel to attach the driver simply by echoing to the
/sys/bus/usb-serial/drivers/option1/new_id
file.
$ echo 0x201e 0x1022 > /sys/bus/usb-serial/drivers/option1/new_idLet's check again the device using the lsusb and dmesg.
$ dmesg [ 1805.074022] usbcore: registered new interface driver usbserial [ 1805.074465] usbcore: registered new interface driver usbserial_generic [ 1805.074902] usbserial: USB Serial support registered for generic [ 1805.113213] usbcore: registered new interface driver option [ 1805.113671] usbserial: USB Serial support registered for GSM modem (1-port) [ 2232.634820] option 1-2:1.0: GSM modem (1-port) converter detected [ 2232.641870] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0 [ 2232.642308] option 1-2:1.1: GSM modem (1-port) converter detected [ 2232.642953] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1 [ 2232.643487] option 1-2:1.2: GSM modem (1-port) converter detected [ 2232.644293] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2 $ lsusb -t /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/8p, 12M |__ Port 1: Dev 2, If 0, Class=HID, Driver=usbhid, 12M |__ Port 2: Dev 4, If 0, Class=vend., Driver=option, 12M |__ Port 2: Dev 4, If 1, Class=vend., Driver=option, 12M |__ Port 2: Dev 4, If 2, Class=vend., Driver=option, 12M |__ Port 2: Dev 4, If 3, Class=stor., Driver=usb-storage, 12MGreat, the device now handled by kernel option driver. There are three files created by the driver for us to talk to the modem: /dev/ttyUSB0, /dev/ttyUSB1 and /dev/ttyUSB2.
Step 3: Test The Modem
Normally the serial modem is located on the first tty* which in case is /dev/ttyUSB0. So let's try to talk to the modem by sending AT command. Since I'm using ubuntu I use the default serial communication program miniterm.py. As an example I sent "ATI" command which is command to identify the device.miniterm.py /dev/ttyUSB0 --- Miniterm on /dev/ttyUSB0: 9600,8,N,1 --- --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- ATI Manufacturer: +GMI: China TeleCom Model: CBP7.1 Revision: 03.04.08P03 ESN: +GSN: 0x804512d7 +GCAP: +CEVDO, +CIS707P-A, +CIS-856-A, +CGSM, +MS, +ES, +DS, +FCLASS OK --- exit ---
0 comments:
Post a Comment