02 2012 档案
USB设备驱动6:usb HID 报告描述符
摘要:在网上看了许多前辈的文章,就是无法理解报告描述符中的那些数字字符所表达的含义,几经周折,总算大致了解了。codecharMouseReportDescriptor[63]={ 0x05,0x01,//USAGE_PAGE(GenericDesktop) 0x09,0x06,//USAGE(Keyboard) 0xa1,0x01,//COLLECTION(Application)0x05,0x07,//USAGE_PAGE(Keyboard) 0x19,0xe0,//USAGE_MINIMUM(KeyboardLeftControl) 0x29,0xe7,//USAGE_MAXIMUM(Keyb 阅读全文
posted @ 2012-02-28 20:25 image eye 阅读(4199) 评论(2) 推荐(1)
Pci设备驱动1:pci设备驱动实例(realtek8168)
摘要:Realtek8168网卡时pci接口的网卡,其驱动程序就是一个PCI设备的驱动程序实例,我们一起看看其流程。1. 首先,初始化模块调用static inline int pci_register_driver(struct pci_driver *driver)函数来注册设备驱动,这个函数的参数是struct pci_driver *driver,对应于r8168,就是static struct pci_driver rtl8168_pci_driver = { .name = MODULENAME, .id_table = rtl8168_pci_tbl, .probe = rtl8168 阅读全文
posted @ 2012-02-15 17:00 image eye 阅读(11808) 评论(0) 推荐(1)
Pci设备驱动0:设备枚举
摘要:有了设备模型基础及usb设备驱动的基础知识,来了解PCI设备驱动,就相对简单了,因为PCI设备驱动仍然套用了设备驱动模型的方式,用到的仍然是设备模型的相应函数,只是把相应的pci设备挂载到PCI总线的device队列,而凭此驱动则挂载到pci总线的driver队列,对应的匹配函数,探测函数,都是pci总线提供的函数。因为pci设备驱动的安装跟usb设备驱动的安装模式相似,因此,其繁杂的地方则是如何发现设备并把设备添加到pci设备队列中去这个步骤了。网上有一篇文章很好的介绍了PCI设备的枚举过程:(原文:http://www.diybl.com/course/6_system/linux/Lin 阅读全文
posted @ 2012-02-15 15:21 image eye 阅读(12114) 评论(0) 推荐(1)
Usb设备驱动5:usb-firmware简易框架
摘要:usb firmware主要工作是满足usb 协议所定义的标准请求(usb协议第9章第4节),不同的firmware因为硬件不同而操作有所不同,但目的都是完成主控制器对设备的标准请求,大致框图如下: 阅读全文
posted @ 2012-02-13 14:36 image eye 阅读(1415) 评论(0) 推荐(0)
Usb设备驱动4:usb-skeleton例程
摘要:有了前面的设备驱动基础,以及usb方面的基础知识,则可以很轻松的就理解usb-skeleton例程,并轻松的就能写出自己的简易usb driver了。下面是usb-skeleton例程的简易解析:/** USB Skeleton driver - 2.0** Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com)**This program is free software; you can redistribute it and/or*modify it under the terms of the GNU General Pu 阅读全文
posted @ 2012-02-10 17:00 image eye 阅读(3446) 评论(1) 推荐(0)
Usb设备驱动3:root hub守护进程2
摘要:Hub正常工作后,主控制器就会定时询问hub是否有中断产生,当hub端口上有一个设备插入或拔除,hub就向主控制器发送urb请求,即把hub端口的变化状况告诉主控制器,这是通过urb请求来完成的,主机在处理完了这个urb后,就会调用urb所提供的完成函数,来调用hub的中断函数,即hub_irq。Hub_irq是hub的中断处理函数,处理程序首先判断主控制器处理urb的结果状态,如果状态是OK的,则继续处理。1.扫描hub的所有端口,确定是哪个端口发生了变化。端口是用位图来表示的,一个long型数据可以表示32个hub端口(每位表示一个端口),有多少个端口,就用多少位表示,而8位用一个字节表示 阅读全文
posted @ 2012-02-04 20:09 image eye 阅读(3359) 评论(0) 推荐(0)
Usb设备驱动2:root hub守护进程1
摘要:在终端下执行 ps –A| grep khubd,会显示出khubd的进程,这个就是hub的守护进程,我们的设备插入usb接口(不论是插入跟集线器,还是子集线器)后,就是这个守护进程发现的,然后通过中断的方式通知主控制,主控制器才开始调用hub的探测函数,来解析我们的设备的。在上节hub驱动安装OK后,系统会调用kthread_run(hub_thread, NULL, "khubd")来启动守护进程的,其中的khubd,就是守护进程名称,这个进程几乎是个死循环,只有在执行kthread_should_stop时才会退出,而进程也不是时时都在执行的,当hub没有设备插入时, 阅读全文
posted @ 2012-02-02 17:21 image eye 阅读(3876) 评论(0) 推荐(0)