1. 项目背景与硬件连接
最近在做一个海思3519dv500平台的项目,需要接入合宙的AIR780eg模块来实现4G联网功能。这个模块性价比很高,支持Cat1bis网络,还内置了GNSS定位,特别适合物联网项目。不过在实际调试过程中,我发现虽然Linux系统本身已经包含了所需的驱动,但嵌入式平台往往因为内核配置问题导致模块无法正常工作。
硬件连接很简单,就是用USB线将AIR780eg模块连接到海思3519dv500开发板的USB接口。这里要注意的是,AIR780eg模块会同时启用两种USB功能模式:CDC-ACM虚拟串口和RNDIS网络适配器。CDC-ACM会虚拟出3个TTY串口设备,其中一个用于AT指令通信,另外两个用于数据传输;RNDIS则会让USB设备看起来像一块网卡,实现TCP/IP over USB的功能。
我在刚开始调试的时候,发现模块插上后系统没有任何反应,既没有出现新的网络接口,也没有看到串口设备。这种情况在嵌入式开发中很常见,主要是因为芯片厂商提供的SDK通常不会开启所有内核功能,需要我们自己手动配置和编译内核。
2. 内核配置与驱动使能
2.1 进入内核配置界面
首先需要进入海思3519dv500的Linux内核配置界面。我一般使用menuconfig工具,因为它的界面比较友好,搜索功能也很方便。在终端中输入以下命令:
make ARCH=arm64 menuconfig
这里要特别注意架构参数,海思3519dv500是arm64架构,如果使用错误的架构配置,编译出来的内核可能无法正常启动。
2.2 启用CDC-ACM驱动
CDC-ACM驱动在Linux内核中已经存在很长时间了,稳定性很好。在menuconfig界面中,可以通过按下"/"键调出搜索功能,输入"CDC_ACM"来快速定位配置项。具体路径是:
Device Drivers
→ USB support
→ USB Serial Converter support
→ USB Generic Serial Driver
→ USB ACM support
找到"USB ACM support"选项后,按空格键将其标记为"*"(编译进内核),而不是"M"(编译为模块)。在嵌入式系统中,我强烈建议将关键驱动直接编译进内核,避免模块加载带来的额外复杂度。
2.3 配置RNDIS相关选项
RNDIS的配置相对复杂一些,因为涉及多个配置项。同样使用搜索功能,输入"RNDIS"找到所有相关选项。需要确保以下选项都设置为"y"(编译进内核):
USB_CONFIGFS_RNDISUSB_ETH_RNDISUSB_FUNCTIONFS_RNDISUSB_F_RNDISUSB_G_MULTI_RNDISUS


747

被折叠的 条评论
为什么被折叠?



