最近毕设想弄一个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 配置内核。
- 进入Device Drivers ---> USB support ---> USB Serial Converter support
- 选定 USB Generic Serial Driver
- 光标移动到想编译的驱动,比如我需要的 Winchipherd CH341 Single Port Serial Driver 按M键——将驱动编译为模块
- 退出并保存
- 回到内核目录 make modules
- 将kernel/drivers/usb/serial目录下的ch341.ko和usbserial.ko放到板子上insmod,应该是先加载usbserial.ko,后加载ch341.ko。
- 如果/dev下没有ttyUSB0的话需要mknod一个。先查看主设备号 cat /proc/devices 找ttyUSB的主设备号,比如我的是188。然后输入命令 mknod /dev/ttyUSB0 c 188 0 之后就可以使用了。
问题
经过测试,ch341和a8通讯返回的数据只有积累到32字节才一起返回,我只能修改Zigebee协调器上的代码了,把每个返回值都补满32字节。
在这里请教路过的大神了。

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

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



