驱动开发的分离与分层

1.概念

1.1.分层

分层就是将一个复杂的工作分成了多层, 分而做之,降低难度。在驱动里面,每一层只专注于自己的事情, 系统已经将其中的核心层和事件处理层写好了,我们只需要来写硬件相关的驱动层代码即可。可能驱动里面大家都不是很熟悉,比如说网络吧,网络里面分了很多层,7层模型或者4层模型等等,这些分层都有自己的任务,提供接口给每一个层使用,完成某一些工作;例如IP层,会将IP报文解析,解析完了的数据会给到网络层的协议栈,TCP/UDP等等。这样的好处就是,层与层之间相对独立,每一层的变动或者优化,对其他层影响都不大。

1.2.分离 

分离是指把硬件相关的部分(驱动层)从纯软件部分(事件处理层)抽离出来,使我们只需要关注硬件相关部分代码的编写。具体来说就是在驱动层中使用platform机制(将所有设备挂接到一个虚拟的总线上,方便sysfs节点和设备电源的管理,使得驱动代码,具有更好的扩展性和跨平台性,就不会因为新的平台而再次编写驱动)把硬件相关的代码(固定的,如板子的网卡、中断地址)和驱动(会根据程序作变动,如点哪一个灯)分离开来,即要编写两个文件:dev.c和drv.c(platform设备和platform驱动)

 反向思考:如果不分离会怎么样?

举个例子,在字符设备LED实验中,发现硬件的地址写在驱动里面,导致这个驱动有点是该硬件专属了,造成驱动每个LED,都需要开发一个模块,将会有很多重复性的代码出现,是不是就冗余了呢?
是否可以考虑像单片机HAL库的做法,将模块成两部分:
一部分就是类似去HAL库的部分,我们称之为driver部分
一部分就如同我们调用的部分,我们称之为device部分

 driver部分就是执行函数,device部分就是传入参数;driver部分根据device部分的参数,对不同的硬件资源进行控制。这样每来一个设备,是不是不需要改driver了,只需要开发device就可以了。是不是连觉得开发device都觉得麻烦,没问题,设备数给你解决这个问题了,通过设备树自动给你创建设备,代码都不需要你写,只需要你按照设备树规则去填写硬件参数即可。

2.为什么分层或者分离

2.1.分层的理由

  1. 模块化和解耦:分层可以将复杂的系统划分为若干个独立的层次或模块,每个层次负责一组明确的任务或功能。

  2. 职责清晰:通过分层,可以清晰地定义每一层的职责。

  3. 可测试性:分层架构使得单元测试更加简单直接。每一层都可以独立进行测试,无需依赖整个系统。此外,由于层间耦合度低,可以更容易地模拟或替换依赖,进行隔离测试。

  4. 可扩展性和灵活性:随着需求变化,分层架构允许更容易地在现有层次中添加新功能或修改现有功能,而不必改动整个系统。比如,增加一个新的业务逻辑或更换数据库技术,只需调整相应层次,对其他层的影响较小。

  5. 复用性:良好的分层设计可以促进代码的复用。通用的功能可以封装在特定的层中,供多个模块或项目使用,减少了重复编码,提高了开发效率。

  6. 技术选型自由度:分层架构让开发者在不同层次上可以根据需求选择最合适的技术栈。比如,前端展示层可以使用React或Vue,后端服务层可以是Java Spring Boot或Node.js等,数据库层可以是MySQL、MongoDB等,各层的选择更加灵活。

2.2.分离的理由

  1. 提高代码可维护性:当代码按照功能、职责或技术领域分离后,每个部分都聚焦于单一职责。这样,当需求变更或修复bug时,开发者可以快速定位到相关代码段,而不必理解整个系统的复杂性,从而简化维护工作。

  2. 增强代码可读性:分离使得代码结构清晰,逻辑更加条理化。每个模块或层只包含与自身职责相关的代码,减少了不必要的交叉和冗余,使得其他开发者或未来的自己更容易理解代码意图

 说白了,分层就是将一个大工作,划分为多个小工作,让不同人去完成,层与层之间通过有限接口进行交互,降低了耦合度,符合高内聚,低耦合的概念。而分离,个人认为是更加细化的"分层",将某个模块内部进行拆分,减少每一个小模块或者组件之间的依赖,降低小模块之间的耦合度,小模块的划分何尝不是一个小分层呢?进行归类管理呢?

分离是目标,分层是达到这一目标的策略之一。

分离分层概念明白了,ok, 终于到我们心心念念的platform总线开发与设备树出场了,后面文章将介绍platform总线开发与设备树,以及基于它们的实验。

参考:

驱动的分层分离概念(platform)及实例讲解(点亮led)-CSDN博客 

Linux驱动开发(二)---驱动与设备的分离设计_linux driver device 分离-CSDN博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值