Smart Machine Smart Decision
SIM7500_SIM7600 Linux NDIS 驱动调试
V2.01
V1.00 2016-08-22
V2.00 2016-10-25
V2.01 2017-03-24
History
初始化文档
修改几处错误
修改 simcom_wwan 为 sim7600_wwan
一 SIM7500_SIM7600 USB 相关描述
SIM7500_SIM7600 系列模块的 USB VID 是 0x1E0E PID 是 0x9001.
作为 Slave USB 设备,配置如下表
Interface number
0
1
2
3
4
5
6
在 linux 系统中 要防止 USB serial 驱动也把 Net interface 枚举占用。
USB serial
USB serial
USB serial
USB serial
USB serial
USB RMNet
adb
Diagnostic Interface
GPS NMEA Interface
AT port Interface
Modem port Interface
USB Audio Interface
wwan interface
Android adb debug port
二 USB 串口驱动使用
1 USB Serial 的内核配置支持
在 linux 内核配置中,请确保
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
2 修改驱动代码增加 SIM7500_SIM7600 的 VID/PID 并且跳过 Interface 5
找到内核源码文件 option.c(一般情况下,路径在 drivers/usb/serial/option.c)
Smart Machine Smart Decision
如果是较新的内核版本(V3.2 以上)
#define SIMCOM_SIM7600_VID
#define SIMCOM_SIM7600_PID
0x1E0E
0x9001
//for SIM7600 modem for NDIS
static const struct option_blacklist_info simcom_sim7600_blacklist = {
.reserved = BIT(5),
};
在 option_ids 列表中增加
… …
//for SIM7600 modem for NDIS
{ USB_DEVICE(SIMCOM_SIM7600_VID, SIMCOM_SIM7600_PID),
.driver_info = (kernel_ulong_t)& simcom_sim7600_blacklist
},
… …
如果是较低的内核版本,
#define SIMCOM_SIM7600_VID
#define SIMCOM_SIM7600_PID
在 option_ids 列表中增加
{ USB_DEVICE(SIMCOM_SIM7600_VID, SIMCOM_SIM7600_PID)}, /*SIM7600 */
并且在 option_probe 里过滤掉 interface 5
/* sim7600 */
if (serial->dev->descriptor.idVendor == SIMCOM_SIM7600_VID &&
serial->dev->descriptor.idProduct == SIMCOM_SIM7600_PID &&
serial->interface->cur_altsetting->desc.bInterfaceNumber == 5 )
return -ENODEV;
0x1E0E
0x9001
3 内核调试信息打印
如果驱动正确编译到内核,内核开机找到模块后,会打印如下信息
usb 1-1: new high speed USB device using rt3xxx-ehci and address 2
option 1-1:1.0: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
option 1-1:1.1: GSM modem (1-port) converter detected
Smart Machine Smart Decision
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
option 1-1:1.2: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
option 1-1:1.3: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3
option 1-1:1.4: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB4
dev/ttyUSB0~4 就会生成,上层应用就可以通过这些设备和模块交互了(发送
AT 命令等)。
三 USB NDIS NET 使用
1 内核配置支持
首先需将这个配置项打开。
CONFIG_USBNET=y
我们会提供一个文件 sim7500_sim7600_wwan.c。
sim7500_sim7600_wwan.c 放在 drivers/net/usb 目录下,并且修改 Makefile
obj-$(CONFIG_USB_USBNET) += usbnet.o sim7500_sim7600_wwan.o
驱动正确编译到内核,内核开机后连到模块会打印如下信息
sim7500_sim7600_wwan 1-1:1.5 wwan0: register ' sim7500_sim7600_wwan' at
usb-0000:02:03.0-1, SIMCOM wwan/QMI device, 8a:de:f6:67:ce:1b
2 使用 ifconfig 查看网卡信息,默认处于 down 状态。
wwan0 Link encap:Ethernet HWaddr D6:D8:6C:10:B0:0E
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
2 SIM7500_SIM7600 拨号指令
SIM7500_SIM7600 网卡拨号是使用一个 AT 命令来操作的。
AT$QCRMCALL=1,1 拨号上网(一般使用方法,具体 AT 描述见 NDIS 拨号文
Smart Machine Smart Decision
档)
AT$QCRMCALL=0,1 挂断(一般使用方法,具体 AT 描述见 NDIS 拨号文档)
3 利用 DHCP 给 Linux 网卡获取 IP
模块拨号上网后,LINUX 平台一般需要 DHCP 客户程序来给 wwan 网卡获
取 IP,DNS 等信息。
如果是 PC 端的 LINUX(比如 Ubuntu),只需要先让网卡 down 然后再 up
一下,PC 会自动用 netmanager 自带的 dhcp 获取 IP。
如果是嵌入式的 LINUX 系统,一般需要用 udhcpc 命令
udhcpc –i wwan0
再次查看网卡信息,会看到已经拿到 IP
wwan0 Link encap:Ethernet HWaddr D6:D8:6C:10:B0:0E
inetaddr:10.47.77.207 Bcast:10.47.77.223 Mask:255.255.255.224
inet6 addr: fe80::d4d8:6cff:fe10:b00e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:612 (612.0 B) TX bytes:1642 (1.6 KiB)
Smart Machine Smart Decision
联系我们:
芯讯通无线科技(上海)有限公司
地址:上海市金钟路 633 号晨讯科技大楼 A 楼
邮编:200335
电话:+86 21 3252 3300
传真:+86 21 3252 3020
Email: simcom@sim.com
网址:www.simcomm2m.com