加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux驱动设计(一):驱动是什么?

发布时间:2022-10-22 13:33:10 所属栏目:Linux 来源:转载
导读: 最近需要写个驱动,也看了LDD,也看了其他的blog。其实对于那些简单的一个字符设备的设计流程慢慢lvlv,大概知道这个流程是怎么跑的。但是还是不够流畅,对于驱动与内核的认识还是存在一些

最近需要写个驱动,也看了LDD,也看了其他的blog。其实对于那些简单的一个字符设备的设计流程慢慢lvlv,大概知道这个流程是怎么跑的。但是还是不够流畅,对于驱动与内核的认识还是存在一些混淆。这里来做个记录。

参考的资料是《Linux设备驱动开发详解》

1、驱动是什么?

其实我开始的时候把驱动总和内核搞混。多余我就不啰嗦了,书里面有,微信读书可以阅读,我也买了本实物书。

在这里插入图片描述

(当然我们平时在实现的时候,应用层和设备驱动搞到一起了。)

有了上面三点,就可以说说为什么需要驱动?为什么要把驱动加到操作系统?

前一个问题不回答

第二个,这个首先是因为操作系统的优点:多任务、内存管理。而操作系统对于驱动方面提供的好处,就是可以通过操作系统定义的接口实现时,就算是设备变了,应用也不需要变。就像是你换了个显卡,但是显卡都是按照操作系统提供的标准进行定义的接口,所以就算是显卡换了,但是你上层原来安装的应用还是能用。(典型的依赖倒置设计模式)

这里有没有想起,我们有时候换了设备,或者热插拔设备,都会提示你驱动安装中,这个过程可能就是设备的驱动注册到操作系统,然后你就可以继续使用你的应用。没有说换个设备,也让你安装个对应的应用吧。其实就是增加复用性与解耦。用稳定的操作系统,在操作系统的两头是可能会变化的东西,但是变化不会影响两端的使用。

(脑子里想想一个管道)

2、linux内核与linux操作系统的关系?

内核是操作系统的核心。内核是操作系统执行的第一道程序,被率先加载到内存中开始系统行为。内核始终保持在主内存中直到系统被关闭。内核将用户输入的命令转换成计算机硬件能理解的机器语言。

**内核是系统应用软件和硬件的桥梁。内核直接与硬件联系,并告之它由应用软件发起的请求。**操作系统不能脱离内核工作,内核是系统正常运行最重要的程序。

内核的主要职责是:进程管理、磁盘管理、任务调度、内存管理等

操作系统(operating system)是用来管理计算机系统资源的软件,内核是用户和系统硬件的桥梁。操作系统提供的接口允许用户直接看到其输入命令的响应结果,例如Window的命令行cmd和Linux的Shell终端。没有操作系统,系统就不可能运行,部分嵌入式系统看似没有操作系统linux 驱动,但仍然对硬件作了一层简单封装,也可理解为Tiny OS。操作系统的主要职责是创建应用软件可以运行的环境。

在这里插入图片描述

在这里插入图片描述

总的说来,一个操作系统包含了内核(是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件)以及其他计算机系统所必须的组件(如函数库、编译器、调式工具、文本编辑器、网站服务器,以及一个Unix的使用者接口(Unix shell)等,这些都是操作系统的一部分,而且每一个模块如编译器都是一个单独的进程,运行在操作系统中)。

3、驱动处在整个系统的那个地方呢?

在这里插入图片描述

驱动分为块、字符、网络设备三种,字符是串行顺序访问:鼠标等,块是任意顺序访问:硬盘、eMMC等。网络设备见名知意,使用套接字。

到这里你应该就知道了驱动是个什么,以及处在整个系统的位置。

4、驱动工程师应该学到什么?

●编写Linux设备驱动要求工程师有非常好的硬件基础,懂得SRAM、Flash、SDRAM、磁盘的读写方式,UART、IC、USB等设备的接口以及轮询、中断、DMA的原理,PCI总线的工作方式以及CPU的内存管理单元(MMU)等。

●编写Linux设备驱动要求工程师有非常好的C语言基础,能灵活地运用C语言的结构体、指针、函数指针及内存动态申请和释放等。

●编写Linux设备驱动要求工程师有一定的Linux内核基础,虽然并不要求工程师对内核各个部分有深入的研究,但至少要明白驱动与内核的接口。尤其是对于块设备、网络设备、Flash 设备、串口设备等复杂设备,内核定义的驱动体系结构本身就非常复杂。

●编写Linux设备驱动要求工程师有非常好的多任务并发控制和同步的基础,因为在驱动中会大量使用自旋锁、互斥、信号量、等待队列等并发与同步机制。

想啰嗦一下的是第三点,有linux内核的基础,这是因为linux内核是我们前面知道是包括了进程管理、磁盘管理、任务调度、内存管理等。而我们的设备映射的都是文件,设备的操作各种都是涉及到这几方面,所以要对内核的这些进行学习。

linux的内核中有很多个驱动子系统。(驱动子系统实现对驱动设备进行管理比如eMMC),因此下一章,先来看看驱动的软件架构是什么?

参考资料:

《Linux设备驱动开发详解》

操作系统和内核有什么区别?

操作系统与操作系统内核

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!