[笔记分享] [OS] Linux设备模型之基础概念

Platform: msm8x60
Kernel: 2.6

要想理解设备模型,首先需要知道它由哪些基本数据构成。包含有kobject、kset、device、device_driver、 bus、class、subsystem。下面分别介绍。

kobject

这里写图片描述
主要函数:
void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
int kobject_add(struct kobject *kobj, struct kobject *parent,
const char *fmt, …)
void kobject_put(struct kobject *kobj)
struct kobject *kobject_get(struct kobject *kobj)

它是设备模型中的基本结构,通常被嵌入到其他的结构中。每种kobject都关联到ktype,由kobj_type表示,如下:
这里写图片描述
Ktype是为了描述kobject所具有的普遍特性。因此不需要每次kobject都分别定义,而是将这些特性在ktype中一次定义。


kset

这里写图片描述
主要函数:
void kset_init(struct kset *k)
static struct kset *kset_create(const char *name,
const struct kset_uevent_ops *uevent_ops,
struct kobject *parent_kobj)
int kset_register(struct kset *k)
static inline struct kset *kset_get(struct kset *k)
static inline void kset_put(struct kset *k)

一个kset是相同类型的kobject的一个集合。类型是kobj_type类型来描述的。Kset一定会在sysfs里显示出来,而kobject不一定。可认为kset是kobject的容器,在kset内部,包含了自己的kobject。上面一些对kset的处理函数其实都是调用kobject的相关函数来实现的。Kset也可以包含在另一个kset里,和kobject一样。下图是kset和kobject的关系。
这里写图片描述


subsystem

struct subsystem{
struct kset kset;
struct rw_semaphore rwsem;
};

Subsystem是一个或者多个kset的集,它只指向一个kset,或许有人有疑惑那如何找kset,但是多个ksets可以通过其subsys指针指向一个subsystem。
所有的kset都必须属于subsystem,因为他们使用该读写信号量去访问同步访问他们的内部数据。


device

这里写图片描述
设备模型中最重要的结构。对于基于总线的设备,会在device基础上衍生出很多类,如platform_device。
这里写图片描述
注册过后的设备在/sys/devices下可以看到。下面是与设备属性相关的内容。
这里写图片描述


device_driver

这里写图片描述
相关函数:
int driver_register(struct device_driver *drv)
int __must_check driver_attach(struct device_driver *drv);

它也是个比较重要的结构体。一般是嵌入到其他结构体来进行注册的。如我们所使用的platform_driver,如下:
这里写图片描述
注册的时候通过bus来和devices进行匹配。一个driver可以对应多个devices。


bus

这里写图片描述
相关函数:
int bus_register(struct bus_type *bus)
设备模型里,所有的devices都通过bus相连,模型里还有虚拟的bus。如platform总线。总线之间可以互相插入。每个总线都有自己的子系统,另外包括两个kset,分别是devcie和drvier,所以会在/sys/bus/platform下看到device和driver目录。而klist_devices和klist_drivers是总线支持的设备及驱动链表,用于遍历总线上的驱动和设备。


class

这里写图片描述
相关函数:
int __init classes_init(void)
类是一个设备的高层视图,它抽象出了底层的实现细节。比如驱动程序看到的是SCSI磁盘和ATA磁盘,但是在类的层次上,它们都是磁盘而已。类允许用户空间使用设备所能提供的功能,而不关心设备是如何连接的,以及它们是如何工作的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值