图解字符驱动模块设计思路

一、图解字符驱动模块设计思路

  • 用户空间调用

  • VFS 层 (虚拟文件系统)

  • 字符设备层

  • 驱动程序实现

二、应用代码

用户程序通过标准的系统调用(如 openreadwrite 等)与字符设备交互。例如:

int fd = open("/dev/mydevice", O_RDWR); write(fd, buffer, size); read(fd, buffer, size); close(fd);

目标:将用户的请求从用户空间传递到内核空间的字符驱动。

三、VFS 层 (虚拟文件系统)

系统调用会通过 VFS (Virtual File System ) 进入内核。这一层的主要任务是将与文件系统相关的操作抽象化:

  • VFS 通过 file_operations 结构体找到设备驱动程序提供的对应实现。

  • file_operations 是字符设备的核心结构体,它定义了驱动程序如何处理系统调用:

struct file_operations { .open = my_open, .read = my_read, .write = my_write, .release = my_close, // 其他操作 };

四、驱动程序实现

应用程序利用 open 函数打开设备文件后获取类型信息和主设备号,再利用该信息得到注册在 chrdevs 的设备驱动程序 index,接着利用获取到的 index 值,获得注册在 chrdevs 变量上的 file_operations 结构体地址,该结构体记录了字符设备驱动程序使用其注册函数设定相应低级文件输入输出函数的内容。

如下图所示,表示了设备驱动程序的运作方式。

相关推荐
AlfredZhao15 小时前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3102 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
A小辣椒4 天前
TShark:Wireshark CLI 功能
linux
A小辣椒4 天前
TShark:基础知识
linux
AlfredZhao4 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao5 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334665 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪5 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql