20251228 - Linux 驱动开发硬件管理机制笔记

学习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 驱动时,脑子里应该是这个画面:

  1. DTS 是这张图的"地形描述"。
  2. Platform Bus 是"匹配中介"。
  3. Probe 是驱动"上岗点火"的瞬间。
  4. ioremap 是在内核里"开辟秘道"直达寄存器。
  5. fops 是给应用层留下的"交互窗口"。
相关推荐
xuxg20053 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT4 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen5 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠8 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
辰哥单片机设计10 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦11 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报11 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
czwxkn12 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件
Love Song残响12 小时前
NVIDIA显卡终极优化指南
stm32·单片机·嵌入式硬件
BackCatK Chen1 天前
第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动)
stm32·单片机·嵌入式硬件·保姆级教程·电机正反转·tmc2240·dir引脚控制