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

最近毕设想弄一个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键——将驱动编译为模块关于arm-linux下编译加载ch341串口驱动的方法与问题_第1张图片
  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字节。
在这里请教路过的大神了。

你可能感兴趣的:(arm,Linux)