Linux设备驱动模型1——简介和底层架构
2017-07-21 09:33
232 查看
以下内容源于朱有鹏《物联网大讲堂》课程的学习整理,如有侵权,请告知删除。
分别对应四个结构体,用来表述这四个概念。
(2)kobject(结构体)和对象生命周期
高度抽象的结构体,表示内核的一个总的父类。
(3)sysfs
(4)udev
2.6版本中正式引入设备驱动模型,目的是在设备越来越多,功耗要求等新特性要求的情况下让驱动体系更易用、更优秀。
设备驱动模型负责统一实现和维护一些特性,诸如:电源管理、热插拔、对象生命周期、用户空间和驱动空间的交互等基础设施。
设备驱动模型目的:简化驱动程序编写,但是客观上设备驱动模型本身设计和实现很复杂。
驱动什么时候被安装、驱动中的函数什么时候被调用,怎样被调用(比如probe()函数还是直接调用?)。之前是写应用程序来安装,现在希望自动安装、卸载(热插拔),这些跟硬件无关,完全和设备驱动模型有关。
(1)定义在linux/kobject.h中,是最基本的结构体,被其他结构体作为元素。
(2)各种对象最基本单元,提供一些公用型服务如
对象引用计数(引用计数为0时,可以释放,生命周期结束);
维护对象链表(因此可以遍历);
对象上锁(占用对象资源,不被其他占用);
对用户空间的表示;
(3)设备驱动模型中的各种对象其内部都会包含一个kobject(作为元素)。
因此各对象可以使用kobject所提供的功能。
地位相当于面向对象体系架构中的总基类。
(1)很多书中简称为ktype,每一个kobject都需要绑定(即用一个指针指向,而不是作为子元素)一个ktype来提供相应的功能;
(2)关键点1:sysfs_ops,提供该对象在sysfs中的操作方法(show和store);
(3)关键点2:attribute,提供在sysfs中以文件形式存在的属性,其实就是应用接口;
(4)release函数,查看引用计数,去释放对象所占用的内存。
(5)总结:提供属性文件,提供/sys/……操作方法。
(1)kset的主要作用是做顶层kobject的容器类。
(2)kset的主要目的是将各个kobject(代表着各个对象)组织出目录层次架构。
(3)可以认为kset就是为了在sysfs中弄出目录,从而让(设备驱动模型中的)多个对象能够有层次有逻辑性的组织在一起。
总而言之,以上三个内容是/sys/下所有的内容的实现机制。包括目录的组织,操作方法,数据结构等。
一、linux设备驱动模型简介
1、什么是设备驱动模型?
(1)类class、总线bus、设备device、驱动driver;分别对应四个结构体,用来表述这四个概念。
(2)kobject(结构体)和对象生命周期
高度抽象的结构体,表示内核的一个总的父类。
(3)sysfs
(4)udev
2、为什么需要设备驱动模型?
早期内核(2.4之前)没有统一的设备驱动模型,但照样可以用(那时候设备比较少);2.6版本中正式引入设备驱动模型,目的是在设备越来越多,功耗要求等新特性要求的情况下让驱动体系更易用、更优秀。
设备驱动模型负责统一实现和维护一些特性,诸如:电源管理、热插拔、对象生命周期、用户空间和驱动空间的交互等基础设施。
设备驱动模型目的:简化驱动程序编写,但是客观上设备驱动模型本身设计和实现很复杂。
3、驱动开发的2个点
驱动源码本身编写、调试,重点在于对硬件的了解。驱动什么时候被安装、驱动中的函数什么时候被调用,怎样被调用(比如probe()函数还是直接调用?)。之前是写应用程序来安装,现在希望自动安装、卸载(热插拔),这些跟硬件无关,完全和设备驱动模型有关。
二、设备驱动模型的底层架构
三个结构体1、kobject
(1)定义在linux/kobject.h中,是最基本的结构体,被其他结构体作为元素。
(2)各种对象最基本单元,提供一些公用型服务如
对象引用计数(引用计数为0时,可以释放,生命周期结束);
维护对象链表(因此可以遍历);
对象上锁(占用对象资源,不被其他占用);
对用户空间的表示;
(3)设备驱动模型中的各种对象其内部都会包含一个kobject(作为元素)。
因此各对象可以使用kobject所提供的功能。
地位相当于面向对象体系架构中的总基类。
2、kobj_type
(1)很多书中简称为ktype,每一个kobject都需要绑定(即用一个指针指向,而不是作为子元素)一个ktype来提供相应的功能;
(2)关键点1:sysfs_ops,提供该对象在sysfs中的操作方法(show和store);
(3)关键点2:attribute,提供在sysfs中以文件形式存在的属性,其实就是应用接口;
(4)release函数,查看引用计数,去释放对象所占用的内存。
(5)总结:提供属性文件,提供/sys/……操作方法。
3、kset
(1)kset的主要作用是做顶层kobject的容器类。
(2)kset的主要目的是将各个kobject(代表着各个对象)组织出目录层次架构。
(3)可以认为kset就是为了在sysfs中弄出目录,从而让(设备驱动模型中的)多个对象能够有层次有逻辑性的组织在一起。
总而言之,以上三个内容是/sys/下所有的内容的实现机制。包括目录的组织,操作方法,数据结构等。
相关文章推荐
- linux设备驱动模型架构分析(二)——LDDM的底层实现kobject
- Linux设备驱动程序学习(12) -Linux设备模型(底层原理简介)
- Linux设备驱动总线模型简介
- 模型驱动式架构(MDA)技术简介
- Linux设备驱动模型之底层数据结构
- Linux设备驱动模型之底层数据结构
- linux设备驱动模型架构分析(一)——概述
- Linux设备模型(底层原理简介)
- 软件体系架构:RM-ODP参考模型简介
- VS.NET(C#)-5.19_IIS6架构模型:应用程序池(Application Pools)简介
- Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介)
- Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介) - Linux设备驱动程序 - Tekkaman Ninja
- Linux设备驱动工程师之路——设备模型(上)底层模型
- VS.NET(C#)-5.16_IIS6架构模型:HTTP.SYS简介
- linux设备驱动模型大剖析(1)-----底层阶级的程序猿
- Linux设备驱动模型之底层数据结构
- Linux设备驱动程序学习(12) -Linux设备模型(底层原理简介)
- 基于mdev(udev)的驱动架构与linux设备驱动模型之class
- Linux设备驱动工程师之路——设备模型(上)底层模型
- 基于mdev(udev)的驱动架构与linux设备驱动模型之class