|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
每一个开发团队都对他的发行版做过测试后放出的.那些国际知名的大品牌更是如此。
linux上面对driver的界说:
structdevice_driver{
constchar*name;
structbus_type*bus;
structcompletionunloaded;
structkobjectkobj;
structklistklist_devices;
structklist_nodeknode_bus;
structmodule*owner;
constchar*mod_name;/*usedforbuilt-inmodules*/
structmodule_kobject*mkobj;
int(*probe)(structdevice*dev);
int(*remove)(structdevice*dev);
void(*shutdown)(structdevice*dev);
int(*suspend)(structdevice*dev,pm_message_tstate);
int(*resume)(structdevice*dev);
unsignedintmultithread_probe:1;
};
我们一个个来看,
Name:就是这个driver的名字;
Bus:就是这个driver是挂在下面bus下面的;
Unloaded:这个今后再会商;
Kobj:这个能够了解为driver布局的父亲,假如从面向工具的角度来看的话;
Klist_devices:这个就是由此driver驱动的设备列表;
Knode_bus:这个就是用来挂在它说属的bus链表上的节点,顺着这个链表就能够找到一切的挂在这个bus上的一切的driver;
Owner:这个driver所属的模块;
Mod_name:模块名字;
mkobj:模块的顶层形貌;
probe:这个是很关头的函数,用来初始化此driver驱动的硬件,另有别的可以一般为使用层供应服务说必要提早做的事都必要在这里做;
remove:这个就是移除的时分做的事变;
suspend:这个应当是就寝的时分做的事变,也就是说下层经由过程这个函数完成对硬件的电源战略把持;
resume:这个就是从就寝中醒来必要对硬件所做的事都必要在这里做;
multithread_probe:是不是启用多线程probe;
剖析完了driver的布局,我们看看为何必要如许的计划,也就是说,假如我们本人必要完成一套架构用来完成一样的功效,我们必要做甚么呢?
Driver应当供应的功效
driver应当供应哪些功效呢?
1,为使用层利用driver供应接口;
这个应当是很好了解的,不成能让每一个下层软件的作者本人写驱动来会见硬件;以是必需要笼统出一套接口,可是必要哪些接口呢?
Linux的driver完成很成心思,把任何器材都笼统成文件,包含硬件,如许对硬件的操纵也就只需供应vfs所需的一套接口,固然实在这些接口的范例在很年夜水平上分别了driver的范例,而这些接口也能够供应别的的情势,好比网卡就不供应这些接口;
Open:翻开,也就是翻开这个设备,这只是笼统的观点,良多硬件设备不存在如许的物理举措,好比门,我们才说翻开,固然假如了解所谓“翻开心扉”也就很好了解这里的driver所笼统出的翻开了;先前所说硬件的初始化能够在probe函数内里做,固然我想有些举措放在open内里做也能够的,可是必需要思索的是,open是大概呈现很多个历程来会见的,大概你本人要上锁大概你就要思索可重进性,也就是说假如一些举措只能做一次,那末明显放在open内里来做就分歧适了。
Close:这个和open相反的举措,可是这个close是下层才有的一个观点,在驱动内里用来一个叫release的接话柄现,至于close到release之间的转换就必要往看看文件体系这层的完成了。
Read:这就是读取数据了,没甚么好说,好比串口,好比touchpanel;
Write:这就是写了,也就是往设备内里写数据;
别的的一些对上的接口….就不会商了;
而driver还必需要供应别的的接口:那就是做为linuxdriver自己说必需要供应的接口,这些接口一般是内核本身所挪用的;
那就是
Probe:这个函数很关头,
12下一页
文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln |
|