以下以HI3516DV300 + ME909S-821 为例演示如何在海思平台上移植4G模块。
本文参考了:linux4.1.4上移植ME909s-821,MU609 4G模块驱动
4G模块的移植分为两部分,一是USB网络驱动的移植,二是USB模拟串口驱动移植。
很幸运,这些驱动在arm linux里面都有集成,我们只需要开启和稍微修改下原有的驱动就可以实现。
进入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
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"会复位模块
复位之后会重新识别模块。
移植到这里就结束了,有什么问题的话可以在下方留言,我看到会尽量回复