站在设备驱动这个角度分析,设备驱动模型是如何构建出来,起到什么作用,认识它并在写驱动的时候去利用设备驱动模型
目录
一.linux 设备驱动模型简介
1.1、 什么是设备驱动模型
四个词并非四个简单概念,还是linux驱动的四个结构体,也可以理解为linux设备驱动模型的四个框架。
分别对应我们源代码的四个结构体。
class :例如class_create
bus :例如USB总线,SPI总线
device:设备
driver:驱动
为何需要这四个结构体-----生产这些结构体类型的变量,每一个结构体变量就代表一个实例
kobject 是一种数据结构, 定义在 kernel\include\linux\kobject.h 中, 详细分析见后面。
linux内核源代码里面的一个结构体,k是kernel object物体,kobject就是内核的一个东西。一个高度抽象的结构体,表示内核里面的一个对象,就是内核里面的所有对象抽象出来的一个总类。所以说linux内核是面向对象编程。这个kobject就类似于面向对象体系的一个总的基类,总的父类
对象生命周期,例如某一个驱动,insmod诞生,rmmod消亡。如何管理这个对象的生命周期?在kobject有一种机制,能够让每一个对象具有自我管理生命周期的特性,即自己管理自己,当自身不被需要的时候就自己释放。比如为A malloc 申请一段内存,当不需要的时候不用去free A,它自己会自己free掉。如何知道自己没用了呢?肯定需要一种方法 |
block:块设备
bus:系统中的总线
class: 设备类型,比如输入设备
dev:系统中已注册的设备节点的视图,有两个子目录char和block。
devices:系统中所有设备拓扑结构视图
fireware:固件
fs:文件系统
kernel:内核配置选项和状态信息
module:模块
power:系统的电源管理数据
在 sysfs 中出现的每个对象都对应一个 kobject。
Linux 用户空间设备管理(Linux userspace device management), 在kernel 2.6.13后被使用, 动态提供了在系统中实际存在的设备节点。udev 是一个为你的计算机提供设备事件的 Linux 子系统。 通俗来讲就是, 为了实现内核空间和用户空间的信息的一个同步
1.2、 为什么需要设备驱动模型
( 1) 早期内核( 2.4 之前) 没有统一的设备驱动模型, 但照样可以用。
( 2) 2.6 版本中正式引入设备驱动模型, 目的是在设备越来越多, 功耗要求等新特性要求的情况下让驱动体系更易用、 更优秀。