分类: LINUX
2021-01-21 17:36:26
平台:嵌入式Linux version 3.10.0
交叉编译工具 arm-hisiv300-linux-
模块硬件图片:
整体流程参考官方文档《Quectel_LTE&5G_Linux_USB_Driver_User_Guide_V2.0.pdf》
注:文中所提的文档都会在文末给出。
一、移植驱动
从参考的文档看,5G的移植其实和4G模块如EC20的移植是一样的,并无二异。
1.内核驱动添加厂家ID和产品ID
文档给出的RG500Q的VID和PID如下:
需要注意的是一种模块可能有多种型号,之前就遇到EC20模块的PID对不上,需要从用户手册上获取,没有文档的情况下可通过命令lsusb获取:
VID和PID确认无误后根据文档往[KERNEL]/drivers/usb/serial/option.c文档增加对应的ID
处理如下:
增加宏:
添加进结构体:
2.添加零包处理
根据USB协议的要求,在大容量传输时需要添加处理零包的机制
3.配置重置机制
因为MCU进入暂停/睡眠模式时,部分USB主机控制器/USB hub会断电或复位,MCU退出暂停/睡眠模式后无法使用USB恢复。所以需要配置一下重置机制。
4.添加对MBIM, GobiNet和QMI_WWWAN驱动的支持
如果需要使用MBIM、GobiNet或QMI_WWAN驱动,要添加以下语句,防止模块接口4被用作USB串口设备
处理如下:make menuconfig
[*] Device Drivers →
[*] USB Support →
[*]
USB Serial Converter support →
[*] USB driver for GSM and CDMA modems
5.配置GobiNet拨号驱动
驱动程序一般厂家会提供源码《Quectel_Linux&Android_GobiNet_Driver_V1.6.2.9.zip》,全部拷贝到内核[KERNEL]/drivers/net/usb/目录
二、交叉编译拨号软件
拨号软件quectel-CM也是由厂家提供,文件名为《Quectel_QConnectManager_Linux_V1.6.0.16.zip》
解压后直接make即可
llc@llc:~/work /quectel-CM$ make
CROSS_COMPILE=arm-hisiv300-linux-
最后将编译好的quectel-CM拷贝到板子上即可运行。
# ./quectel-CM&
[01-21_16:28:14:852]
Quectel_QConnectManager_Linux_V1.6.0.16
[01-21_16:28:14:864] Find
/sys/bus/usb/devices/1-2 idVendor=0x2c7c idProduct=0x800, bus=0x001, dev=0x005
[01-21_16:28:14:864] Auto find qmichannel =
/dev/qcqmi0
[01-21_16:28:14:864] Auto find usbnet_adapter
= usb0
[01-21_16:28:14:864] netcard driver =
GobiNet, driver version = V1.6.2.9
[01-21_16:28:14:865] ioctl(0x89f3,
qmap_settings) failed: No such file or directory, rc=-1
[01-21_16:28:14:865] Modem works in QMI
mode
[01-21_16:28:14:884] Get clientWDS = 11
[01-21_16:28:14:916] Get clientDMS = 12
[01-21_16:28:14:948] Get clientNAS = 13
[01-21_16:28:14:979] Get clientUIM = 14
[01-21_16:28:15:013] Get clientWDA = 15
[01-21_16:28:15:045] requestBaseBandVersion
EC20CEFILGR06A05M1G
[01-21_16:28:15:172] requestGetSIMStatus
SIMStatus: SIM_READY
[01-21_16:28:15:204] requestGetProfile[1]
3gnet///0
[01-21_16:28:15:236]
requestRegistrationState2 MCC: 460, MNC: 1, PS: Attached, DataCap: LTE
[01-21_16:28:15:268] requestQueryDataCall
IPv4ConnectionStatus: DISCONNECTED
[01-21_16:28:15:268] ifconfig usb0 0.0.0.0
[01-21_16:28:15:287] ifconfig usb0 down
[01-21_16:28:15:364] requestSetupDataCall
WdsConnectionIPv4Handle: 0x86d2a6e0
[01-21_16:28:15:524] ifconfig usb0 up
[01-21_16:28:15:544] busybox udhcpc -f -n
-q -t 5 -i usb0
[01-21_16:28:15:558] udhcpc (v1.20.2)
started
[01-21_16:28:15:562] Setting IP address
0.0.0.0 on usb0
[01-21_16:28:15:577] Sending discover...
[01-21_16:28:15:584] Sending select for
10.96.170.218...
[01-21_16:28:15:587] Lease of 10.96.170.218
obtained, lease time 7200
[01-21_16:28:15:597] Setting IP address
10.96.170.218 on usb0
[01-21_16:28:15:607] Deleting routers
route: SIOCDELRT: No such process
[01-21_16:28:15:611] Adding router
10.96.170.217
[01-21_16:28:15:628] Recreating
/etc/resolv.conf
[01-21_16:28:15:628] Adding DNS server 120.80.80.80
[01-21_16:28:15:628] Adding DNS server 221.5.88.88
如上所示,DNS自动配置后即可拨号上网,测试可以ping一下百度的地址。
注意模块需要接上天线,文件系统DHCP配置(拨号软件需要分配IP)这里就不再展开。
同样是需要修改内核配置增加USB网络框架,并修改[KERNEL]/drivers/net/usb/Makefile最后编译内核即可。
Quectel_QConnectManager_Linux_V1.zip
Quectel_Linux&Android_GobiNet_Driver_V1.zip