LINUX设备模型简述



LINUX设备模型的几大基础结构

Kobjectskobject, Ksetskset Ktypektype  Subsystemssubsystem 

 

Inode--<---cdev---<--------[kset]--------kobjects[驱动设备结构链关系 也可以认为是包含关系]

Kobjects是创建SYS/下面文件的用的结构体,其它两个体是配合他完成任务的。可以看成是他的它的实现及JAVA中的子类来理解。LINUX中很多与系统有关的结构体都有kobjects是他的成员。

 

通常,内核用kobject结构将各个对像连接起来组成一个分层的结构体系,从而与模型化的子系统相匹配。有两种独立的机制用于连接:parent指针和kset.

Kset的主要功能是包容:可以认为它是kobject的顶层容器类。实际上,在每个kset内部,包含了自己的kobject,并且可以用多种处理KOBJECT的方法处理KSET.需要注意的是,KSET总是在SYSYFS中出现,一旦设置了KSET并把它添加到系统中,将在SYSFS中创建一个目录,KOBJECT不必在SYSFS中表示,但KSET中的每个KOBJET成员都将在SYSYFS中得到表述。

在文件系统中创建的目录层次关关系是由如下函数代码确定的

if (kobj->parent)

parent_sd = kobj->parent->sd;

else

parent_sd = &sysfs_root;

首先根据父目录来确定位置,如果没有父目录,则由sysyfs_root确定做为主结点创建的。

struct sysfs_dirent sysfs_root目录项

 

综上:在2.6内核之前通过函数cdev_initcdev_add添加字符设备,另外还需要手动创建设备节点;在2.6之后的内核,通过cdev_initcdev_add添加字符设备,通过class_createdevice_create函数往sys文件系统中添加设备,udev检测到/sys目录的变动会根据变化在/dev目录下创建对应的设备节点。

static struct kobj_map *cdev_map; 中保存了驱动程序对应的fops操作函数

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值