移远RM500Q 5G模块驱动移植

平台:嵌入式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串口设备

处理如下:
到这里,内核的源码配置就完成了,接下来配置内核的编译选项,以支持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/目录


同样是需要修改内核配置增加USB网络框架,并修改[KERNEL]/drivers/net/usb/Makefile

最后编译内核即可。

二、交叉编译拨号软件

拨号软件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)这里就不再展开。

正在上传…重新上传取消Quectel_LTE&5G_Linux_USB_Driver_User_Guide_V2.pdf
正在上传…重新上传取消Quectel_QConnectManager_Linux_V1.zip
正在上传…重新上传取消Quectel_Linux&Android_GobiNet_Driver_V1.zip

四、测试

    模块开机后在/dev/目录下会出现ttyUSB0、ttyUSB1、ttyUSB2、ttyUSB3其中ttyUSB2可用于AT通信

cat /dev/ttyUSB2 &
echo -e "AT+CSQ\r\n" >/dev/ttyUSB2
或者
microcom -t 5000 -s 115200 /dev/ttyUSB2
AT

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值