在RK3588的ELF 2开发板上实现CH341驱动的交叉编译与自动加载

张开发
2026/4/11 20:37:25 15 分钟阅读

分享文章

在RK3588的ELF 2开发板上实现CH341驱动的交叉编译与自动加载
1. 环境准备与驱动源码获取最近在RK3588的ELF 2开发板上折腾USB转串口设备时发现系统默认没有预装CH341驱动。这个问题其实很常见很多嵌入式开发板为了精简系统体积都不会预装所有驱动。不过别担心跟着我的步骤来30分钟内就能搞定驱动编译和自动加载。首先需要准备以下环境一台已经配置好ELF 2开发板交叉编译环境的Ubuntu主机建议22.04版本ELF 2开发板配套的SDK和工具链稳定的网络连接用于下载驱动源码获取CH341驱动源码有两种推荐方式直接从官方GitHub仓库下载最新版git clone https://github.com/juliagoda/CH341SER如果网络环境受限也可以从CSDN等开发者社区下载注意验证文件安全性我建议选择第一种方式因为GitHub上的代码通常更新更及时。下载完成后你会得到一个包含Makefile和驱动源码的目录结构。这里有个小技巧建议在虚拟机里专门创建一个工作目录比如~/elf_drivers把下载的源码放在这里方便后续管理。2. 配置交叉编译环境交叉编译是嵌入式开发的必修课但第一次接触可能会觉得有点复杂。简单来说就是在x86电脑上编译出能在ARM架构开发板上运行的代码。ELF 2开发板使用的是RK3588芯片ARMv8架构所以需要对应的交叉编译器。关键是要正确设置两个路径内核头文件路径KERNELDIR交叉编译器路径CROSS_COMPILE打开驱动目录下的Makefile你会看到类似这样的内容CONFIG_MODULE_SIGn KERNELDIR : /path/to/kernel PWD :$(shell pwd) obj-m : ch341.o需要修改的地方很明确将KERNELDIR指向ELF 2 SDK中的内核路径通常是/your_sdk_path/kernel设置CROSS_COMPILE为工具链路径类似这样CROSS_COMPILE/your_toolchain_path/bin/aarch64-none-linux-gnu-这里有个容易踩的坑确保你使用的内核版本和开发板上运行的一致。可以通过开发板上执行uname -r查看内核版本然后在编译主机上核对内核配置。3. 驱动编译与问题排查配置好Makefile后理论上直接make就能编译成功。但实际操作中可能会遇到各种问题我把自己遇到的典型问题和解决方案整理如下常见错误1内核配置缺失make[1]: *** No rule to make target modules. Stop.这是因为内核没有预先编译过解决方法cd /your_kernel_path make ARCHarm64 your_defconfig make ARCHarm64 prepare常见错误2头文件找不到fatal error: linux/module.h: No such file or directory这说明KERNELDIR路径设置不正确或者内核头文件未安装。检查路径是否正确并确保执行过make prepare成功编译后会在当前目录生成ch341.ko文件。建议先用file命令验证一下file ch341.ko正确的输出应该显示ARM aarch64架构如果是x86_64就说明交叉编译没成功。4. 驱动部署与自动加载把编译好的驱动传到开发板上有多种方式使用scp命令scp ch341.ko user开发板IP:/home/user通过U盘拷贝如果是本地开发环境可以直接挂载共享目录加载驱动测试sudo insmod ch341.ko dmesg | grep ch341 # 查看内核日志 ls /dev/tty* # 检查设备节点实现开机自动加载需要三个步骤将驱动复制到系统目录sudo cp ch341.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ sudo depmod -a创建模块配置文件echo ch341 | sudo tee /etc/modules-load.d/ch341.conf更新initramfs某些系统需要sudo update-initramfs -u5. 验证与调试技巧完成上述步骤后重启开发板可以通过以下命令验证驱动是否自动加载lsmod | grep ch341如果没看到驱动按这个顺序排查检查/etc/modules-load.d/下的配置文件是否正确查看系统日志journalctl -b是否有错误信息确认驱动文件权限是否正确644一个实用的调试技巧是使用strace跟踪模块加载过程strace -f modprobe ch3416. 性能优化与进阶配置驱动正常工作后你可能还想优化一些参数。CH341驱动支持以下常用参数通过modinfo ch341查看ch341_baud_rate设置默认波特率ch341_flow_control启用流控可以通过创建/etc/modprobe.d/ch341.conf来持久化这些设置options ch341 ch341_baud_rate115200 ch341_flow_control1对于需要频繁插拔设备的场景建议配置udev规则自动设置设备权限。创建/etc/udev/rules.d/99-ch341.rulesSUBSYSTEMtty, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, MODE06667. 驱动开发进阶建议如果想深入了解驱动工作原理可以尝试在驱动代码中添加调试打印pr_debug使用kgdb进行内核调试阅读内核源码中的usb-serial框架代码对于产品化部署建议将驱动打包进系统镜像编写systemd服务管理串口设备考虑签名内核模块以启用安全启动我在实际项目中发现CH341在高速传输时可能会出现稳定性问题。这时可以尝试降低波特率或者改用FTDI芯片的方案。不过对于大多数调试场景CH341已经完全够用了。

更多文章