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 是给应用层留下的"交互窗口"。
相关推荐
测试学习test9 小时前
SPI读取W25Q64硬件驱动(HAL库)
数据库·stm32·嵌入式硬件·算法
xingzhemengyou110 小时前
STM32对函数进行CRC校验
stm32·单片机·嵌入式硬件
铅笔小新z10 小时前
【stm32】中断与异常
stm32·单片机·嵌入式硬件
番茄灭世神11 小时前
PN学堂GD32教程第11篇——I2C与EEPROM
c语言·stm32·单片机·嵌入式·gd32
沐欣工作室_lvyiyi12 小时前
基于STM32的便捷式智能气象仪设计(论文+源码)
stm32·单片机·嵌入式硬件·单片机毕业设计·电子信息工程毕业设计·河北工程技术学院·廊坊师范学院
iCxhust12 小时前
STM32F103C8T6 CAN 通讯
stm32·单片机·嵌入式硬件
铅笔小新z12 小时前
【stm32】SPI Flash 驱动开发
驱动开发·stm32·嵌入式硬件
周洲08301 天前
STM32 串口底层深度解析|USART 中断标志、硬件 FIFO,乱码根源底层定位
stm32·单片机·嵌入式硬件
李日华大战鸡红1 天前
IC-MU128编码器使用教程
stm32
周洲08301 天前
STM32片内Flash读写深度详解|掉电参数保存、底层原理
linux·前端·stm32