
USB驱动
chinseeker
这个作者很懒,什么都没留下…
展开
-
LINUX下USB1.1设备学习小记(4)_uhci(1)
现在开始LINUX下USB主机和设备的驱动架构分析这是最宏观的架构图 先讲解红框中的内容,先不在PDIUSBD12上写入HID等模块,等讲解完UHCI和PDIUSBD12的详细通讯过程之后,再在D12上写HID的模块内容,进行蓝框内容的讲解首先是usb主机控制器UHCI在LINUX下的架构,关于sysfs的内容在” 个人对kobject的一点研究”中有介绍,为了减少图转载 2012-07-16 18:35:35 · 435 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(2)_协议
USB协议:先看USB接口可以看出,在USB使用了4根线,分别为电源线,地线,信号线和差分信号线差分信号线用于检测信号线的传输是否正确下面我们只关注信号线然后是USB的串口传输在串口传输中,由于所有的信号共用一根数据线,所以不仅有先来后到的问题,而且在一个设备和另一个设备进行通信的时候,如果别的设备也进来插一脚,就会导致信号的出错,所以这个时候需要一个管理者转载 2012-07-16 20:49:00 · 365 阅读 · 0 评论 -
usb probe
本文将详细讲述2.6.22下的一个USB设备插上linux系统的PC后是如何一步一步调到我们的usb设备驱动的probe函数的, 我们知道我们的USB驱动的probe函数中的一个参数是interface结构, 因此一般来说, 一个USB设备中的任何一个接口都应该有对应的一个驱动程序,当然也有例外(如cdc-acm).我们知道USB设备都是通过插入上层HUB的一个Port来连入系统并进而被转载 2012-07-17 10:45:00 · 364 阅读 · 0 评论 -
usb_device_id->match_flags
linux-2.6.21.5/include/linux/mod_devicetable.h/* Some useful macros to use to create struct usb_device_id */#define USB_DEVICE_ID_MATCH_VENDOR 0x0001#define USB_DEVICE_ID_MATCH_PROD转载 2012-07-17 15:23:47 · 1124 阅读 · 0 评论 -
USB驱动分析(二)
probe,disconnect,id_table,这三个咚咚中首先要登场亮相的是id_table,它是干嘛用的呢?我们说过,一个device只能绑定一个driver,但driver并非只能支持一种设备,道理很简单,比如我有两块U盘,那么我可以一起都插入,但是我只需要加载一个模块,usb-storage,没听说过插入两块U盘就得加载两次驱动程序的,除非这两块U盘本身就得使用不同的驱动程序.也正转载 2012-07-18 10:59:35 · 1593 阅读 · 0 评论 -
USB驱动分析(三)
需要注意的是,这些调试信息得是我们打开了编译选项CONFIG_USB_STORAGE_DEBUG才有意义的,这里也看出来了,如果这个选项为0,那么这几个宏就什么也不干,因为它们被赋为空了.关于US_DEBUG系列的这几个宏,就讲这么多,之后再碰上,将直接过滤掉,不予多说.关于prink和kmalloc,这两个函数也没有太多需要说的,对大多数人来讲,就把printk当成printf,把kmall转载 2012-07-18 11:01:00 · 2690 阅读 · 0 评论 -
USB设备类
Defined 1.0 Class CodesUSB Class Codes March 2, 2006 USB defines class code information that is used to identify a device’s functionality and to nominally load a device dr转载 2012-07-19 08:44:36 · 1422 阅读 · 0 评论 -
用户空间与内核空间数据交换的方式(3)------seq_file
原文:http://hi.baidu.com/zhaoercheng/blog/item/aff223f4ad796f3d730eec44.html一般地,内核通过在procfs文件系统下建立文件来向用户空间提供输出信息,用户空间可以通过任何文本阅读应用查看该文件信息,但是procfs 有一个缺陷,如果输出内容大于1个内存页,需要多次读,因此处理起来很难,另外,如果输出太大,速度比转载 2012-07-19 21:31:43 · 503 阅读 · 0 评论 -
用户空间与内核空间数据交换的方式(2)------procfs
原文:http://hi.baidu.com/zhaoercheng/blog/item/7edb1a4d923662d5d0c86a7a.htmlprocfs是比较老的一种用户态与内核态的数据交换方式,内核的很多数据都是通过这种方式出口给用户的,内核的很多参数也是通过这种方式来让用户方便设置的。除了sysctl出口到/proc下的参数,procfs提供的大部分内核参数是只读的。实际上转载 2012-07-19 21:28:07 · 491 阅读 · 0 评论 -
用户空间与内核空间数据交换的方式(1)------debugfs
内核开发者经常需要向用户空间应用输出一些调试信息,在稳定的系统中可能根本不需要这些调试信息,但是在开发过程中,为了搞清楚内核的行为,调试信息非常必要,printk可能是用的最多的,但它并不是最好的,调试信息只是在开发中用于调试,而printk将一直输出,因此开发完毕后需要清除不必要 的printk语句,另外如果开发者希望用户空间应用能够改变内核行为时,printk就无法实现。因此,需要一种新的机制转载 2012-07-19 21:25:27 · 629 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(4)_uhci(2)
好~ 现在万事俱备,只欠uhci硬件的注册了现在谈一下uhci硬件的组成,uhci的硬件分为两个大的部分,主机控制器和根集线器,如下图 当提交uhci硬件的注册到pci总线后,经过一轮匹配,终于找到了uhci,进入到uhci_pci_driver->probe这个函数下 usb_hcd_pci_probe在/drivers/usb/host/uhci-hcd.c中转载 2012-07-16 18:40:11 · 645 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(3)_host与device
各位还记得”任何传输都是由host发起的”这句话么~在usb设备插入pc中到拔出usb设备,都是由host进行询问的一个usb鼠标的工作流程可以表达如下:usb鼠标插入pc中:主机询问设备:给我你的设备信息(控制传输)主机根据usb鼠标的设备信息进行驱动配置,配置结束后主机询问设备:给我你的数据信息(中断传输)一定的时间间隔之后....主机询问设备:给我你的数据信息转载 2012-07-16 20:49:55 · 486 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(4)_uhci(3)
在pci中访问uhci寄存器需要使用io端口,0x0为uhci的控制命令寄存器,所有的详细寄存器在uhci的手册中均有描述,我这里就不详细介绍了,想要的在下面的附录中有提供check_and_reset_hc检测uhci是否需要复位,并完成复位后的初始化工作 check_and_reset_hc在/drivers/usb/host/uhci-hcd.c中 s转载 2012-07-16 18:42:39 · 503 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(4)_uhci(4)
启动主机控制器和根集线器之后,现在来注册根集线器register_root_hub负责根集线器的注册register_root_hub在/drivers/usb/core/hcd.c中 staticint register_root_hub(struct usb_hcd*hcd){ struct device *parent_dev= hcd转载 2012-07-16 18:48:58 · 1009 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(4)_uhci(5)
usb_get_configuration的用途为取得并设置所有的描述符usb_get_configuration在/drivers/usb/core/config.c中int usb_get_configuration(struct usb_device*dev){ struct device *ddev= &dev->dev; //获取设备描转载 2012-07-16 20:30:38 · 854 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(5)_uhci与设备(1)
现在开始uhci与设备的通信分析先看分析枚举过程,再分析数据通信USB总线上设备的枚举:1. 当设备插入时,设备的上拉电阻使信号线的电位升高,这时候根集线器检测到设备的插入2. 主机发送Get_status到根集线器来获得当前端口的状态3. 主机发送Set_Feature,让根集线器复位端口,使得端口上的设备处于复位状态4. 主机发送Get_status检测端口的复位是否完转载 2012-07-16 20:34:46 · 900 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(5)_uhci与设备(2)
hub_port_wait_reset在/drivers/usb/core/hub.c中 staticint hub_port_wait_reset(struct usb_hub*hub, int port1, struct usb_device *udev, unsignedint delay){ int转载 2012-07-16 20:37:03 · 697 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(6)_hid与input子系统(1)
现在终于开始匹配设备的接口驱动了目标当然是hid,当然在了解驱动初始化过程之前,让我们先看看一下hid协议我对hid协议的理解是建立在鼠标上的,所以如果有理解不当的地方,请务必请大家指出我们先来看鼠标的结构,鼠标有左键,右键,中键,滚轮,X轴和Y轴这6个量其中左键,右键和中键的点击可以用0和1两个数值来表达,呢么就占1bit然后是X轴,Y轴和滚轮,我们假设他们的相对数值变化范围转载 2012-07-16 20:38:59 · 1156 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(6)_hid与input子系统(2)
走完之前的程序后的数据结构如下 注意,之后会把local中的数据清空好,到下一组为0x09, 0x01这是一个局域项目,重新向局域结构中添加项目下一个组为0xa1, 0x00这是一个主项目,用于物理集合收集的开始添加完成后的数据结构如下 又把局域结构中的数据清零到下一组,为0x05, 0x09这是一个全局项目,重设用途继续下一组, 0转载 2012-07-16 20:41:53 · 862 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(6)_hid与input子系统(3)
现在回到input_attach_handler中error = handler->connect(handler, dev, id);现在知道handler->connect是啥了吧,就是mousedev_connectmousedev_connect在/drivers/input/mousedev.c中 staticint mousedev_connect(转载 2012-07-16 20:43:54 · 974 阅读 · 0 评论 -
LINUX下USB1.1设备学习小记(1)
现在暂定的学习目标为一个USB鼠标的设备到主机的传输过程软件上的贯穿(会涉及到部分硬件 但是本人的电电路知识有限 涉及的量不会多) 学习的框架如下:1. USB1.1协议 A. 控制传输 B. 中断传输 2. USB主机 A. LINUX下的UHCI3. USB设备 A.飞利浦的PDIUSBD124.转载 2012-07-16 20:47:58 · 374 阅读 · 0 评论 -
USB驱动分析(一)
原文:http://blog.chinaunix.net/space.php?uid=12051988&do=blog&id=2963109这个故事中使用的是2.6.10的内核代码.Linux内核代码目录中, 所有去设备驱动程序有关的代码都在drivers/目录下面,在这个目录中我们用ls命令可以看到很多子目录.localhost:/usr/src/linux-2.6.10/dri转载 2012-07-18 10:58:00 · 2897 阅读 · 0 评论