LS10XX系列添加对华为ME909s模块的支持
华为ME909s的4G模块是一个PCIE接口的USB协议的4G模块,它会通过USB口拓展出4路串口,分别为/dev/ttyUSB0,/dev/ttyUSB1,/dev/ttyUSB2,/dev/ttyUSB3。
然后用户可以通过echo “ATE0” > /dev/ttyUSB2命令来向4G模块发送AT指令。
此外,此模块还会通过USB协议注册一个网络设备节点:wwan0
以LS10XX为例,如果想要使板卡支持该模块的话,首先先连接4G模块,使用lsusb命令查看一下硬件连接是否正常:
lsroot@localhost:~# lsusb
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 12d1:15c1 Huawei Technologies Co., Ltd.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
如上所示,ID 12d1:15c1 Huawei Technologies Co., Ltd.为接入的4G模块设备,其中12d1为厂家ID,15c1为产品ID。
接下来我们需要检查内核配置。
首先检查内核配置文件:
arch/arm64/configs/ls1012_defconfig
选中与USB_NET和网络PPP的模块,相关内容如下:
+CONFIG_NET_UDP_TUNNEL=y
+CONFIG_L2TP=y
+CONFIG_PPP=y
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_MPPE=y
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPPOE=y
+CONFIG_PPPOL2TP=y
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_SYNC_TTY=y
+CONFIG_SLHC=y
+CONFIG_USB_NET_DRIVERS=y
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_AX88179_178A=y
+CONFIG_USB_NET_CDCETHER=y
+CONFIG_USB_NET_CDC_NCM=y
+CONFIG_USB_NET_HUAWEI_CDC_NCM=y
+CONFIG_USB_NET_NET1080=y
+CONFIG_USB_NET_CDC_SUBSET_ENABLE=y
+CONFIG_USB_NET_CDC_SUBSET=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_NET_ZAURUS=y
+CONFIG_USB_WDM=y
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRC_CCITT=y
其次选中与USB_SERIAL相关的模块:
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_PL2303=y
+CONFIG_USB_SERIAL_WWAN=y
+CONFIG_USB_SERIAL_OPTION=y
+CONFIG_USB_SERIAL_CP210X=y
最后检查USB_SERIAL的硬件列表文件:
drivers/usb/serial/option.c
可见华为模块的厂商ID和其他产品ID:
#define HUAWEI_VENDOR_ID 0x12D1
#define HUAWEI_PRODUCT_E173 0x140C
#define HUAWEI_PRODUCT_E1750 0x1406
#define HUAWEI_PRODUCT_K4505 0x1464
#define HUAWEI_PRODUCT_K3765 0x1465
#define HUAWEI_PRODUCT_K4605 0x14C6
#define HUAWEI_PRODUCT_E173S6 0x1C07
关于ME909s模块的匹配数据在文件./drivers/net/usb/cdc_ether.c中可见:
/* Huawei ME906 and ME909 */
USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, USB_CLASS_COMM,
USB_CDC_SUBCLASS_ETHERNET,
USB_CDC_PROTO_NONE),
.driver_info = (unsigned long)&wwan_info,
编译内核以及模块,更新板卡系统,进入文件系统中输入ifconfig -a可以发现:
wwan0: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 02:1e:10:1f:00:00 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此节点出现即证明上述步骤操作无误
编辑4G模块的拨号脚本:
#!/bin/sh
echo "ATE0" > /dev/ttyUSB2
echo "AT^NDISDUP=1,1,\"cmnet\""> /dev/ttyUSB2
ifconfig eth0 down
ifconfig wwan0 up
dhclient
ifconfig eth0 up