Linux内核设备模型(1)
Linux内核设备模型
翻译者:郭少悲
2009/12/01
原文:linux/Documentation/driver-model/overview.txt
概述
~~~~
Linux内核驱动模型是针对内核之前所有不同的驱动模型的统一抽象模型。它的目的是,通
过结合一套数据和操作集到一个全局可访问的数据结构里,从而添加基于某种指定总线的设
备和桥接驱动。
传统的驱动模型实现了类似树的数据结构(或者一个链表数据结构)来控制设备,
而没有一个跨越不同总线类型,统一的抽象数据结构。
当前的驱动模型提供了一个通用的统一的数据模型,用于描述一个总线,以及挂载在总线
上的设备。这个统一的总线模型包含了一套每个总线都拥有的通用属性,一套通用的回调
函数,例如在bus probing, bus shutdown, bus power management回调函数
等等。
通用的设备和桥接接口体现了现代计算机的目标:即无缝设备“即插即用”的能力,电源管
理能力,和热插拔能力。特别地,由Intel和Microsoft支配的模型假定几乎所有的设备在
x86兼容的总线上能够以上述方式工作。当然,不是每一个总线能够支持所有的这些操作
,但是几乎绝大部分的总线支持这些操作的绝大部分。
底层访问
~~~~~~~~
通用的数据域已经从单个具体的总线层移置到一个通用的数据结构里。这些域仍然必须
能够被总线层访问,有时也可以被特定的设备驱动访问。
其他的总线层被鼓励学习PCI总线层的做法,struct pci_dev定义如下:
struct pci_dev {
...
struct device dev;
};
首先记住,它是静态分配的。这意味着在设备探测时只分配一次。也需要记住,这个域
(struct device dev)在struct pci_dev的尾部。这让人们理解在需要bus driver和
global driver之间进行转换时应当做什么,减少切换需要的开销。
(我的理解是,很简单,就是两个数据结构之间通过指针来查找定位)
PCI总线层完全能够自由地访问struct device的各个域。它了解struct pci_dev的结构,也应
当了解struct device的结构。具体的PCI设备驱动使用了新的驱动模型,就不能也不应当
接触struct device的各个域,除非有一个要做的强制理由。
这种抽象阻碍了在过渡阶段不必要的阵痛(我的理解,指的是数据在不同结构层上的处理
)。如果一个域的名字改变或者移除,底层的驱动就会遭到破坏。从另一方面讲,如果仅
有总线层(非设备层)访问struct device,那么应当只有总线层发生改变。
用户接口
~~~~~~~~
借助系
相关文档:
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......
最近做的东西还真是杂乱无章, 有点跟不上进度,接触的都是未知的东西.继续扩充..
alarm(设置信号传送闹钟)
相关函数 signal,sleep
表头文件 #include<unistd.h>
定义函数 unsigned int alarm(unsigned int seconds);
函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进 ......
9.1. 解释队列和队列规定
利用队列,我们决定了数据被发送的方式.必须认识到,我们只能对发送数据进
行整形.
根据Internet的工作方式,我们无法直接控制别人向我们发送什么数据.有点象
我们家里的信报箱,你不可能控制全世界,联系每一个人,修改别人对你发送邮
件的数量.
然而,Internet主要依靠TCP/IP,它的一些特性很有用. ......
使用php的常见问题是:编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,别说,php还真有这样的功能。
我没有在手册中看到。
如我想增加bcmath支持,这是一个支持大整数计算的扩展。windows自带而且内置,linux“本类函数仅在 PHP 编译时配置了 --ena ......
一、系统设置与管理
1.alias
说明:为命令设置别名、显示别名设置。
语法:alias [别名]=[指令名称]:为[指令名称]起一个别名。
alias [别名]:显示出[别名]所对应的命令。
alias:显示所有别名设置。
2.apmsleep
说明:进入挂起或等待状态。
语法:apmsleep hh:mm
参数:hh:mm指定进入挂起或等待状态的时间。
......