关于arm-linux下编译加载ch341串口驱动的方法与问题

本文介绍了在ARM Linux系统中,为Zigbee温湿度监测系统进行串口通信所需的CH341串口驱动的编译和加载方法。涉及源码修改、内核配置,包括在内核USB Serial Converter support中启用USB Generic Serial Driver和CH341驱动模块,编译内核模块,将ko文件复制到板子上并insmod加载,以及创建必要的设备节点。

最近毕设想弄一个Zigbee温湿度监测与控制系统,需要Zigbee协调器和a8板子串口通信,下面介绍驱动编译和加载的方法。

源码修改

首先查看串口设备的厂商id源码里存不存在,如果不存在需要添加。 把串口设备与板子用usb串口线连接,然后在板子上输入lsusb命令查看设备id,我这里的id是1a86:7523。然后在pc查看ch341的源码,内核目录下 kernel/drivers/usb/serial/ch341.c ,大约在75行左右,把id加上去。
static const struct usb_device_id id_table[] = {
	{ USB_DEVICE(0x4348, 0x5523) },
	{ USB_DEVICE(0x1a86, 0x7523) },//后加的id
	{ USB_DEVICE(0x1a86, 0x5523) },
	{ },
};

内核配置&编译驱动

cd到kernel目录下,输入make menuconfig 配置内核。

  1. 进入Device Drivers ---> USB support ---> USB Serial Converter support 
  2. 选定 USB Generic Serial Driver 
  3. 光标移动到想编译的驱动,比如我需要的 Winchipherd CH341 Single Port Serial Driver     按M键——将驱动编译为模块
  4. 退出并保存
  5. 回到内核目录 make modules 
  6. 将kernel/drivers/usb/serial目录下的ch341.ko和usbserial.ko放到板子上insmod,应该是先加载usbserial.ko,后加载ch341.ko。
  7. 如果/dev下没有ttyUSB0的话需要mknod一个。先查看主设备号 cat /proc/devices 找ttyUSB的主设备号,比如我的是188。然后输入命令 mknod /dev/ttyUSB0 c 188 0 之后就可以使用了。

问题

经过测试,ch341和a8通讯返回的数据只有积累到32字节才一起返回,我只能修改Zigebee协调器上的代码了,把每个返回值都补满32字节。
在这里请教路过的大神了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值