目录
4.4 增加批量输出 批量输出 URB 的数量和容量 的数量和容量
1 平台:
嵌入式平台RK3588, 操作系统Ubuntu20.04
2 需要准备的资料
1、quectel-CM拨号工具及源码
2、usb-serial-option内核要修改的文件
3、linux开发板
4、linux内核源码
5、busybox的源码
3 参考文档
《Quectel_RG200U-CN&Rx500U-CN_Linux_USB驱动_用户指导_V1.2》
《Quectel_RG200U-CN&Rx500U-CN_网卡拨号应用指导_V1.1》
《Quectel_RG200U&Rx500U系列_AT命令手册_V1.0》
4 编译环境与驱动移植
4.1 内核驱动添加厂家ID和产品ID
文档给出的RM500U-CN的VID和PID如下:
需要注意的是一种模块可能有多种型号,之前就遇到EC20模块的PID对不上,需要从用户手册上获取,没有文档的情况下可通过命令lsusb获取:
VID和PID确认无误后根据文档往[KERNEL]/drivers/usb/serial/option.c文档增加对应的ID
4. 2.添加零包处理
根据USB协议的要求,在大容量传输时需要添加处理零包的机制, 添 加 如 下 语 句 至 文 件
[KERNEL]/drivers/usb/serial/usb_wwan.c。
4.3 增加复位恢复机制
当 MCU 进入挂起或睡眠模式时,某些 USB 主机控制器或 USB 集线器可能会断电或复位,且 MCU 退出挂起或睡眠模式后无法自动恢复 USB 设备。请添加以下语句以使能复位恢复流程。添加如下语句至文件[KERNEL]/drivers/usb/serial/option.c
处理如下:
4.4 增加批量输出 批量输出 URB 的数量和容量 的数量和容量
对于 Linux 内核 2.6.29 及以下版本,需增加批量输出 URB 的数量和容量以获取更快的上行速率。请添加如下语句至文件[KERNEL]/drivers/usb/serial/option.c。
4.5 内核配置与编译
处理如下:
到这里,内核的源码配置就完成了,接下来配置内核的编译选项,以支持USB设备。
make menuconfig
[*] Device Drivers →
[*] USB Support →
[*] USB Serial Converter support →
[*] USB driver for GSM and CDMA modems
最后编译内核即可。
加载后可以可以查看模组的信息:
执行命令:lsusb
设备可以识别出多个USB设备:
5 QM500U-CN拨号(在开发板执行)
5.1.QConnectManager的安装
- 首先安装git, sudo apt-get install git
- 执行命令git clone https://github.com/friendlyarm/quectel-cm.git将文件克隆到本地
- 切换到目录下,执行make
- 执行命令sudo cp quectel-CM /usr/bin/
- 下载busybox udhcpc源码,链接https://busybox.net/我这里下载的版本是1.31.0(如果可以直接通过apt-get install busybox最好)
- 复制到虚拟机中,找到文件[BUSYBOX]/examples/udhcp/simple.script,重命名为default.script
- 新建目录/usr/share/udhcpc/, /etc/udhcpc两个目录
- sudo mkdir /usr/share/udhcpc
- sudo mkdir /etc/udhcpc
- 将default.script复制到新建的目录下
- sudo cp default.script /usr/share/udhcpc/ /etc/udhcpc/
- 赋予权限,chmod 755 /usr/share/udhcpc/default.script
- 安装ifconfig,sudo apt-get install net-tools
5.2.QConnectManager拨号
切换到quectel-cm目录下,执行sudo quectel-CM &
udhcpc完成网卡的识别与配置,并完成DNS的重配置,如下图所示:
查看到网卡获得ip地址,ping www.baidu.com正常
问题:
1、使用5G卡测试的时候,拨号总是失败,使用AT+CSQ测试的时候返回值是99,99,AT+CGREG?命令测试返回值是0,0。应该是没有注册上网络,解决办法:
依次输入
at+qeng=“servingcell”
AT+QNWPREFCFG= “nr5g_band”,0
at+qeng=“servingcell”
此时再次拨号,便能成功,该命令是否通用未知,对这方面不懂
AT测试指令在哪里输入?
sudo busybox microcom /dev/ttyUSB2 然后输入AT指令即可得到返回值
2、如果uducpc无法配置ip地址到网卡
需要将udhcpc的默认运行脚本拷贝到,/usr/share/udhcpc / /etc/udhcpc/两个目录下,
通过查看quectel-CM/log/ecm_ncm_rndis.txt +79 ,可以看到使用的/etc/udhcpc/default.script,如下图: