Chinaunix首页 | 论坛 | 博客
  • 博客访问: 279092
  • 博文数量: 42
  • 博客积分: 485
  • 博客等级: 下士
  • 技术积分: 482
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-26 19:33
文章分类
文章存档

2017年(1)

2016年(4)

2015年(8)

2014年(3)

2013年(4)

2012年(3)

2011年(19)

我的朋友

分类: LINUX

2012-10-23 11:46:41

《linux那些事之我是U盘》——很牛
1.device,bus和driver三者的关系(linux设备驱动,除了网络之外,几乎都是这种架构):
    首先,usb-storage驱动(usb.c)加载后,先通过usb_register()向usb-core注册u盘驱动,其中参数包含了id_table(主要涉及的是unusual_devs.h)表,这个表中保存了U盘驱动所支持的所有U盘的信息列表;
    当U盘插入usb接口后,usb-core会先识别到U盘的基本信息,并与驱动中的id_table匹配,如果配得上,则将这个usb的接口intf和分配给u盘的设备id为参数调用usb-storage驱动的storage_probe()函数,这个函数将进行一系列的准备工作,包括U盘的逻辑单元个数(LUN)查询,各种内存的申请、传输函数的挂勾以及信号量的初始化,并创建模拟scsi的host(u盘的数据访问遵循的是scsi接口,类似于一些硬盘),创建scan和control内核进程,前者负责扫描U盘是否还接着和scsi的host扫描(创建/dev/sd*);后者是与U盘进行数据交互的守护进程。

2.debug.c为调试信息的控制;transport.c涉及与U盘相关的按USB协议编写的代码,如ctrl和bulk数据的传输;protocol.c涉及与scsi相关的代码实现;scsiglue.c中实现的函数供scsi的core回调。
 
好不容易整到能上网。。。
 
阅读(1606) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~