当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 16 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
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]
被下载 2911 次
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-02-09 23:41 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
新芯片的驱动。是麻烦。你是按照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
帖子: 4
送出感谢: 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
帖子: 41
送出感谢: 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

这个怎么弄啊!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 16 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译