USB驱动程序框架搭建
app:
-------------------------------------------
内核 --------------------------------------
-------------------------------------------
硬件
UHCI: intel,
OHCI: microsoft
EHCI:
也就是说最底层是usb设备,往上是USB总线控制器、USB总线驱动程序、USB驱动程序,最后是应用程序。其中USB总线控制器包括三种:UHCI OHCI EHCI
2. USB总线驱动程序的作用
1. 识别USB设备
描述符的信息可以在includelinuxusbCh9.h看到
2. 查找并安装对应的设备驱动程序
3. 提供USB读写函数
3、我们开始正式构建linux usb框架了,小心了!!!
首先我们需要从开发板获得一些信息:
把USB设备接到开发板上,看输出信息:
usb 1-1: new full speed USB device using s3c2410-ohci and address 2
usb 1-1: configuration #1 chosen from 1 choice
scsi0 : SCSI emulation for USB Mass Storage devices
scsi 0:0:0:0: Direct-Access
sd 0:0:0:0: [sda] Attached SCSI removable disk
拔掉
usb 1-1: USB disconnect, address 2
再接上:
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: configuration #1 chosen from 1 choice
scsi1 : SCSI emulation for USB Mass Storage devices
scsi 1:0:0:0: Direct-Access
sd 1:0:0:0: [sda] Attached SCSI removable disk
接着我们就可以根据这些信息进行分析了:
首先我们在内核的dirvers目录下搜索:“USB device using
grep "USB device using" * -nR
结果搜到了下面这条信息:usb/core/hub.c:2186:
那么我们就从usb/core/hub.c这个文件开始分析:
hub_port_init 在函数hub_port_connect_change中被调用
hub_port_connect_change在函数hub_events中被调用
hub_events在函数hub_thread中被调用
hub_thread函数里有这么一句:
wait_event_interruptible(khubd_wait,!list_empty(&hub_event_list) ||
说明进程会在khubd_wait这个等待队列里休眠,那么谁把它唤醒呢?我们搜索一下
在kick_khubd函数里有这么一句:wake_up(&khubd_wait);把进程唤醒了
kick_khubd被函数hub_irq调用,根据注释信息我们知道当连接发生变化或则出现措施就会发生中断,从而进入这个函数。
那么我们大致可以总结出了框架:
hub_irq
我们来总结一下上面的框架:首先接上usb设备时会发 生中断,然后唤醒进程。接着先设置usb设备的地址,然后获取设备描述符和配置描述符等各种描述符,这是为了寻找驱
USB驱动程序框架搭 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)