linux设备模型

linux设备模型

ID:40287943

大小:246.50 KB

页数:34页

时间:2019-07-30

linux设备模型_第1页
linux设备模型_第2页
linux设备模型_第3页
linux设备模型_第4页
linux设备模型_第5页
资源描述:

《linux设备模型》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一:前言Linux设备模型是一个极其复杂的结构体系,在编写驱动程序的时候,通常不会用到这方面的东西,但是。理解这部份内容,对于我们理解linux设备驱动的结构是大有裨益的。我们不但可以在编写程序程序的时候知其然,亦知其所以然。又可以学习到一种极其精致的架构设计方法。由于之前已经详细分析了sysfs文件系统。所以本节的讨论主要集中在设备模型的底层实现上。上层的接口,如pci.,usb,网络设备都可以看成是底层的封装。二:kobject,kset和ktypeKobject,kset,kypte这三个

2、结构是设备模型中的下层架构。模型中的每一个元素都对应一个kobject.kset和ktype可以看成是kobject在层次结构与属性结构方面的扩充。将三者之间的关系用图的方示描述如下: 如上图所示:我们知道。在sysfs中每一个目录都对应一个kobject.这些kobject都有自己的parent。在没有指定parent的情况下,都会指向它所属的kset->object。其次,kset也内嵌了kobject.这个kobject又可以指它上一级的parent。就这样。构成了一个空间上面的层次关系。

3、其实,每个对象都有属性。例如,电源管理,执插拨事性管理等等。因为大部份的同类设备都有相同的属性,因此将这个属性隔离开来,存放在ktype中。这样就可以灵活的管理了.记得在分析sysfs的时候。对于sysfs中的普通文件读写操作都是由kobject->ktype->sysfs_ops来完成的.经过上面的分析,我们大概了解了kobject.kset与ktype的大概架设与相互之间的关系。下面我们从linux源代码中的分析来详细研究他们的操作。 三:kobject,kset和ktype的操作为了说明k

4、object的操作,先写一个测试模块,代码如下:#include#include#include#include#include#include#include MODULE_AUTHOR("ericxiao");MODULE_LICENSE("DualBSD/GPL"); voido

5、bj_test_release(structkobject*kobject);ssize_teric_test_show(structkobject*kobject,structattribute*attr,char*buf);ssize_teric_test_store(structkobject*kobject,structattribute*attr,constchar*buf,size_tcount); structattributetest_attr={       .name="er

6、ic_xiao",       .mode=S_IRWXUGO,}; staticstructattribute*def_attrs[]={       &test_attr,       NULL,};  structsysfs_opsobj_test_sysops={       .show=eric_test_show,       .store=eric_test_store,}; structkobj_typektype={       .release=obj_test_releas

7、e,       .sysfs_ops=&obj_test_sysops,       .default_attrs=def_attrs,}; voidobj_test_release(structkobject*kobject){       printk("eric_test:release.");} ssize_teric_test_show(structkobject*kobject,structattribute*attr,char*buf){       printk("have

8、show.");       printk("attrname:%s.",attr->name);       sprintf(buf,"%s",attr->name);       returnstrlen(attr->name)+2;} ssize_teric_test_store(structkobject*kobject,structattribute*attr,constchar*buf,size_tcount){       printk("havestore"); 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。