首页 > 代码库 > [驱动]内核添加USB转串口驱动支持

[驱动]内核添加USB转串口驱动支持

转自:http://blog.csdn.net/gatieme/article/details/49491325

目录

1. 问题

2. 驱动源码

3. 内核配置

4. 编译内核和模块驱动

5. 加载驱动

问题


这两天为了做gps和arm的通讯,不得不捣鼓这个东东。开发板是创维特jx2410,usb转串口线的芯片是pl2303。还好是这个芯片,让我没费多少力气,就达成了目的。因为linux对它已经支持了,我们只要编译、加载它的驱动就ok了。

驱动源码


一般来说USB转串口的驱动已经集成在内核中,我们无需下载,只需要在编译时进行一些配置即可. 
因此在编译之前我们需要确认自己的内核中有没有USB转串口的驱动. 
usb转串口的驱动位于内核源码根目录下/drivers/usb/serial

技术分享 
主要的源码包括usb-serial.coption.c,pl2303.c
针对不同的芯片还有cp210x.c 和 pl2303.c 
例如在我们本例中使用的就是pl2303

内核配置


使用make menuconfig进行配置

主要配置信息如下

-->Device Driver

  -->usb support

    -->USB Serial Converter Surpport相关的选项。

  • usb generic serial driver选中
  • usb prolific 2303 single port serial driver配成M。

具体配置如下图所示 
首先打开menuconfig,进入Device Drivers驱动配置页面 
技术分享 
进入usb support USB驱动配置页面主要配置信息如下 
usb support下 
技术分享

选择USB Serial Converter Surpport相关的选项。 
技术分享

技术分享

选中USB Serial Converter Surpport和 
usb generic serial driver 
技术分享

最后选择对应的芯片,注意这里选择为M,将驱动编译成模块,动态加载

编译内核和驱动模块

make zImage, make modules 
技术分享 
make modules 
技术分享

加载驱动


最后在源码目录下pl2303.ko 就是我们需要的驱动,在板子上直接insmod即可

技术分享

 

问题:

1. usb设备调试命令

lsusb: 列出usb设备和属性, lsusb -v可以查看设备的详细属性

ls /dev/tty*: 查看usb设备是否有加载成功

2. make dep/make module, insmod/rmmod, depmode/modprobe三组的具体用法

http://www.cnblogs.com/jacklikedogs/p/4659249.html

  • 这里面提到加载内核驱动的正常流程,首先拷贝*.ko文件到/lib/module/`uname -r`/kernel/driver/usb, 其次执行depmode -a建立依赖,更新module.dep,最后运行modprobe加载模块
  • modprobe相较于insmod的话,更加智能,会根据module.dep建立的模块依赖关系,安排加载顺序,若insmod则可能会出现undefined symbol等问题
  • 所以在加载pl2303.ko驱动,只要depmod -a, 后使用modprobe pl2303.ko即可,不需要再有insmod usb-serial.ko, insmod option.ko, insmod pl2303.ko等操作

3. 除了在rc中添加insmod, 开机使用modprobe如何自动加载模块?

  • cp yourdrivername.ko /lib/modules/`uname -r`/kernel/drivers/misc
  •  编辑/lib/modules/`uname -r`/modules.dep,设置驱动程序之间的关联,增加一行: /lib/modules/`uname -r`/kernel/drivers/misc/yourdrivername.ko, 或者使用depmode -a应该也是可以的,该文件,会一直保存的,不随断电而消失
  • 编辑/etc/rc.d/rc.local,增加一行: /sbin/modprobe yourdrivername

4. 将pl2303.ko和option.ko, usb-serial.ko拷贝到板子的/lib/modules/3.14.**/kernel/drivers/usb下,系统启动会自动加载吗,不需要insmod?

 

[驱动]内核添加USB转串口驱动支持