学习Linux 驱动开发时,总觉得知识点十分零散,非常有必要把一些知识点集成起来总结。Linux 驱动开发硬件管理机制相关的术语分为"空间管理"、"描述机制"和"交互协议"三个维度,以此构建完整的知识地图。
📂 第一部分:地址与内存管理(硬件如何"现身")
在 Linux 内核中,所有的硬件最终都必须映射到内存地址空间才能被访问。
| 术语 | 全称 | 解释 |
|---|---|---|
| MMU | Memory Management Unit (内存管理单元) | 翻译官:硬件电路,负责把 CPU 发出的虚拟地址转为物理地址。没有它,Linux 就无法实现进程隔离。 |
| PA / VA | Physical Address / Virtual Address (物理地址 / 虚拟地址) | 真与假:PA 是芯片手册上的实际地址;VA 是驱动程序在代码里使用的地址。 |
| I/O Ports | I/O Ports (I/O 端口) | 专用通道 :在某些架构(如 X86)中,硬件有专门的访问指令。但在 ARM(如 i.MX6ULL)中,通常使用 I/O Memory 统一编址。 |
| DMA | Direct Memory Access (直接存储器访问) | 高速路:允许硬件外设(如网卡)不经过 CPU 直接读写内存,极大减轻 CPU 负担。 |
🗺️ 第二部分:设备树与信息描述(硬件如何"点名")
现代 Linux 内核不再硬编码硬件信息,而是通过设备树来描述。
| 术语 | 全称 | 解释 |
|---|---|---|
| OF | Open Firmware (开放固件) | 技术来源 :Linux 内核中所有以 of_ 开头的函数(如 of_get_named_gpio)都是用于解析设备树的。 |
| Phandle | Pointer Handle (句柄/引用) | 指路牌:在 DTS 中用于引用另一个节点。比如 LED 节点引用 GPIO 控制器节点。 |
| Binding | Device Tree Binding (设备树绑定) | 说明书 :规定了某种硬件在 DTS 里应该写哪些属性(如 reg, interrupts),通常在内核文档 Documentation/devicetree/bindings 下。 |
| Compatible | Compatible String (兼容性字符串) | 身份证 :驱动程序靠这个字符串找到对应的硬件节点。如 "fsl,imx6ull-gpio"。 |
🛠️ 第三部分:驱动框架模型(硬件如何"上岗")
Linux 为了方便管理,将驱动和硬件剥离开来,形成了一套成熟的框架。
| 术语 | 全称 | 解释 |
|---|---|---|
| VFS | Virtual File System (虚拟文件系统) | 大统一 :它屏蔽了底层驱动差异。让你无论是读硬盘还是读 LED,都统一使用 read/write。 |
| Platform Bus | Platform Bus (平台总线) | 虚拟总线:i.MX6ULL 内部集成的控制器(如 GPIO, I2C, UART)通常挂载在这条虚拟总线上。 |
| PDev / PDrv | Platform Device / Platform Driver | 匹配对 :PDev 描述硬件资源(来自 DTS),PDrv 实现操作逻辑。两者名字匹配,probe 函数就会运行。 |
| Probe | Probe Function (探测函数) | 入职考试:当驱动和硬件匹配成功后,内核调用的第一个函数,用于申请资源和初始化硬件。 |
⚡ 第四部分:中断与实时响应(硬件如何"呼叫")
当硬件有突发状况(如按键被按下),它需要主动告诉 CPU。
| 术语 | 全称 | 解释 |
|---|---|---|
| IRQ | Interrupt Request (中断请求) | 信号线:硬件向 CPU 发出的"请停下工作看我一眼"的电信号。 |
| GIC | Generic Interrupt Controller (通用中断控制器) | 调度中心:ARM 架构中负责管理、屏蔽、分发所有中断的核心硬件。 |
| ISR | Interrupt Service Routine (中断处理程序) | 急诊室:驱动中专门处理中断的函数,要求执行速度极快。 |
| Bottom Half | Bottom Half (下半部) | 延后处理:如果中断要做的事情太多(如网络数据包解析),ISR 只做最紧急的,剩下的丢给"下半部"慢慢做。 |
📝 总结:一张驱动开发的"寻宝图"
当你在阅读一个典型的 i.MX6ULL 驱动时,脑子里应该是这个画面:
- DTS 是这张图的"地形描述"。
- Platform Bus 是"匹配中介"。
- Probe 是驱动"上岗点火"的瞬间。
- ioremap 是在内核里"开辟秘道"直达寄存器。
- fops 是给应用层留下的"交互窗口"。