usb驱动笔记

一.USB驱动程序框架:
app:
-----------------------------------------------------
                  usb设备驱动程序
内核------------------------------------------------
                usb总线驱动程序
-----------------------------------------------------

                 usb主机控制器

                UHCI  OHCI    EHCI

硬件         ---------------------------

                   usb设备

UHCI:intel,低速(1.5Mbps)/全速(12Mbps)

OCHI:microsoft  低速/全速

EHCI:                  高速(480Mbps)

usb总线驱动作用:

a.识别usb设备

1)分配地址,

2)并告诉usb设备(set address)

3)发出命令获取描述符

b.查找并安装对应的设备驱动程序

c.提供usb读写函数

note:可以插入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     Kingston DataTraveler 3.0 PMAP PQ: 0 ANSI: 6
sd 0:0:0:0: [sda] 60604416 512-byte hardware sectors (31029 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] 60604416 512-byte hardware sectors (31029 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Assuming drive cache: write through
拔掉:

sd 0:0:0:0: [sda] Attached SCSI removable disk
usb 1-1: USB disconnect, address 2
在内核目录/drivers/下搜索grep  “USB device using ”

usb/core/hub.c:2186:          "%s %s speed %sUSB device using %s and address

hub_irq

            kick_khubd

                 wake_up(&khubd_wait);//唤醒

                      hub_thread    

                            hub_events 

                                   hub_port_connect_change

                                         choose_address(udev)//给新设备分配新编号(地址)

                                         hub_port_init   //打印出发现一个新设备

                                                 hub_set_address

                                                   usb_get_device_descriptor(udev,8);//获取设备描述符

 

设备描述符->配置描述符->接口描述符(逻辑上面的设备:比如usb声卡可以分为  1)录音  2)播放)

分析usb驱动总线方法:

1)首先插入usb设备,会打印一些信息,

2)根据信息搜索在内核的打印函数

3)然后反推各个调用实现的函数

二.usb驱动步骤

1.分配/设置usb_driver结构体

.id_table

.probe

.disconnect

2.注册函数

1)入口函数static int usbmouse_as_key_init(void),负责把函数告诉内核,注册函数

2)出口函数static int usbmouse_as_key_exit(void),usb退出或拔掉,不注册函数

测试驱动

a.在源码树上make menucofig去掉原来的usb鼠标驱动

- < > Support for Host-side USB                                   
     --- NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'        
        USB Gadget Support  --->                                     
 b.make  uImage 并使用新的内核启动

c.insmod  usbmouse_as_key.ko

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值