Yuhang Zheng

LS10XX系列添加对华为ME909s模块的支持

N 人看过

华为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