您的位置:首页 > 其它

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

2013-02-22 13:01 204 查看
内容
1 楼 qdzheng
文章标题 : [分享]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 楼 eexpress
文章标题 :


发表于
: 2008-02-09 23:41

注册: 2005-08-14 21:55

帖子: 54868

地址: 长沙

送出感谢: 2

接收感谢: 139
新芯片的驱动。是麻烦。你是按照usb id号找到的,还是按照芯片型号找到的?

_________________

● 鸣学

页首





3 楼 qdzheng
文章标题 :


发表于
: 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 楼 qdzheng
文章标题 :


发表于
: 2008-02-11 23:04
注册: 2006-12-03 23:00

帖子: 277

送出感谢: 0 次

接收感谢: 0 次
做了个试验,将内核源码中的pl2303模块单独拿出来编译一次,

这个也是USB转串口的驱动模块。

编译是没有任何问题的,但insmod还是会出现上面的unknow symbol错误。

这样可以说明:

1、代码上应该没有什么问题了;

2、问题的原因可能由我的编译环境引起的;

3、也有可能是这次升级的内核本身引起的。

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

页首





5 楼 qdzheng
文章标题 :


发表于
: 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 楼 fanyfu
文章标题 : 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 楼 xiaohai326
文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块


发表于
: 2009-06-09 23:31
注册: 2009-06-09 23:30

帖子: 1

送出感谢: 0 次

接收感谢: 0 次
楼上的错误解决没,分享下啊,谢谢!

页首





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


发表于
: 2009-06-22 17:10
注册: 2009-05-07 17:41

帖子: 2

送出感谢: 0 次

接收感谢: 0 次
没有解决完,但应该是和ubunto的内核版本有关。

我重新搜索了另外一个驱动程序,错误就只有两处了。

页首





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


发表于
: 2009-12-01 21:53

注册: 2009-12-01 21:49

帖子: 1

送出感谢: 0 次

接收感谢: 0 次
楼上的错误解决没有啊,分享下吧,谢谢! 你的msn多少啊?

页首





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


发表于
: 2010-04-17 12:44
注册: 2008-05-31 9:47

帖子: 4

送出感谢: 0 次

接收感谢: 0 次
PL2303能用吗?兄弟们 !我的 不能啊 ,在搜索很久了

页首





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


发表于
: 2010-04-17 16:35
注册: 2010-04-09 20:18

帖子: 38

送出感谢: 0 次

接收感谢: 0 次
jsscx 写道:

PL2303能用吗?兄弟们 !我的 不能啊 ,在搜索很久了

家祭勿忘告乃翁

页首





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


发表于
: 2010-05-19 22:17

注册: 2009-11-29 15:03

帖子: 2

送出感谢: 0 次

接收感谢: 0 次
下载下来看看先,谢谢楼主分享

页首





13 楼 jeryzhang
文章标题 : 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 楼 jiapper
文章标题 : Re: [分享]CH340/CH341,USB转串口驱动模块


发表于
: 2010-12-20 15:04
注册: 2010-12-20 15:01

帖子: 1

送出感谢: 0 次

接收感谢: 0 次
那些代码适用于老的内核。内核不一样,很多结构体及函数的参数已经不一样了。

目前还不知道怎么改。

页首





15 楼 fe07fe
文章标题 : 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

这个怎么弄啊!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: