[usb/uart]内核添加USB转串口驱动支持
2016-11-06 22:22
369 查看
转自:http://blog.csdn.net/gatieme/article/details/49491325
目录
1. 问题
2. 驱动源码
3. 内核配置
4. 编译内核和模块驱动
5. 加载驱动
因此在编译之前我们需要确认自己的内核中有没有USB转串口的驱动.
usb转串口的驱动位于内核源码根目录下
![](http://img.blog.csdn.net/20151029143506085)
主要的源码包括
针对不同的芯片还有
例如在我们本例中使用的就是
主要配置信息如下
-->Device Driver
具体配置如下图所示
首先打开
![](http://img.blog.csdn.net/20151029144021023)
进入
![](http://img.blog.csdn.net/20151029144216641)
选择
![](http://img.blog.csdn.net/20151029144713397)
![](http://img.blog.csdn.net/20151029144908155)
选中
![](http://img.blog.csdn.net/20151029145204071)
最后选择对应的芯片,注意这里选择为M,将驱动编译成模块,动态加载
![](http://img.blog.csdn.net/20151029145919217)
![](http://img.blog.csdn.net/20151029145337279)
![](http://img.blog.csdn.net/20151029150040483)
问题:
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如何自动加载模块?
/lib/modules/version: cp yourdrivername.ko /lib/modules/`uname -r`/kernel/drivers/misc
depmod -a: 使用depmod -a应该也是可以的,该文件,会一直保存的,不随断电而消失, 或者编辑/lib/modules/`uname -r`/modules.dep,设置驱动程序之间的关联,增加一行: /lib/modules/`uname -r`/kernel/drivers/misc/yourdrivername.ko
modprobe: 编辑/etc/rc.d/rc.local,增加一行: /sbin/modprobe yourdrivername
4. 理解depmod -a和modprobe
depmod -a: 通过读取/lib/modules/version下的每一个模块来创建模块的依赖性列表,也就是/lib/modules/version下的modules.dep文件,所以执行depmod -a不需要到特定目录下,且待加载模块需要拷贝到/lib/modules/version目录下
modprobe: modprobe pl2303, 不需要pl2303.ko, modprobe会读取modules.dep文件,并决定模块加载顺序。
![](https://images2015.cnblogs.com/blog/917884/201612/917884-20161211144957944-1908768317.png)
5. 将pl2303.ko和option.ko, usb-serial.ko拷贝到板子的/lib/modules/3.14.**/kernel/drivers/usb下->depmod -a->modprobe, 系统启动会自动加载吗?
在测试pl2303.ko,发现系统启动会自动加载,不知什么原因?
6. Make zImage, make modules, make modules_install怎么理解?
当menuconfig中将模块设置为"M"时,make zImage不会把模块编译进内核。这时,可以使用make modules编译模块源码为*.ko文件,然后通过make modules_install动态加载该模块。
目录
1. 问题
2. 驱动源码
3. 内核配置
4. 编译内核和模块驱动
5. 加载驱动
问题
这两天为了做gps和arm的通讯,不得不捣鼓这个东东。开发板是创维特jx2410,usb转串口线的芯片是pl2303。还好是这个芯片,让我没费多少力气,就达成了目的。因为linux对它已经支持了,我们只要编译、加载它的驱动就ok了。驱动源码
一般来说USB转串口的驱动已经集成在内核中,我们无需下载,只需要在编译时进行一些配置即可.因此在编译之前我们需要确认自己的内核中有没有USB转串口的驱动.
usb转串口的驱动位于内核源码根目录下
/drivers/usb/serial
主要的源码包括
usb-serial.c,
option.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 supportUSB驱动配置页面主要配置信息如下
usb support下
选择
USB Serial Converter Surpport相关的选项。
选中
USB Serial Converter Surpport和
usb generic serial driver
最后选择对应的芯片,注意这里选择为M,将驱动编译成模块,动态加载
编译内核和驱动模块
make zImage, [b][/b]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如何自动加载模块?
/lib/modules/version: cp yourdrivername.ko /lib/modules/`uname -r`/kernel/drivers/misc
depmod -a: 使用depmod -a应该也是可以的,该文件,会一直保存的,不随断电而消失, 或者编辑/lib/modules/`uname -r`/modules.dep,设置驱动程序之间的关联,增加一行: /lib/modules/`uname -r`/kernel/drivers/misc/yourdrivername.ko
modprobe: 编辑/etc/rc.d/rc.local,增加一行: /sbin/modprobe yourdrivername
4. 理解depmod -a和modprobe
depmod -a: 通过读取/lib/modules/version下的每一个模块来创建模块的依赖性列表,也就是/lib/modules/version下的modules.dep文件,所以执行depmod -a不需要到特定目录下,且待加载模块需要拷贝到/lib/modules/version目录下
modprobe: modprobe pl2303, 不需要pl2303.ko, modprobe会读取modules.dep文件,并决定模块加载顺序。
![](https://images2015.cnblogs.com/blog/917884/201612/917884-20161211144957944-1908768317.png)
5. 将pl2303.ko和option.ko, usb-serial.ko拷贝到板子的/lib/modules/3.14.**/kernel/drivers/usb下->depmod -a->modprobe, 系统启动会自动加载吗?
在测试pl2303.ko,发现系统启动会自动加载,不知什么原因?
6. Make zImage, make modules, make modules_install怎么理解?
当menuconfig中将模块设置为"M"时,make zImage不会把模块编译进内核。这时,可以使用make modules编译模块源码为*.ko文件,然后通过make modules_install动态加载该模块。
相关文章推荐
- fl2440——移植USB驱动、内核添加USB支持、U盘挂载
- linux-2.6.35内核移植—USB驱动的添加
- 添加网卡驱动和USB支持 以及一些问题的集中处理
- ARM9开发板FL2440移植Linux-3.0内核————添加USB驱动
- Linux-2.6.22.6 内核移植--添加USB设备驱动
- linux内核支持usb驱动,usb转串口设备,u盘
- 为Android内核添加新驱动,并添加到menuconfig菜单
- 支持 PS/2 与 USB 的键盘过滤驱动(可卸载)
- hello world及内核模块 && MTK平台添加kernel module && 生成.ko的驱动改生成.o
- 利用 Windows Server 2008 R2 的 WDS 驱动程序功能快速为引导映像添加额外的网卡驱动支持
- 支持 PS/2 与 USB 的键盘过滤驱动(可卸载)
- 支持 PS/2 与 USB 的键盘过滤驱动(可卸载)
- linux gspca usb摄像头驱动添加对新型号的详细移植步骤
- 编译内核(添加驱动)
- 向内核里面添加触摸屏驱动(方法适合其他设备)[zt]
- Linux 2.6.22.6移植到S3C2440之通过nfs启动qt并添加USB鼠标支持
- 支持 PS/2 与 USB 的键盘过滤驱动(可卸载)
- Code maturity level options 代码成熟度选项 [*]Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择 我是开发者,所以选[*] Loadable module support 可加载模块支持 [*]Enable loadable module support 内核编译配置选项简介 (2.4.20-8
- 支持 PS/2 与 USB 的键盘过滤驱动(可卸载)
- Debian 添加 FreeBSD 内核支持