一起分析Linux系统设计思想——05字符设备驱动框架剖析(一)

在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习。我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直达问题本质,把大家从大海捞针的痛苦中解脱出来。

0 基础知识

在开始进入Linux内核驱动开发之前,我们先放松一下,罗列一些后续要用到的基础知识。一方面可以做一个零基础引导;另外一方面为了方便大家查阅,后续用到后不用到处去搜索了(这样很容易打算思路)。

0.1 什么是ko文件

因为我们马上要使用ko(Linux Kernel mOdule)文件,所以必须要提前说清楚什么是ko文件。说到ko文件必须要介绍内核的种类。当前内核通常被分为两类:单内核和微内核。

0.1.1 单内核

Linux内核就属于单内核结构。它是个单独的二进制大映象,模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。优点是运行效率高,缺点是某个模块出现问题便会牵累整个内核,所以对开发人员的要求很高。

0.1.2 微内核

Mac OS X、Minix、Windows内核属于微内核结构。微核的目标是将系统服务的实现和系统的基本操作规则分离出来,放到用户态运行。由于内核只剩下进程管理、进程间通信、内存管理等基本功能,所以,微内核的设计更加简单。但是微内核的运行效率较单内核要低。


Linux为了弥补单内核太过庞大的缺点,采用了运行时加载模块(module)的方式,一个module就是一个ko文件。

0.2 驱动程序的分类

驱动程序的分类如下表所示:

驱动类型说明应用层操作接口举例
字符型设备驱动按照 字节流 读写虚拟文件鼠标、键盘、串口等
块设备驱动 为单位进行读写虚拟文件Nor/Nand Flash、EMMC卡、硬盘等
网络设备驱动数据包 为单位进行读写Socket以太、Wifi、蓝牙等

0.3 什么是驱动框架

什么是 框架 ?我们去快递代收点取快递时,会遇到有两种代收点:一种是快递都堆在地上,老板到处翻着给你找的;还有一种是老板会设计好一个货架,各种快递按照种类、日期、收件人地址等信息整整齐齐摆放到货架上的。第一种就是没有框架,第二种就是有框架——货架+各种规则。

有框架的好处不言而喻。最核心的一点是——没有框架是做不大的。

0.4 热插拔

热插拔的实现并不能用一小节的内容一下子说明白,这里先引出来,后续会逐渐深入。

0.4.1 sysfs

从Linux2.6内核开始使用全新的设备模型——使用sysfs虚拟文件系统来管理系统中的设备。sysfs是与proc同类别的文件系统,它将系统中的设备组织成层次结构,并向用户态进程提供详细的内核数据结构信息。

0.4.2 Kobject

从Linux2.6内核开始通过 Kobject 这个数据结构令所有的设备在底层都具有统一的接口。Kobject提供基本的对象管理,每个在内核中注册的Kobject对象都会生成一个对应的目录在sysfs文件系统中。Kobject通常通过 Kset (具有同一类型的Kobject)将设备组织成层次化的结构。

0.4.3 udev/mdev机制

mdev是udev的简化版本,其实就是一个程序。我们在制作根文件系统时其实已经接触过了,可以温习一下。

链接:https://blog.csdn.net/weixin_44873133/article/details/109409831

它和sysfs、Kobject是如何配合实现热插拔的呢?

大体的流程是这样的:Kobject负责做“卧底”,它会安插在向内核注册的设备驱动中来“监视”它们,然后向“老大”sysfs汇报情况并记录在案。mdev/udev从“老大”这里得到确切的消息后实施“抓捕”——将设备节点“抓到”/dev这里“关起来”。


恭喜你又坚持看完了一篇博客,又进步了一点点!如果感觉还不错就点个赞再走吧,你的点赞和关注将是我持续输出的哒哒哒动力~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿越临界点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值