给大家带来Linux中关于driver的编写
每一个开发团队都对他的发行版做过测试后放出的.那些国际知名的大品牌更是如此。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
给大家带来Linux中关于driver的编写
网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rloginrcp、finger、mail、nslookup它作为一个桥梁毗连设备和driver,而且必需要对硬件举行初始化,以便在今后的用户接口挪用的时分设备能一般事情;从软件的角度说,很多空间的分派等都在这里做,经由过程dev_set_drvdata和dev_get_drvdata设置和猎取响应的数据;</P> Remove:这个函数和下面这个函数是相反的,也就是卖力清算收尾的事情,卖力开释数据布局,中断硬件等;
Suspend:这个是在就寝的时分挪用的,在这里就必需要举行功耗把持;
Resume:这个就是叫醒的时分挪用的,它必要实行响应的恢复举措,以便硬件能一般事情;
2,完成对硬件设备的会见把持;
只供应接口不卖力完成,就是所谓的“银样蜡枪头”,以是驱动最庞大的中央在于怎样把持硬件完成我们想完成的功效;而这些详细的完成一般就包括在给下层供应的接口中;而别的一方面一个驱动要完成某项功效良多时分不是本人自力完成的,而是依附于别的的模块,好比WIFI驱动,在我们的平台上,是经由过程sdio口毗连的,而sdio口是mmccontroller供应的,而mmc自己又是经由过程gpio话柄现的,换句话说,假如要wifi能一般事情,就必需要mmc这一套能一般事情;那末就必要先设置gpio口,再移植mmc驱动,最初才是wifi驱动,而wifi芯片自己说不定还必要别的的举措才干一般,好比上电等等;
Driver和设备之间的毗连
假如说driver就是由structdevice_driver来形貌,而设备也是有structdevice来形貌的话,那末怎样形貌driver和driver所驱动的设备这类干系呢?也就是说假如是父子,或伉俪干系的话,他们是怎样相认的,又是怎样保持这类纽带的?一个设备一般由一个driver驱动,而一个driver偶然候能够驱动多个设备(这大概是在优美的一夫多妻制时期)
1,家属的观点
每一个人都出生于一个家庭,而由一系列有血缘干系的家庭又构成家属,我想bus的观点有点相似家属;
2,设备的出生
当一个设备经由过程device_add的体例挪用的话,对它所属的家属来讲意味着一个新的小孩出生了;假如这时候候它的夫妇已由天主指定的话,意味着它的夫妇已住进了它们的家属(挂在了bus上),那末天主就会把它的夫妇driver指向这个device完结婚姻,一般这时候候就会挪用driver供应的probe函数举行一系列的初始化操纵,这就像丈夫对老婆举行头脑教导一样;
3,driver的出生
当一个driver挪用driver_register的时分,也就公布着新的孩子出生了,假如它的夫妇已住进他们的家属,也就是说假如驱动的设备已挂在了总线上,那末就能够娶亲了(估量他们是属于一出身就对照成熟的范例),一样这时候候就要挪用driver的probe函数举行初始化事情了;
4,生齿挂号
不论是男孩仍是女孩,对当局来讲都是kobject,以是一旦有孩子出生不论是男是女城市挪用kobject_add挂号在案,如许当局就能够完整掌控一切的信息;
5,夫妇的寻觅
假如是先有device,那末婚配就是经由过程遍历bus上的driver来举行的,反之就是经由过程遍历bus上的设备举行的,而婚配的条件就是设备已注册,而且切合这个家属的族规,而族规一般是由bus的match函数来把持,而良多时分都是对照设备的名字和driver的名字是不是不异(这个比娶亲要比的器材俭朴很多啊,如今娶亲比的是money)固然另有别的很多的婚配体例,假如经由过程这个测试就能够挪用driver供应的probe函数举行初始化了;
如许的话,设备和driver就能够毗连起来了,有了如许的生齿挂号和家属接洽,就能够完成诸如就寝叫醒如许的功效了
</p>上一页12
由于在linux中,用户权限很大,做任何事情都很自由,所以,你往往需要知道你做的每一步在干什么。 首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。 我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。 熟悉并掌握安装Linux,安装是学习的前提。目前较常见的安装方法有二种: 众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。 随着实验课程的结束,理论课也该结束了,说实话教OS的这两位老师是我们遇到过的不错的老师(这话放这可能不太恰当). Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。? 可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。? 随着Linux技术的更加成熟、完善,其应用领域和市场份额继续快速增大。目前,其主要应用领域是服务器系统和嵌入式系统。然而,它的足迹已遍布各个行业,几乎无处不在。
页:
[1]