以下以HI3516DV300 + ME909S-821 为例演示如何在海思平台上移植4G模块。
本文参考了:linux4.1.4上移植ME909s-821,MU609 4G模块驱动
4G模块的移植分为两部分,一是USB网络驱动的移植,二是USB模拟串口驱动移植。
很幸运,这些驱动在arm linux里面都有集成,我们只需要开启和稍微修改下原有的驱动就可以实现。
一.开启USB模拟串口支持
进入menuconfig,并开启USB模拟串口的支持
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- menuconfig
依次选择:Device Drivers --->USB support ---><*> USB Serial Converter support ---><*>USB driver for GSM and CDMA modems
二.开启USB网络的支持
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- menuconfig
依次选择:Device Drivers --->Network device support ---><*> PPP (point-to-point protocol) support <*> PPP BSD-Compress compression <*> PPP Deflate compression [*] PPP filtering <*> PPP MPPE compression (encryption) [*] PPP multilink support <*> PPP over Ethernet <*> PPP support for async serial ports <*> PPP support for sync tty ports USB Network Adapters ---><*> Multi-purpose USB NetworkingFramework<*> CDC Ethernet support (smart devices such ascable modems) (NEW)-*- CDC NCM support<*> Huawei NCM embedded AT channel support<*> Simple USB Network Links (CDC Ethernetsubset) (NEW)
然后保存,并且退出。
但是现在还不能够编译,还需要修改kernel的代码,让USB能够匹配模块的vid pid。
编辑 drivers/usb/serial/option.c,添加对应的代码即可
vim drivers/usb/serial/option.c
在对应的地方添加以下代码
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0x02, 0x06, 0x10) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0x0a, 0x06, 0x11) },{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x10) },{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x13) },{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x12) },{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x06) },{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, 0xff, 0x06, 0x1b) },
保存之后再执行编译
make ARCH=arm CROSS_COMPILE=arm-himix200-linux- uImage -j32
最后将编译好的uImage烧录进设备即可
三.测试
执行ifconfig -a
执行ls /dev/ttyUSB*
这里说明下这几个ttyUSB的作用
USB0: MODEM:MODEM串口,用于拨号上网
USB1: DIAG:普通串口,用于调试和收集日志信息
USB2:PCUI:用于应用程序进行AT指令通信
USB3:Ctrl:用于eCall业务
USB4:Serial B:用于配合Diag端口用于模块log收集
简单的测试下
发送“AT”到ttyUSB2 查询上电状态
这里会返回OK,表示上电完成
发送"AT^RESET"会复位模块
复位之后会重新识别模块。
移植到这里就结束了,有什么问题的话可以在下方留言,我看到会尽量回复
PS:
使用这个命令进行拨号上网,但是我没有验证过。。。
echo -e “AT^NDISDUP=1,1,“CMNET”\r” > /dev/ttyUSB0
echo -e “AT+CGDCONT?” > /dev/ttyUSB2
echo -e “AT^NDISDUP?” > /dev/ttyUSB2
echo -e “AT^NDISDUP=1,1” > /dev/ttyUSB2
udhcpc -i usb0