[嵌入式系统-261]:设备管理中的几个核心概念:设备名称、设备文件描述符、主设备号(主设备号与次设备号)以及他们之间的关系

张开发
2026/4/21 2:33:20 15 分钟阅读

分享文章

[嵌入式系统-261]:设备管理中的几个核心概念:设备名称、设备文件描述符、主设备号(主设备号与次设备号)以及他们之间的关系
在 Linux 操作系统中设备管理遵循“一切皆文件”的设计哲学。为了让你清晰地理解这些核心概念及其关系我们可以把设备管理看作一个“查快递”的过程。以下是设备名称、设备文件描述符、主设备号和次设备号的详细解析及它们之间的协作关系。1. 核心概念解析 设备名称 (Device Name)定义这是我们在用户空间看到的、位于/dev目录下的文件名例如/dev/sda,/dev/ttyUSB0。作用它是给用户和应用程序看的“代号”。本质它只是一个字符串本身不包含硬件信息。内核并不关心这个文件叫什么名字它只关心文件背后的编号。例子/dev/sda通常代表第一块 SCSI/SATA 硬盘。 主设备号与次设备号 (Major Minor Numbers)这是内核识别设备的唯一“身份证号”通常合称为设备号 (dev_t)。主设备号 (Major Number)含义标识设备所属的驱动程序类型。作用告诉内核“该找哪个驱动程序来处理”。具有相同主设备号的设备通常由同一个驱动程序控制。例子主设备号8通常对应 SCSI 磁盘驱动主设备号1对应内存设备。次设备号 (Minor Number)含义标识同一驱动程序下的具体物理设备或分区。作用告诉驱动程序“具体操作哪一个硬件实例”。例子在主设备号 8 (SCSI 磁盘) 下次设备号0代表第一块盘 (sda)次设备号16代表第二块盘 (sdb)。️ 设备文件描述符 (File Descriptor)定义当应用程序调用open()打开一个设备文件时内核返回的一个非负整数如 0, 1, 2, 3...。作用它是进程与已打开设备之间的“会话凭证”。本质在内核中它对应一个struct file结构体。这个结构体里记录了文件的位置、打开模式只读/只写以及指向底层驱动操作的指针。注意描述符是进程私有的进程 A 的描述符 3 和进程 B 的描述符 3 指向的可能是完全不同的设备。2. 它们之间的关系与协作流程为了理解它们的关系我们模拟一次应用程序读取数据的流程以读取/dev/sda为例用户发起请求应用程序调用open(/dev/sda, ...)。这里使用的是设备名称。内核查找索引文件系统VFS在/dev目录下找到sda这个文件读取其元数据获取到它的主设备号 (8)和次设备号 (0)。定位驱动程序内核拿着主设备号 (8)去查表找到了对应的“SCSI 磁盘驱动程序”。定位具体硬件内核调用驱动程序的初始化函数并传入次设备号 (0)。驱动程序根据次设备号知道你要操作的是第一块硬盘而不是第二块。建立连接内核在内核空间创建一个struct file对象并在用户空间返回一个设备文件描述符比如fd 3给应用程序。后续操作应用程序后续只需要说“我要读写fd3”内核就知道这是指/dev/sda进而找到驱动和硬件进行操作。3. 关系对照表表格概念所在空间形象比喻核心作用设备名称用户空间快递柜的取件码给人看方便记忆和操作对内核不重要。主设备号内核空间快递公司 (如顺丰)决定由哪个驱动程序(公司) 负责处理。次设备号内核空间具体快递员/网点决定具体操作哪一个物理设备(实例)。文件描述符进程空间手中的快递单据只有打开后才能获得用于后续的读写会话。4. 总结设备名称是入口是用户空间的接口。主/次设备号是索引是内核空间定位驱动和硬件的精确坐标。文件描述符是句柄是进程与设备建立连接后的操作凭证。当你看到/dev/sda(名称) 时它背后对应着(8, 0)(主, 次设备号)当你open它之后你手里拿到的是3(文件描述符)通过3你就能指挥(8, 0)干活了。

更多文章