博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设备驱动基础0:设备模型之kobject,kset及其关系
阅读量:6613 次
发布时间:2019-06-24

本文共 1356 字,大约阅读时间需要 4 分钟。

Linux2.6以后的设备驱动,都是在设备模型的基础上构建的,因此,要编写linux下的设备驱动程序,不论是usb设备,pci设备等,都需要了解设备模型。

设备模型的基础结构体主要是kobject,kset这两个结构体:

struct kobject {

   char      * k_name;

   char      name[KOBJ_NAME_LEN];

   struct kref    kref;

   struct list_head  entry;

   struct kobject    * parent;

   struct kset    * kset;

   struct kobj_type  * ktype;

   struct dentry     * dentry;

};

 

struct kset {

   struct subsystem  * subsys;

   struct kobj_type  * ktype;

   struct list_head  list;

   struct kobject    kobj;

   struct kset_hotplug_ops  * hotplug_ops;

};

 

还有一个subsys结构体,但subsys结构体跟kset差不多,就多了一个互斥访问信号量,因此,就不需要列出了,另外还有一个结构体

struct kobj_type {

   void (*release)(struct kobject *);

   struct sysfs_ops  * sysfs_ops;

   struct attribute  ** default_attrs;

 };

用来表示kobject,kset的类型。 

一个kobject结构如下图的kobject 类型部分,而一个kset结构如下图的kset 类型部分,一个kobject加入一个kset,主要是kobject结构体中的相关字段记录了对应的kset信息,①记录了kobject所对应kset,其所指向的是kset所包含的kobject的地址,②记录了kobject所对应的kset的kset指针,③记录了kobject的类型,④记录了kset所有的kobject的链子,这个链子是一个双向链表,每当有一个kobject加入到当前的kset,就会调用list_add_tail()函数,把要加入kset的kobject连入链表的结尾,最终形成一个链表。

当有另外一个kobject要加入当前的kset,其中的①②③步跟第一个加入当前kset的kobject是一样的,即把要加入的kobject的成员设置,使之指向当前的kset对应数据,而④需要把kobject添加到kset的list的尾部,下图表示了kobject b加入到kset A的图示:

当有一个kset,需要加入到当前的kset,其方法也跟一个kobject要加入到当前kset一样,即把要加入的kset中所包含的kobject的成员设置,使这些成员指向对应的kset的对应数据。而当前kset要加入另一个kset,其方式也是跟一个kset加入到当前kset一样,都是设备kset中的kobject,使kobject的成员指向要加入的kset的对应数据即可,下图显示了一个kset B加入到kset A中的图示。

一个简单的kset,kobject关系图如下:

转载地址:http://xaaso.baihongyu.com/

你可能感兴趣的文章
Kali Linux 无线渗透测试入门指南 第七章 高级 WLAN 攻击
查看>>
Expert 诊断优化系列------------------语句调优三板斧
查看>>
谁说AR不如VR火爆?IDC说四年内AR将有VR两倍的市场规模
查看>>
Arm推出PSA平台安全架构 助力物联网安全
查看>>
LXC 容器集chroot使用说明
查看>>
服务器大量php-cgi.exe进程,导致CPU占用100%
查看>>
spring+mybitas 实现多数据源动态切换
查看>>
为什么量子计算会对我们产生威胁?
查看>>
计算与推断思维 十三、预测
查看>>
《战斗吧!机器人》,国内首档AI与机器人竞技真人秀发布会隆重召开
查看>>
Zabbix监控之系统及应用日志监控报警
查看>>
Ubuntu安装CPAN上的扩展包for Perl
查看>>
shell数组使用技巧
查看>>
extjs.form.textarea一个问题记录
查看>>
zabbix 之 配置item
查看>>
python字符编码
查看>>
windows下三种常见的文件系统
查看>>
KSM导致的警告“ ksmtuned .... read-only system ” 的一些说明
查看>>
mysql的binlog
查看>>
Vue packages version mismatch: 版本始终不对的解决方案
查看>>