Linux那些事读书笔记

1.在drivers/usb/core目录下放置一些核心的代码,包括初始化整个USB系统,初始化root hub,初始化host controller的代码。

 

2.在drivers/usb/storage目录下放置USB驱动程序,如usb.c文件。

 

3.在drivers/usb/core目录下放有原来的host controller代码。在drivers/usb/目录下后来又设置一个host文件夹,存放后来增加的host controller。常见的host controllerEHCI,UHCI,UHCI三种,并扩展出usb core,usb host,usb device三种新概念。

 

4.usb.c文件中有usb_stor_init这个函数,其中调用usb_register函数,这个函数来自usb core,并且向usb core注册。相对应的注销函数usb_deregister()

 

5.设备模型中三个概念:总线、设备、驱动,对应结构体为struct bus_type,struct device,struct device_driver,这三个结构体都在include/linux/device.h中定义。在usb core中定义了devicedriver要添加到各自总线链表中的函数,如驱动中我们只需调用的usb_registerusb_deregister函数。

 

6.usb_driver结构体中的成员:.owner=THIS_MODULE用于给模块计数;.name=usb-storage”是模块的名字,当insmod 之后可lsmod可查到相应名字的模块名;.id_table = storage_usb_ids,注明支持哪些设备,struct usb_device_id 来自 include/linux/mod_devicetable.h文件中,里面定义的struct usb_device_id中的涉及 Vendor-厂家,Product-产品。

 

7.struct usb_device 的结构体她定义于 include/linux/usb.h中。usb 协议规定了,每个 usb 设备都得有些基本的元素,称为描述符,有四类描述符是任何一种 usb 设备都得 有的.他们是device descriptor,configuration descriptor,interface descriptor,endpoint descriptor,关于这几种描述符,usb core 在总线扫描那会就会去读取,会去获得里边的信息。

 

8.一个interface对应一个usb设备驱动程序。struct usb_interface.它定义于 include/linux/usb.h中。 整个 盘驱动程序在后面任何一处提到的 struct usb_interface 都是同一个变量,这个 变量是在 usb core 总线扫描的时候就申请好了的。文件中还有一个interface_to_usbdev函数,顾名思义,就是从一个struct usb_interface 转换成一个 struct usb_device,我们说过了,有些函数需要的参数就是 struct usb_device,而不是 usb_interface,所以这种转换是经常会用到的。

 

9.usb 协议里规定了,usb 设备有四种通信方式,分别是控制传输,中断传输,批量传输,等时传输。

 

10.整个 盘驱动这部大戏,由 storage_probe 开始,由 storage_disconnect 结束.其 中,storage_probe 这个函数占了相当大的篇幅.我们一段一段来看.这两个函数都来自 drivers/usb/storage/usb.c 。对于 U盘驱动程序来说,它真正 驱使 盘工作却是始于 storage_probe()

 

11.关于 prink 和 kmalloc,这两个函数也没有太多需要说的,对大多数人来讲,就把 printk 当成 printf,kmalloc当成malloc即可,只不过是这两个函数是专门用于内核代码中的.一个是打印 一些东西,一个是申请内存空间。

 

12. storage_probe ,行号为 998 的地方.然 而在此之前,有四个函数挡在我们面前,它们就是get_device_info,get_transport,get_protocol,get_pipes.如我前面所说,两个人要走到一起,首先要 了解彼此,这四个函数就是让 driver 去认识 device 的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值