没有合适的资源?快使用搜索试试~ 我知道了~
详细介绍了linux内核U盘的枚举及驱动的流程。对了解U盘是如何识别的,在识别后如何匹配,驱动是如何工作的,本文档有详细的介绍。
资源推荐
资源详情
资源评论
U 盘驱动流程分析
1 U 盘驱动
代码:
drivers/usb/storage/usb.c
drivers/usb/storage/transport.c
drivers/scsi/scsi_scan.c
drivers/scsi/sd.c
1.1
简介
USB Mass Storage 是一类 USB 存储设备,这些设备包括 USB 磁盘、USB 硬盘、USB 磁带
机、USB 光驱、U 盘、记忆棒、智能卡和一些 USB 摄像头等,这类设备由 USB 协议支持。
接口类:
Base
Class
Descriptor
Usage
Description
00h
Device
Use class information in the Interface Descriptors
01h
Interface
Audio
02h
Both
Communications and CDC Control
03h
Interface
HID (Human Interface Device)
05h
Interface
Physical
06h
Interface
Image
07h
Interface
Printer
08h
Interface
Mass Storage
09h
Device
Hub
0Ah
Interface
CDC-Data
0Bh
Interface
Smart Card
0Dh
Interface
Content Security
0Eh
Interface
Video
0Fh
Interface
Personal Healthcare
10h
Interface
Audio/Video Devices
DCh
Both
Diagnostic Device
E0h
Interface
Wireless Controller
EFh
Both
Miscellaneous
FEh
Interface
Application Specific
FFh
Both
Vendor Specific
1.2 USB Mass Storage 驱动
要支持 USB Mass Storage 功能,并打开调试开关,需要添加如下配置:
CONFIG_USB_STORAGE=m
CONFIG_USB_STORAGE_DEBUG=y
drivers/usb/storage/usb.c
先谈一谈 U 盘是如何识别的?
usb 设备的检测工作是通过内核线程 hub_thread 完成的.
usb_hub_init==>khubd_task = kthread_run(hub_thread, NULL, "khubd"); // 创 建 内 核 线 程
hub_thread,监控 hub 上 usb 设备的插拔情况
hub_thread
->hub_events
->hub_port_connect_change
->udev =usb_alloc_dev // 添加 usb 设备
-> hub_port_init(); //复位端口
->usb_new_device(udev)
->device_add(&udev->dev); // 将检测到的 usb 设备添加到 usb_bus_type 总线上,
usb_new_device @hub.c
剩余10页未读,继续阅读
资源评论
kenny_wju
- 粉丝: 33
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功