字符设备驱动三大数据结构是(字符驱动中最重要的数据结构体是什么)

什么是字符设备驱动三大数据结构

字符设备是指通过一个文件描述符(file descriptor)进行读/写操作的设备,例如终端、串口、打印机等。与字符设备相对的是块设备(例如硬盘),其对应的文件描述符可以进行读/写操作的是文件系统而不是设备本身。字符设备驱动是指将操作系统的接口(例如调用open/read/write/close函数)转化为硬件设备的行为的软件,通过这个软件,我们可以直接通过文件的方式读写设备,就像读写文件一样方便。

字符设备驱动中有三个主要的数据结构,分别是cdev、file_operations、和file。这些数据结构与字符设备驱动各自承担着不同的职责,下面分别进行介绍。

cdev

cdev是char设备结构体,是 Linux 内核中表示字符设备的核心数据结构之一。其主要作用是为了管理系统中的字符设备,例如打开/关闭设备、添加/删除设备等等。cdev与Linux内核中的fd(file descriptor)是一一对应的关系,fd表明了程序打开设备的次数。当fd为0时,程序即意味着关闭了设备。

通常,程序通过open系统调用打开字符设备,这只是程序与文件描述符之间的一个映射,在这之后Linux内核将会实际“调用”设备。这个“调用”是通过cdev完成的,所以我们可以将cdev看做是Linux内核与字符设备之间的纽带。

file_operations

file_operations是处理字符设备操作的结构体,这是 Linux 内核的一个结构体类型,它包含了字符设备所有可能的操作,例如:打开设备、关闭设备、读操作、写操作、异步操作等等。当应用程序打开某个字符设备并且初始化后,操作系统就通过file_operations调用相应的字符设备程序。

与设备的内存映射的方式读写可能会存在的并发冲突不同, file_operations的写方式是串行的。多个进程读文件并不会相互影响,并且实现也相对简单。

驱动程序需要自己实现file_operations结构体中的各种函数。如果某个函数没有被实现,当相应系统调用对设备执行操作时,内核将为其提供一个对应的默认函数。如下代码所示:

file

file指文件的抽象方式,在字符设备中常常被称为打开某个设备的"文件"。file描述符所有要写到设备中的数据。这是一个把操作链转换到短一点页面的机制。

通过file的f_op指针指定file_operations结构体,然后可以被内核动态加载到系统中去。file会被所有在内核空间中的操作共享所以,假如两个进程打开了设备,那么它们共享同一个file指向同一个cdev。file中保存了该用户进程的所有信息,并有特定的指针向file_operations指针变量,即链表,这些指针保存着对驱动程序特定操作的指针。当用户进程需要执行一个特定的操作时,它将调用相应的操作名 量(例如read()、write()等等)拥有它自己的开放文件表相关的指针。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/arm-7tdm.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(1)
上一篇 2023年5月1日 下午9:13
下一篇 2023年5月1日 下午9:13

猜你喜欢