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 是给应用层留下的"交互窗口"。
相关推荐
独处东汉4 小时前
freertos开发空气检测仪之完结_Air_check_App 工程概览与使用说明
stm32·单片机·嵌入式硬件·freertos
爱喝纯牛奶的柠檬6 小时前
基于STM32的4*4矩阵软键盘驱动
stm32·嵌入式硬件·矩阵
逐步前行7 小时前
STM32_DMA_寄存器操作
stm32·单片机·嵌入式硬件
FakeOccupational10 小时前
【电路笔记 STM32】Cortex-M7 内核上的数据缓存结构图 + MPU内存保护单元 + Cache基本操作 + Cache&DMA 时序图
笔记·stm32·缓存
LCG元10 小时前
基于STM32CubeMX的HAL库串口通信与DMA传输深度优化
stm32·单片机·嵌入式硬件
forAllforMe11 小时前
LAN9252 从机模式寄存器的配置代码示例
stm32·单片机·嵌入式硬件
guygg8812 小时前
基于STM32的贪吃蛇游戏实现(OLED屏)
stm32·嵌入式硬件·游戏
BackCatK Chen12 小时前
STM32保姆级入门教程|第4章:GPIO输入+外部中断 实现按键控制LED(手把手全流程)
stm32·单片机·外部中断·按键控制 led·stm32cubeid·gpio 输入
szxinmai主板定制专家14 小时前
基于 STM32 + FPGA 船舶电站控制器设计与实现
arm开发·人工智能·stm32·嵌入式硬件·fpga开发·架构
我不是程序猿儿14 小时前
【嵌入式】编码器计数倍频,机械一格与电气计数
stm32·单片机·嵌入式硬件·学习