我用的是linux 3.2.0的内核,内核支持ECM驱动,me909直接就可以驱动起来,为了多一种选择,我把ttyUSB0~ttyUSB4都驱动起来了。过程参考《华为模块Linux内核驱动集成指导-(V100R001_V2.0,Chinese).pdf》,这个文档讲的很清楚,一步一眇,很容易就把华为的各种模块驱动起来了。
https://download.csdn.net/download/wandersky0822/11457391 ME909的USB 描述符官方文档
[ 31.825347] usb 1-1: new high-speed USB device number 2 using musb-hdrc
[ 31.966918] usb 1-1: New USB device found, idVendor=12d1, idProduct=15c1
[ 31.974060] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 31.981689] usb 1-1: Product: HUAWEI Mobile V7R11
[ 31.986724] usb 1-1: Manufacturer: Huawei Technologies Co., Ltd.
[ 31.993103] usb 1-1: SerialNumber: 0123456789ABCDEF
[ 32.016326] cdc_ether 1-1:2.0: usb0: register 'cdc_ether' at usb-musb-hdrc.1-1, CDC Ethernet Device, 02:1e:10:1f:00:00
[ 32.045013] option 1-1:2.2: GSM modem (1-port) converter detected
[ 32.066101] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[ 32.082122] option 1-1:2.3: GSM modem (1-port) converter detected
[ 32.102905] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[ 32.118896] option 1-1:2.4: GSM modem (1-port) converter detected
[ 32.139709] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
[ 32.155639] option 1-1:2.5: GSM modem (1-port) converter detected
[ 32.176086] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3
[ 32.191864] option 1-1:2.6: GSM modem (1-port) converter detected
[ 32.212249] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB4
增加: 首先需要ifconfig usb0 up,先使能usb0网卡。
在命令行窗口输入
echo "AT^NDISDUP=1,1">/dev/ttyUSB0
发完这条指令后,估计应该等一两分钟才会连上移动网络,可以通过
echo "AT^NDISSTATQRY?">/dev/ttyUSB0
来查看连接情况,如果连接上了,输入下面命令
cat /dev/ttyUSB0
就会看到如下信息,(IPV4连接状态,IPV6断开状态)
^NDISSTATQRY: 1,,,"IPV4",0,0,,"IPV6"
这时就可以使用udhcpc命令来自动获得IP地址
~ # udhcpc -i usb0
程序运行正常,打印如下:
udhcpc (v1.20.0) started
Setting IP address 0.0.0.0 on usb0
Sending discover...
Sending select for 10.61.28.33...
Lease of 10.61.28.33 obtained, lease time 518400
Setting IP address 10.61.28.33 on usb0
Deleting routers
route: SIOCDELRT: No such process
Adding router 10.61.28.34
Recreating /etc/resolv.conf
Adding DNS server 183.230.126.225
Adding DNS server 183.230.126.224
此时可以通过DHCP命令来查看ip地址。
echo "AT^DHCP?">/dev/ttyUSB0
查看返回值cat /dev/ttyUSB0
AT^DHCP?
^DHCP: 211C3D0A,FCFFFFFF,221C3D0A,221C3D0A,E17EE6B7,E07EE6B7,150000000,150000000
OK
说明已经获得到IP地址了,此时你就可以尽情的在终端中ping外网了。
注,在我调试的过程中,我发现一个神奇的地址,华为4G模块的USB接口描述符居然会根据接入系统的不同,识别不不同的接口描述符,因为之前我已经把ME909在STM32F437上调试通过了,所以没有在意这个事情,果然我在linux识别出的接口不一样,也不知道华为使用了什么技术,他怎么会判断USB接口的是什么操作系统, 我的STM32 USB HOST他又会归到哪一类里呢?
后记:最近比较火的EC20,驱动与华为的不太一样,我没有测试,只是根据网上查到的一些资料做了分析,EC20好像也支持ECM模式,通过此命令就可以切换工作模式,
echo -e “AT+QCFG=“usbnet”,1\r\n” > /dev/ttyUSB2命令,设备返回OK
但是我在《Quectel_EC20_R2.1_AT_Commands_Manual_V1.0》没有找到类似AT+QCFG=“usbnet”这样的命令,所以 我还是感觉EC20是通过gobinet驱动比较常规一些,gobi是高通的技术,可以看出EC20采用的高通的方案。甚至有些移远的模块VID就是05C6,就是高通,所以如果用EC20的话还是老老实实的搞手册把GOBINET添加进内核比较好,说不定操作起来还更容易些,
以 上只是我的猜测,没有实际操作!!