【驱动程序学习笔记 01】基本概念
参考:《Linux Kernel Programming》
本人是个no good at English的Linux菜狗,有错误请指正
文章目录
一些概念
- 设备驱动程序: 设备驱动程序在操作系统和外部硬件设备之间充当接口。它通常作为内核模块编写。驱动程序的代码在内核空间以操作系统权限运行。
- 设备文件: 在Linux下,一切皆文件。设备文件是用于访问设备驱动程序的特殊文件,位于/dev目录下。
一、设备
为了让内核区分设备文件,在设备文件中的inode中有两个属性:
- 设备的类型
- 主/次设备号
1.设备类型
- 字符设备(Character Device): 字符设备以字符为单位进行数据传输。有很多设备都属于字符设备
(如串口、传感器芯片(温度、压力、湿度等)、触摸屏、实时时钟(RTC)、媒体(视频、相机、音频)、键盘、鼠标等)。 - 块设备(Block Device): 块设备以块为单位进行数据传输,例如机械硬盘和固态硬盘SSD等。块设备和字符设备之间的关键区别在于,块设备具有可挂载的(内核级)功能,从而成为用户可访问的文件系统的一部分。字符设备无法挂载;因此,存储设备往往是基于块的。
- 网络设备(Network Device): 网络设备用于在计算机网络中进行数据通信,例如网卡等。
按照是否真实存在也可以分为物理设备和虚拟设备
2.主/次设备号
内核通过[主设备号: 次设备号]来找到设备。
设备号是一个32bit的数字,高12位表示主设备号,低20位表示次设备号。
主设备号表示这个设备的类,如我们接下来写的misc类的驱动程序的主设备号是10。
二、简单了解LDM(Linux device model)
1.什么是LDM:
简单来说,LDM是Linux内核中的一个机制,用一个层次树来统一管理和表示系统中的设备。它通过sysfs伪文件系统将这个层级树暴露给用户空间,在/sys目录下,能找到多个子目录。通过sysfs,用户空间可以查看和修改设备的各种属性,与设备驱动程序进行通信以及监控和管理系统中的设备。
LDM将如下组件绑在一起:
- 系统上的总线
- 总线上的设备
- 设备的驱动程序
LDM的基本原则: 每个设备都必须驻留在总线上
2.接入新设备
当你插入了一个新设备,首先,总线驱动程序将会识别到它,并将它绑定到它的设备驱动程序; 绑定后,内核驱动程序框架将会调用已注册的驱动程序。
3.基于LDM的驱动程序
基于LDM的驱动程序通常执行如下操作:
- 根据设备类型将自己注册到内核框架
- 将自己注册到总线上