Linux驱动开发

对Linux驱动开发的理解:(以字符设备驱动为例)

Linux驱动发展:

字符设备框架>>>新字符设备框架>>>引入《总线、驱动、设备》框架>>>引入设备树。

发展的原因:

使Linux系统变得简洁,变得通用。

解决不简洁,Linux系统“虚胖”:

最开始的时候是字符设备驱动框架,后进价到新字符驱动框架,这两种方式做Linux驱动开发的时候,就会有一个问题就是太多文件混在一起,不方便移植和扩展,具体指外设驱动文件和具体设备文件写在一起,改设备时,要整个文件编译,浪费资源,单单编译入内核的空间占用就很没必要,并且,外设驱动文件是唯一的,一经封装好无需改动;

解决不通用:

基于  》》》  各个厂家都有自己的编程习惯,不利移植,没有统一。本质:一套统一的规则

《总线、驱动、设备》框架的引入,使得底层配置工作简化统一,哪个平台都可以使用封装好的驱动API。

《设备树》的引入,使得大家都遵循一种规则去描述设备,按节点,按键值对,按reg=,这样的统一格式,这样一来使得Linux有统一接口。

故,Linux系统想出一种方法,也即一个框架思路:总线、驱动、设备框架;解释:

总线:

Linux对一些外设比如iic、spi等都抽象为一条总线,另外,对应那些gpio口用平台总线抽象--platform;也称适配器,这个总线的出现使得Linux驱动开发得到非常大的优化,为什么这么说呢?原因

第一,适配器在出厂前就由原厂工程师编写好,并注册进内核,因为比如iic,适配器的工作之一就是完成iic底层时序,比如iic_start,这些东西对任何iic设备都是一样的。

第二,适配器完成了对具体设备在设备树的节点的读取,这些体现在底层的代码中,这些都是原厂工程师写好的。

第三,适配器实现了设备和驱动的匹配工作。

第四,适配器还封装好一些API函数,比如,读取iic设备寄存器,方便开发者。综上,可以体会到为什么说Linux驱动开发比裸机开发“简单”。

故,适配器完成的工作有:1.完成外设的底层时序、2.读取设备节点信息存到结构体i2c_client中,在此过程,适配器也是一个驱动,也有.probe函数,也是通过注册入内核,当设备树有iic大节点时,执行.probe函数,在.probe中实现设备树设备具体信息获取和匹配设备和驱动的、3.对外开发统一的iic操作API。

设备:

在有设备树时,我们并不用写设备文件,适配器读取设备在设备树的信息后,存放到i2c_client 结构体中。

驱动:

我们只需关注,怎么对具体设备的数据读取,当然,对i2c_client 结构体成员的访问便是我们实现驱动的关键,因为该结构体描述了设备的地址等。

故,我们驱动开发的思路:

修改设备树设备节点信息>>>编译入内核>>>编写驱动文件,实现对具体设备的iic读写操作>>>编写测试程序。

开发过程应该思考:原厂帮我们注册好适配器,适配器写好了外设底层时序实现和匹配设备与驱动,所以我们只需遵循Linux驱动开发那套框架来就好,所以,我们听的最多的“Linux那套驱动框架”就是这么来的。

2024.4.10

Linux内核有的:适配器相关的,就是那些重复的东西,东西都一样的。上电和设备树匹配后会以结构体或者ops的形式开发开放给使用者。

ops就是操作函数,对外接口api,read,write那套。

以iic为例:

结构体iic_client,有设备地址;ops:读写寄存器函数等;

这些都是Linux帮你做好的。(对应厂家写好)

驱动开发者要做的:字符设备那套注册到内核,然后编辑app,运用适配器得到的结构体或者ops实现驱动逻辑。

所以模型中的设备指字符设备、块设备等,驱动指驱动开发者要做的,总线则是Linux内核有的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值