Linux设备模型基础

1.前言

字符设备驱动是最简单的驱动,实现对设备文件的打开,读写操作,但对于一些更加复杂的功能使用字符设备驱动框架来写可能完成不了这个功能,比如电源管理,热插拔事件,在Linux内核中I2C驱动,SPI驱动,PCIE驱动都使用设备模型来完成驱动的编写。如果说字符设备驱动编写相当于在大山深处造房子,水电等基础设施要自己建造,那么使用设备模型编写驱动则相当于在城区建新房,水电直接使用就可以。在Linux内核中,设备模型的基本元素由kobject,kset,ktype组成,每一个kobject都对应sysfs文件夹下的一个目录,作为一个结构体基类嵌入到其他结构体中,如cdev,class,device,driver等结构体中,kset也是sysfs文件夹下的一个目录,用来批量管理kobject,kobj_type则是为kobject对象构建多个属性文件,并为每一个属性文件提供操作接口。

2.驱动模型

2.1 驱动模型一

这是Linux内核中最常用的设备模型,其中kobject关联sysfs下的一个目录,kset对象继承kobject,所以kset也关联sysfs下的一个目录,kset中有一个kobject链表头,会将各个kobject通过链表的方式串联起来,链表中的kobject对象可以通过其中的kset指针找到其所属的上一级kset对象,也可以通过其parent指针找到所属的上一级kobject对象,从而找到所属的上一级kset对象。kset也可以管理下一级的kset对象,下一级的kset对象通过设置其kset指针来找到上一级的kset对象,如下图所示
在这里插入图片描述

2.2 驱动模型2

一个kobject对象管理多个kobject对象,其中通过设置kobject对象的*parent指针来找到上一级的kobject对象,存在的问题是上一级的kobject对象无法通过遍历找到下一级的kobject

image.png

在Linux内核中一般使用第一种设备模型进行驱动的编写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值