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 是给应用层留下的"交互窗口"。
相关推荐
List<String> error_P1 小时前
STM32 GPIO HAL库常用函数
stm32·单片机·hal库
小痞同学2 小时前
【铁头山羊STM32】HAL库 5.SPI部分
stm32·单片机·嵌入式硬件
蓬荜生灰2 小时前
STM32(5)-- 新建寄存器版工程
stm32·单片机·嵌入式硬件
大神与小汪3 小时前
STM32上进行Unix时间戳转换
stm32·嵌入式硬件·unix
嗯嗯=3 小时前
STM32单片机学习篇1
stm32·单片机·嵌入式硬件
橙露4 小时前
STM32 单片机实战:基于 HAL 库的串口通信与中断处理详解
stm32·单片机·嵌入式硬件
__万波__4 小时前
STM32L475跑马灯实验
stm32·单片机·嵌入式硬件
兆龙电子单片机设计4 小时前
【STM32项目开源】STM32单片机智能万年历系统
stm32·单片机·开源·毕业设计·智能家居
xiaobobo33304 小时前
STM32学习HAL库的一些知识点积累
stm32·学习·硬件软件一盘棋·寄存器操作·寄存器功能搜索
嗯嗯=5 小时前
STM32单片机学习篇2
stm32·单片机·学习