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 是给应用层留下的"交互窗口"。
相关推荐
benjiangliu4 小时前
STM32教程-02-STM32复习C语言
c语言·stm32·嵌入式硬件
DIY机器人工房5 小时前
简单理解:为什么错误计数器一般要选 uint32_t 类型?
stm32·单片机·嵌入式硬件·嵌入式·diy机器人工房
lingzhilab6 小时前
零知IDE——基于STM32F103RBT6的PAJ7620U2手势控制WS2812 RGB灯带系统
stm32·单片机·嵌入式硬件
三佛科技-187366133976 小时前
BP85956D集成VCC电容电机驱动BUCK电源芯片(12V300mA应用电路)
stm32·单片机·物联网
爱睡觉的王宇昊6 小时前
PCB设计完全指南:从软件选择到基础规范(通用电路篇详解)
笔记·stm32·单片机·嵌入式硬件·学习
白书宇6 小时前
【STM32实战】从零开始写Linux 0.12内核 第1个实验安装IAR 8.5
linux·c语言·驱动开发·stm32·单片机·嵌入式硬件
意法半导体STM326 小时前
【官方原创】一站式生成STM32N6的ExtMemLoader, FSBL, Appli的点灯工程 LAT1614
人工智能·stm32·单片机·嵌入式硬件·mcu·stm32n6
ShiMetaPi7 小时前
GM-3568JHF丨ARM+FPGA异构开发板系列教程:外设教程 08 串口
stm32·单片机·fpga开发·rk3568
m0_555762907 小时前
STM32 CubeMX中FreeRTOS与SysTick配置的深层原因
stm32·单片机·嵌入式硬件·st