文章标题 : [分享]CH340/CH341,USB转串口驱动模块

内容
1 楼  
  文章标题 : [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2008-02-09 23:35 

注册: 2006-12-03 23:00
帖子: 277 
送出感谢: 0 次 
接收感谢: 0 次
因为工作原因,需要使用USB to serial的转接器,使用ch340芯片。 
连上后发现,ubuntu只认出是USB设备,没有作为串口使用。 
多方查询后得知,这款芯片没有被ubuntu 7.10支持。 

还好,在一个老外的网站发现有支持该芯片的模块源码,编译成功。 
在这里记下过程备忘,也希望对需要的人有用。 

过程如下: 
1、下载 ch341.c,见附件; 
2、编写 Makefile 
代码:
obj-m := ch341.o

KDIR    := /lib/modules/$(shell uname -r)/build
PWD    := $(shell pwd)

default:
   $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

3、编译
编译前,确认你的系统中安装了Linux-headerkernel-headers-2.6.xx.xx.xx包。
代码:
~/hong/ch341$make

4、载入模块
代码:
~/hong/ch341$sudo insmod ./ch341.ko

5、连接串口设备,OK.


附件:
文件注释: 包含两个必要文件 ch341.c 与 Makfile
 ch341.tar.gz [2.76 KiB] 
被下载 1628 次 
   
页首
  用户资料  
 
2 楼  
  文章标题 :
帖子 发表于 : 2008-02-09 23:41 

注册: 2005-08-14 21:55
帖子: 54868
地址: 长沙 
送出感谢: 2 次 
接收感谢: 139 次
新芯片的驱动。是麻烦。你是按照usb id号找到的,还是按照芯片型号找到的?


_________________
● 鸣学
 

 
页首
  用户资料  
 
3 楼  
  文章标题 :
帖子 发表于 : 2008-02-10 9:55 

注册: 2006-12-03 23:00
帖子: 277 
送出感谢: 0 次 
接收感谢: 0 次
eexpress 写道:
新芯片的驱动。是麻烦。你是按照usb id号找到的,还是按照芯片型号找到的?

我是按照芯片型号找到的。 

不过,现在正郁闷着呢。 
同一个模块前几天用的很好,昨天就不好使了。insmod时报unknow symbol错误。 
重新编译可以成功,但是insmod还是报unknow symbol错误。 

中间我记得升级过一次内核,象是从2.6.22-14.49升级到2.6.22-14.51,是不是这个原因呢? 

怀疑是不是linux-headers包与image不一致所致,删除linux-header包,将软件源改成官方的源,再clean、update、install,重新编译,insmod还是报告同一个错误。 

我在ubuntu官方论坛里发帖救助,却没有人理我(英文写得太烂?)。 
代码:
~$ dmesg|tail
[67714.964000] ch341: Unknown symbol usb_serial_disconnect
[67714.964000] ch341: Unknown symbol usb_serial_generic_open
[67714.964000] ch341: Unknown symbol usb_serial_probe
[67714.964000] ch341: Unknown symbol usb_serial_register
[67714.964000] ch341: Unknown symbol usb_serial_deregister
[68828.176000] ch341: Unknown symbol usb_serial_disconnect
[68828.176000] ch341: Unknown symbol usb_serial_generic_open
[68828.176000] ch341: Unknown symbol usb_serial_probe
[68828.176000] ch341: Unknown symbol usb_serial_register
[68828.176000] ch341: Unknown symbol usb_serial_deregister

代码:
~$ dpkg -l|grep 2.6.22-14
ii  linux-headers-2.6.22-14                    2.6.22-14.51                                      Header files related to Linux kernel version
ii  linux-headers-2.6.22-14-generic            2.6.22-14.51                                      Linux kernel headers for version 2.6.22 on x
ii  linux-image-2.6.22-14-generic              2.6.22-14.51                                      Linux kernel image for version 2.6.22 on x86
ii  linux-libc-dev                             2.6.22-14.51                                      Linux Kernel Headers for development
ii  linux-restricted-modules-2.6.22-14-generic 2.6.22.4-14.10                                    Non-free Linux 2.6.22 modules on x86/x86_64
ii  linux-ubuntu-modules-2.6.22-14-generic     2.6.22-14.38                                      Ubuntu supplied Linux modules for version 2.


 
页首
  用户资料  
 
4 楼  
  文章标题 :
帖子 发表于 : 2008-02-11 23:04 

注册: 2006-12-03 23:00
帖子: 277 
送出感谢: 0 次 
接收感谢: 0 次
做了个试验,将内核源码中的pl2303模块单独拿出来编译一次, 
这个也是USB转串口的驱动模块。 
编译是没有任何问题的,但insmod还是会出现上面的unknow symbol错误。 

这样可以说明: 
1、代码上应该没有什么问题了; 
2、问题的原因可能由我的编译环境引起的; 
3、也有可能是这次升级的内核本身引起的。 

有人愿意帮我看看吗? 感谢了。


 
页首
  用户资料  
 
5 楼  
  文章标题 :
帖子 发表于 : 2008-02-29 12:18 

注册: 2006-12-03 23:00
帖子: 277 
送出感谢: 0 次 
接收感谢: 0 次
有解决方案了,呵呵。 

简单些就这样: 
代码:
 modprobe usbserial && insmod ch341.ko

或者打补丁,参照: 
http://ohioloco.ubuntuforums.org/showpo ... stcount=12


_________________
好吧,听某人的建议,修改下签名。
 

 
页首
  用户资料  
 
6 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2009-05-07 17:44 

注册: 2009-05-07 17:41
帖子: 2 
送出感谢: 0 次 
接收感谢: 0 次
我编译出错了,怎么会这样?

make -C /lib/modules/2.6.27-7-generic/build SUBDIRS=/home/fanyfu/ch341 modules
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.27-7-generic'
CC [M] /home/fanyfu/ch341/ch341.o
/home/fanyfu/ch341/ch341.c: 在函数‘ch341_open’中:
/home/fanyfu/ch341/ch341.c:248: 警告: 传递‘usb_serial_generic_open’的第 1 个参数时在不兼容的指针类型间转换
/home/fanyfu/ch341/ch341.c:248: 警告: 传递‘usb_serial_generic_open’的第 2 个参数时在不兼容的指针类型间转换
/home/fanyfu/ch341/ch341.c:248: 错误: 提供给函数‘usb_serial_generic_open’的实参太少
/home/fanyfu/ch341/ch341.c: 在函数‘ch341_set_termios’中:
/home/fanyfu/ch341/ch341.c:260: 错误: ‘struct usb_serial_port’没有名为‘tty’的成员
/home/fanyfu/ch341/ch341.c:266: 错误: ‘struct usb_serial_port’没有名为‘tty’的成员
/home/fanyfu/ch341/ch341.c:266: 错误: ‘struct usb_serial_port’没有名为‘tty’的成员
/home/fanyfu/ch341/ch341.c: 在文件层:
/home/fanyfu/ch341/ch341.c:317: 错误: 初始值设定项里有未知的字段‘num_interrupt_in’
/home/fanyfu/ch341/ch341.c:317: 错误: ‘NUM_DONT_CARE’未声明(不在函数内)
/home/fanyfu/ch341/ch341.c:318: 错误: 初始值设定项里有未知的字段‘num_bulk_in’
/home/fanyfu/ch341/ch341.c:318: 警告: 初始化时将整数赋给指针,未作类型转换
/home/fanyfu/ch341/ch341.c:319: 错误: 初始值设定项里有未知的字段‘num_bulk_out’
/home/fanyfu/ch341/ch341.c:319: 警告: 初始化时将整数赋给指针,未作类型转换
/home/fanyfu/ch341/ch341.c:321: 警告: 从不兼容的指针类型初始化
/home/fanyfu/ch341/ch341.c:322: 警告: 从不兼容的指针类型初始化
/home/fanyfu/ch341/ch341.c:350: 致命错误: 打开依赖文件 /home/fanyfu/ch341/.ch341.o.d:Permission denied
编译中断。
make[2]: *** [/home/fanyfu/ch341/ch341.o] 错误 1
make[1]: *** [_module_/home/fanyfu/ch341] 错误 2
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.27-7-generic'
make: *** [default] 错误 2


能帮忙解决一下吗?


 
页首
  用户资料  
 
7 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2009-06-09 23:31 

注册: 2009-06-09 23:30
帖子: 1 
送出感谢: 0 次 
接收感谢: 0 次
楼上的错误解决没,分享下啊,谢谢!


 
页首
  用户资料  
 
8 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2009-06-22 17:10 

注册: 2009-05-07 17:41
帖子: 2 
送出感谢: 0 次 
接收感谢: 0 次
没有解决完,但应该是和ubunto的内核版本有关。
我重新搜索了另外一个驱动程序,错误就只有两处了。


 
页首
  用户资料  
 
9 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2009-12-01 21:53 
头像

注册: 2009-12-01 21:49
帖子: 1 
送出感谢: 0 次 
接收感谢: 0 次
楼上的错误解决没有啊,分享下吧,谢谢! 你的msn多少啊?


 
页首
  用户资料  
 
10 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2010-04-17 12:44 

注册: 2008-05-31 9:47
帖子: 4 
送出感谢: 0 次 
接收感谢: 0 次
PL2303能用吗?兄弟们 !我的 不能啊 ,在搜索很久了


 
页首
  用户资料  
 
11 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2010-04-17 16:35 

注册: 2010-04-09 20:18
帖子: 38 
送出感谢: 0 次 
接收感谢: 0 次
jsscx 写道:
PL2303能用吗?兄弟们 !我的 不能啊 ,在搜索很久了



家祭勿忘告乃翁


 
页首
  用户资料  
 
12 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2010-05-19 22:17 
头像

注册: 2009-11-29 15:03
帖子: 2 
送出感谢: 0 次 
接收感谢: 0 次
下载下来看看先,谢谢楼主分享


 
页首
  用户资料  
 
13 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2010-11-10 10:35 

注册: 2007-06-07 11:11
帖子: 2 
送出感谢: 0 次 
接收感谢: 0 次
我刚刚开始学,看不懂,高手给教下这个怎么解决啊

jeryzhang@jeryzhang-laptop:~/下载/ch341$ make
make -C /lib/modules/2.6.32-25-generic/build SUBDIRS=/home/jeryzhang/下载/ch341 modules
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.32-25-generic'
CC [M] /home/jeryzhang/下载/ch341/ch341.o
/home/jeryzhang/下载/ch341/ch341.c:31: error: expected ‘}’ before ‘{’ token
/home/jeryzhang/下载/ch341/ch341.c: In function ‘ch341_open’:
/home/jeryzhang/下载/ch341/ch341.c:249: warning: passing argument 1 of ‘usb_serial_generic_open’ from incompatible pointer type
include/linux/usb/serial.h:307: note: expected ‘struct tty_struct *’ but argument is of type ‘struct usb_serial_port *’
/home/jeryzhang/下载/ch341/ch341.c:249: warning: passing argument 2 of ‘usb_serial_generic_open’ from incompatible pointer type
include/linux/usb/serial.h:307: note: expected ‘struct usb_serial_port *’ but argument is of type ‘struct file *’
/home/jeryzhang/下载/ch341/ch341.c: In function ‘ch341_set_termios’:
/home/jeryzhang/下载/ch341/ch341.c:261: error: ‘struct usb_serial_port’ has no member named ‘tty’
/home/jeryzhang/下载/ch341/ch341.c:261: warning: initialization from incompatible pointer type
/home/jeryzhang/下载/ch341/ch341.c:267: error: ‘struct usb_serial_port’ has no member named ‘tty’
/home/jeryzhang/下载/ch341/ch341.c:267: error: ‘struct usb_serial_port’ has no member named ‘tty’
/home/jeryzhang/下载/ch341/ch341.c:267: error: ‘struct usb_device_id’ has no member named ‘termios’
/home/jeryzhang/下载/ch341/ch341.c: At top level:
/home/jeryzhang/下载/ch341/ch341.c:318: error: unknown field ‘num_interrupt_in’ specified in initializer
/home/jeryzhang/下载/ch341/ch341.c:318: error: ‘NUM_DONT_CARE’ undeclared here (not in a function)
/home/jeryzhang/下载/ch341/ch341.c:318: warning: missing braces around initializer
/home/jeryzhang/下载/ch341/ch341.c:318: warning: (near initialization for ‘ch341_device.dynids’)
/home/jeryzhang/下载/ch341/ch341.c:318: error: initializer element is not constant
/home/jeryzhang/下载/ch341/ch341.c:318: error: (near initialization for ‘ch341_device.dynids.lock.raw_lock.slock’)
/home/jeryzhang/下载/ch341/ch341.c:319: error: unknown field ‘num_bulk_in’ specified in initializer
/home/jeryzhang/下载/ch341/ch341.c:320: error: unknown field ‘num_bulk_out’ specified in initializer
/home/jeryzhang/下载/ch341/ch341.c:320: warning: initialization makes pointer from integer without a cast
/home/jeryzhang/下载/ch341/ch341.c:322: warning: initialization from incompatible pointer type
/home/jeryzhang/下载/ch341/ch341.c:323: warning: initialization from incompatible pointer type
make[2]: *** [/home/jeryzhang/下载/ch341/ch341.o] 错误 1
make[1]: *** [_module_/home/jeryzhang/下载/ch341] 错误 2
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.32-25-generic'
make: *** [default] 错误 2


 
页首
  用户资料  
 
14 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2010-12-20 15:04 

注册: 2010-12-20 15:01
帖子: 1 
送出感谢: 0 次 
接收感谢: 0 次
那些代码适用于老的内核。内核不一样,很多结构体及函数的参数已经不一样了。


目前还不知道怎么改。


 
页首
  用户资料  
 
15 楼  
  文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块
帖子 发表于 : 2011-10-19 13:29 

注册: 2011-10-19 13:25
帖子: 11 
送出感谢: 0 次 
接收感谢: 0 次
laan@laan-MS-7267:~/Ubuntu One/ch341$ make
make -C /lib/modules/3.0.0-12-generic/build SUBDIRS=/home/laan/Ubuntu One/ch341 modules
make[1]: 正在进入目录 `/usr/src/linux-headers-3.0.0-12-generic'
make[1]: *** 没有规则可以创建目标“One/ch341”。 停止。
make[1]:正在离开目录 `/usr/src/linux-headers-3.0.0-12-generic'
make: *** [default] 错误 2

这个怎么弄啊!

你可能感兴趣的:(文章标题 : [分享]CH340/CH341,USB转串口驱动模块)