Linux设备模型分析之基本数据结构
Linux随着硬件设备的发展及内核版本的演进,设备模型也变得越来月复杂,早先看了《Linux设备驱动程序》觉得一头雾水,又看了许多资料和高手的帖子,总算有了一定认识,下面写出来和Linux内核爱好者分享一下。
本文相配套的《Linux设备驱动程序》下载在http://www.linuxidc.net/thread-2029-1-1.html 共3卷,17M。
一、底层数据结构:kobject 和 kset
1、kobject内核对象:Linux2.6设备模型的最底层核心结构,该数据结构使所有设备在底层都具有统一的接口,每一个在内核中注册的kobject对象都对应于sysfs文件系统中的一个目录。Kobject在内核中对应有一套申请,初始化,添加,注册,计数操作,释放等函数。
2、 kset内核对象集合:具有相同类型的kobject的集合。
3、 subsystem内核对象子系统:一系列kset的集合,描述了某一类子系统,如block_subsys表示所有的块设备,对应于susfs文件系统中的block目录。device_subsys对应于sysfs中的devices目录,描述系统中的所有的设备,说直白了其实也是kset,kset的类型由内嵌的ktype结构描述。
由此可以看出,kobject类似于面向对象程序设计中的基类,经过层层继承封装来实现上层的设备驱动模型。
- struct kobject {
- const char * k_name; 名
- char name[KOBJ_NAME_LEN];
- struct kref kref; 计数
- struct list_head entry; 用于连接到同类kobjects的链表
- struct kobject * parent; 用于实现层次,指向其父对象。
- struct kset * kset; 用于实现层次,所属的集合
- struct kobj_type * ktype; 指向对象的类型。
- struct dentry * dentry; 指示在sysfs 中的目录项
- wait_queue_head_t poll;
- };
- struct kset {
- struct subsystem * subsys; 在最新内核中已经没有subsys概念了。统一用ksets
- struct kobj_type * ktype; 类型。
- struct list_head list; 同一kset的链表
- spinlock_t list_lock;
- struct kobject kobj; 自身的kobjects
- struct kset_uevent_ops * uevent_ops;
- };
相关推荐
farwang 2020-11-25
星愿心愿 2020-11-24
tianhuak 2020-11-24
zhjn0 2020-11-24
昭君出塞 2020-11-23
bluecarrot 2020-11-23
linuxwcj 2020-10-21
以梦为马不负韶华 2020-10-20
彼岸随笔 2020-10-20
yutou0 2020-10-17
applecarelte 2020-10-16
ourtimes 2020-10-16
waterhorse 2020-09-19
MRFENGG 2020-11-11
rainandtear 2020-10-30
kyssfanhui 2020-10-20
liuhangtiant 2020-10-20