微软交流社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 137|回复: 0

Linux字符设备驱动模型之框架解说

[复制链接]

1

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2023-4-20 09:13:44 | 显示全部楼层 |阅读模式
一、软件操作硬件设备模型
在进行嵌入式开发的过程中,在常做的事情就是驱动配置硬件设备,然后根据功能需求使用硬件设备,实现功能的逻辑。如下图为其相互之间的关系。



如上图所示:
驱动程序:主要作为操作和配置硬件设备,使得硬件设备能够正常进行工作。例如,在写点灯程序时,前提条件是从原理图了解到LED等与CPU/MCU之间的硬件连接(使用了哪一个GPIO口),驱动程序的作用就是初始化配置GPIO口,使得GPIO口能够进行工作,比如现在配置为推完输出模式。GPIO能够正常工作之后,那么就需要进行基本的操作了,即灯亮和等灭。这就是驱动程序。
应用程序:当驱动程序能够时间基本的灯亮和灯灭,那么是需要实现跑马灯,还是各种花样的灯的显示,这就由应用程序来决定了。
硬件设备能够接受CPU/MCU通过驱动程序进行的操作,或者是能够为CPU/MCU提供有效的数据。
二、Linux系统软件操作硬件模型
对于Linux操作系统而言,因其系统的强大和所支持功能的完善,可支持各种设备在Linux操作系统下运行。所以设备的类型可谓繁多,如:字符设备,块设备,网络接口设备,USB设备,PCI设备,平台设备,混杂设备……等等,而设备类型不同,也意味着其对应的驱动程序模型不同。即每一种类型的设备,都有其相应的驱动模型。
但总体而言,既然都是运行在Linux操作系统下的设备,所以其应当存在相应的驱动架构来进行驱动设备。如下图:



如上图,对于Linux操作系统而言,用户空间的应用程序和内核空间的驱动程序,有着千丝万缕的关系,但却又相互独立。他们通过文件的方式进行相互之间的通信。而驱动程序则是依赖于Linux内核的驱动架构进行编写的程序,为用户空间的应用程序提供相应的接口通道。而设备操作程序则是在Linux内核驱动架构下进行与设备直接交互的程序代码,比如配置初始化CPU私有外设,初始化硬件设备,对硬件设备进行基本操作等等,总之目的是让硬件设备能够正常的工作。
那么在Linux系统中编写内核驱动,其驱动模型是怎样的呢??



如上图:
初始化内核驱动:依赖于Linux内核的驱动模型,建立所需要操作的设备驱动并进行相应的操作。如下图:



实现设备操作:根据硬件设备的型号、功能特性等,实现驱动硬件设备正常工作,能够进行基本的操作,比如读取设备数据或者向设备写数据等。
注销设备驱动:在Linux系统中,会存在设备热拔插或者用户不想使用相应设备的应用场景,那么可以将相应的设备驱动在内核空间注销,将不能使用相应的设备驱动。
三、Linux字符设备驱动模型
对于Linux内核驱动而言,任何一种设备驱动模型都会用Linux内核中的一种结构来进行描述。
对于字符设备确定而言,在Linux内核中使用struct cdev结构来描述。其结构原型如下:



对于Linux内核给出的描述设备的结构,其结构成员并不是都是由程序员使用的,有些结构成员由内核内部使用,有些结构成员有程序员使用。比如以上struct cdev结构中,由程序员使用的成员为unsigned int count; 、dev_t dev;和const struct file_operations *ops;。
【unsigned int count;】:其表示设备的数目/数量,在同一个系统中,可能存在多个相同的设备,那么不需要每一个设备就为其提供一个驱动,而是统一提供同一个驱动,只需要在驱动中识别出是操作哪一个设备即可。Count结构成员的作用就是记录这一个驱动中存在多少个设备。



【dev_t dev;】:表示这个设备的设备号,在Linux操作系统中,通过设备号的方式来进行区分不同是设备。
【const struct file_operations *ops;】:设备驱动操作的函数集/方法集。这个方法集为上层应用程序提供相应的接口通道。实现用户空间的操作函数与内核空间的操作实现一一映射关系。
四、Linux操作系统中硬件的操作方式有句话叫做“对于Linux而言,一切皆文件”,所以对于在用户空间的应用程序而言,在面向硬件设备的操作时,也是通过文件的方式进行操作。操作相应的设备文件节点,就等同于操作了其设备文件节点对应的硬件设备。
硬件设备相关的设备文件节点存放于/dev目录下。如下图:



如上图所示,/dev目录下的文件节点均为对应的硬件设备的设备文件。例如:ttyS0设备文件为PC台式机默认的9针串口设备节点。所以对相应设备文件节点的读写操作即是对其所对应的硬件进行读写操作。
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|微软交流社区

GMT+8, 2024-5-18 17:37 , Processed in 0.197461 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表