[驱动]内核添加USB转串口驱动支持
转自:http://blog.csdn.net/gatieme/article/details/49491325
目录
问题
这两天为了做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 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如何自动加载模块?
- /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文件,并决定模块加载顺序。

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动态加载该模块。
[驱动]内核添加USB转串口驱动支持的更多相关文章
- [usb/uart]内核添加USB转串口驱动支持
转自:http://blog.csdn.net/gatieme/article/details/49491325 目录 1. 问题 2. 驱动源码 3. 内核配置 4. 编译内核和模块驱动 5. 加载 ...
- Linux 串口、usb转串口驱动分析(2-2) 【转】
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26807463&id=4186852 Linux 串口.usb转 ...
- Linux 串口、usb转串口驱动分析(2-1) 【转】
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26807463&id=4186851 Linux 串口.usb转 ...
- linux驱动基础系列--Linux 串口、usb转串口驱动分析
前言 主要是想对Linux 串口.usb转串口驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如字符设备驱动.平台驱动等也不进行详细说明原理.如果有任何错误地方,请指出, ...
- usb转串口驱动时会出现“文件的哈希值不在指定的目录”这样的提示
一般在安装一些usb转串口驱动时会出现“文件的哈希值不在指定的目录”这样的提示,那么怎么解决呢?知道的别喷我哦,我只是再普及一下,嘿嘿1.鼠标移到右下角,点击“设置”,再点击“更改电脑设置”2.点击最 ...
- USB转串口驱动代码分析
1.USB插入时,创建设备 [plain] view plaincopy DriverObject->DriverExtension->AddDevice = USB2COM_PnPAdd ...
- TI 开发板安装USB转串口驱动
使用TI开发板的时候,USB转串口驱动没有,显示,无法识别设备.搜了好久才搜到相关驱动. 做个记录. 链接: https://pan.baidu.com/s/1ZT5zzVcU727jrYacKVoT ...
- STM32 USB转串口驱动安装不成功出现黄色感叹号解决方法!
相信很多人在做USB转串口时出现过串口驱动安装不成功,出现黄色感叹号问题, 出现这种问题一般是驱动安装不成功造成的. 这里我就这个问题总结几个简单的方法. 方法1: 插上USB,利用驱动人生安装驱动. ...
- linux下usb转串口驱动分析【转】
转自:http://blog.csdn.net/txxm520/article/details/8934706 首先说一下linux的风格,个人理解 1. linux大小结构体其实是面向对象的方法,( ...
随机推荐
- Windows Store App 用户库文件夹操作
上面介绍了与用户库文件有关的操作,包括创建.读写等,下面将介绍与用户库文件夹相关的操作. 与文件操作一样,想要对用户库文件夹进行操作,需要首先获取用户库的相应位置,获取的方法上面已经介绍过了,这里不再 ...
- Fireeye火眼公司发布报告,评论中国网络间谍活动
2013年10月2日,Fireeye火眼公司发布报告,评论中国网络间谍活动-Fireeye(美 国火眼公司)发布报告<世界网络大战:理解网络攻击背后的国家意图>(World War C: ...
- MicroERP主要业务流程示意图
库存(进销存)管理 财务管理 固定资产管理 生产管理
- php一个简单的计算器
<?php if(isset($_POST['sub'])) { $result = ''; switch($_POST['ysf']) { case '+': $result = $_POST ...
- 探索javascript----有关数组的常用方法
与字符串的转换: str.split(","):将一个字符串以为英文逗号分割,返回一个数组: arr.join(","):返回用指定分隔符间隔的含所有数组元素的 ...
- Objective C类方法load和initialize的区别
Objective C类方法load和initialize的区别 过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于 ...
- 北大poj-1062
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43523 Accepted: 12760 Descripti ...
- SVD小结
1.矩阵分解 假设一个矩阵Data是m行n列,SVD(奇异值分解)将Data分解为U,E,VT 三个矩阵: Datam*n=Um*kEk*kVTk*n E是一个对角矩阵,对角元素为奇异值,对应Data ...
- input , textarea 边框问题
一.去掉边框: 看看基本的HTML: 复制代码 代码如下: <div class="wrap"> <input type="text" cla ...
- angular 国际化
今天mentor说让我看看angular国际化的问题,我看了看,发现这个帖子很有价值,但是手头上还有好几个issue没有解决,所以就先考皮在这将连接,解决完这几个bug我再去细细研究这个问题, htt ...