遇到usb转串口的问题,芯片利用的是ch341,虽然kernel里已经有对ch341的支持,但是插上之后还是不能用,发现系统里没有对这个产品的idVendor=1a86, idProduct=5523描述。所以就需要修改代码,添加上面的id号。代码如下:/usr/src/linux-2.6.37.1-1.2/drivers/usb/serial/ch341.c.
static const struct usb_device_id id_table[] = {
{ USB_DEVICE(0x4348, 0x5523) },
{ USB_DEVICE(0x1a86, 0x7523) },
{ USB_DEVICE(0x1a86, 0x5523) },
{ },
};
添加完成之后就需要编译,安装后可以正常工作。
步骤如下:
进入系统文件夹下:/usr/src/linux-2.6.37.1-1.2
利用超级用户执行以下命令编译你需要的模块。
sudo make CONFIG_USB_SERIAL_CH341=m M=drivers/usb/serial/
CC [M] drivers/usb/serial//aircable.o
......
Building modules, stage 2.
MODPOST 50 modules
CC drivers/usb/serial//aircable.mod.o
LD [M] drivers/usb/serial//aircable.ko
CC drivers/usb/serial//ark3116.mod.o
LD [M] drivers/usb/serial//ark3116.ko
CC drivers/usb/serial//belkin_sa.mod.o
LD [M] drivers/usb/serial//belkin_sa.ko
CC drivers/usb/serial//ch341.mod.o
LD [M] drivers/usb/serial//ch341.ko
编译成功后,需要将生成的文件拷贝到系统的模块目录下,可以先备份这个模块目录以防出现问题,系统无法启动,模块目录:/lib/modules/2.6.37.1-1.2-desktop/kernel
执行拷贝:sudo cp drivers/usb/serial/*.ko /lib/modules/2.6.37.1-1.2-desktop/kernel/drivers/usb/serial/
然后install firmare:
sudo make firmware_install
安装模块并检查模块是否安装成功
sudo /sbin/modprobe ch341
查看模块情况
lsmod | grep ch341
显示如下:
ch341 9275 1
usbserial 34824 3 ch341
表明ch341已经安装成功。
可以查看/dev目录下是否有ttyUSB0的设备
通过dmesg | grep usb显示usb的打印信息
......
[ 1220.889150] usb 2-2: New USB device found, idVendor=1a86, idProduct=5523
[ 1220.889155] usb 2-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2369.572897] usb 2-2: ch341-uart converter now attached to ttyUSB0
[ 2369.572925] usbcore: registered new interface driver ch341
以上就完成了对ch341的修改编译和安装。可以打开设备进行操作,需要超级用户权限。
参考文章:http://vanilla.slitaz.org/index.php?p=/discussion/817/solved-how-to-make-new-kernel-module-available-without-the-wok-s/p1