最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

LDD3 – Chapter 1. An Introduction to Device Drivers

工作和技术 crifan 1584浏览 0评论

LDD3 – Chapter 1. An Introduction to Device Drivers

1.choose an acceptable trade-off between "the programming time of the driver" VS "the flexibility of the driver"
在驱动开发时间和灵活性之间做一个取舍。

2.
"what capabilities are to be provided" (the mechanism)
"how those capabilities can be used" (the policy)
分层设计,是底层细节对上层透明,上层只关心接口。

3.驱动需要关心的是如何让底层硬件动起来,而具体上层用户具体如何使用,开发者不应该做任何假设。

4.
LDD3:
http://lwn.net/Kernel/LDD2/

LDD2:
http://lwn.net/Kernel/LDD2/

【驱动模型 理解】
网卡驱动注册到PCI总线这一过程的分析
http://linux.chinaunix.net/bbs/thread-1052717-1-2.html

底层,每个物理设备都和一个结构体struct device的实例,
即已经分配了空间的一个struct device类型的变量,相关联。

一个driver驱动,可以控制很多个具体的device设备。

一个bus总线上,可以挂载很多个device设备。

driver驱动,是给device提供具体的功能,实现具体的物理操作,
比如对底层寄存器的设置,读写物理设备。

【对于总线bus】
“在bus_type中两个很重要的成员就是struct kset drivers和struct kset devices。
它分别代表了连接在这个总线上的两个链,一个是设备链表,另一个则是设备驱动链表。
也就是说,通过一个总线描述符,就可以找到挂载到这条总线上的设备,
以及支持该总线的不同的设备驱动程序。”

总线上,挂了很多设备,具体的设备有哪些功能和如何实现,由对应的driver提供。

系统初始化的时候,扫描总线上挂了哪些设备,然后一个个都分给其一个
struce device变量,然后加如到设备链表中;
同样地,每加载一个设备驱动,即写驱动的时候,编译到内核里面的,
module_init类型的函数,注册了对应的驱动,此时,总线也一个个加到自己的
驱动链表里面。

【对于设备device】
“对于设备来说,在结构体struct device中有两个重要的成员,一个是struct bus_type *bus,另一个是struct device_driver *driver”
也就是,每个设备的相关信息里面,要有对应指针,指向此设备所属于哪种总线,
和实现了此设备的功能的对应的驱动。

【对于驱动driver】
“对于驱动程序来说,在结构体struct device_driver中也有两个成员,struct bus_type *bus和struct list_head devices,这里的bus成员也是指向这个驱动是链接到哪个总线上的,而devices这个链表则是表示当前这个驱动程序可以去进行驱动的那些设备。一个驱动程序可以支持一个或多个设备,而一个设备则只会绑定给一个驱动程序。”
驱动为哪个或哪些设备服务,对应一个或多个设备,所以有设备链表。
驱动挂在哪个总线上,有对应的bus_type指针。

转载请注明:在路上 » LDD3 – Chapter 1. An Introduction to Device Drivers

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
79 queries in 0.182 seconds, using 22.08MB memory