温馨提示×

什么是linux drivers框架

小樊
39
2026-09-06 17:33:03
栏目: 智能运维

“Linux drivers 框架”通常可以从两个层面理解:

  1. 广义:Linux 驱动的整体架构与模型
  2. 狭义:Linux 内核中用于组织和管理设备驱动的“框架(framework)/子系统”

下面用通俗方式说明。


一、Linux 驱动在系统中的位置

Linux 是宏内核,驱动直接运行在内核态:

用户空间程序
   ↓ (系统调用)
内核 (进程调度 / 内存 / 文件系统)
   ↓
驱动框架 (bus / class / driver)
   ↓
具体硬件 (CPU 外设 / PCI / USB / I2C ...)

驱动的作用:
让硬件“看起来像文件或设备”,供用户空间使用。


二、Linux 驱动的核心框架(关键概念)

Linux 驱动并不是“随便写个函数”,而是基于一套统一模型。

1. 设备模型(Device Model)

核心对象:

  • device:硬件设备
  • driver:驱动程序
  • bus:总线(PCI、USB、I2C、platform)
  • class:设备类别(input、net、tty)

关系:

bus
 ├── device
 └── driver

内核负责:

  • 设备与驱动匹配
  • 自动加载
  • 电源管理
  • 热插拔(uevent)

2. Platform 框架(最常用)

用于没有标准总线的硬件(SoC 内部设备):

platform_device  // 描述硬件资源
platform_driver  // 驱动逻辑

示例:

  • LED
  • 按键
  • 看门狗
  • 内部 UART

3. 字符设备框架(char device)

最常见驱动类型:

register_chrdev()
file_operations

用户空间表现:

/dev/xxx

适合:

  • 串口
  • 传感器
  • 自定义硬件

4. 块设备框架(block device)

用于:

  • 硬盘
  • SD 卡
  • SSD

特点:

  • 以“块”为单位
  • 有缓存和调度

5. 网络设备框架(net device)

用于:

  • 网卡
  • WiFi
  • 虚拟网络

接口:

struct net_device

用户空间:

ifconfig / ip

6. 子系统级框架(高级)

Linux 把一类设备抽象成框架,驱动只需“填空”:

框架 用途
input 键盘/鼠标/触摸
i2c I2C 设备
spi SPI 设备
usb USB 设备
gpio 通用 IO
regulator 电源管理
pinctrl 引脚复用
drm 显示
alsa 音频

好处:

  • 不用重复造轮子
  • 驱动更统一
  • 更易于维护

三、一个驱动通常包含什么?

最小字符驱动结构:

static const struct file_operations fops = {
    .open = drv_open,
    .read = drv_read,
    .write = drv_write,
};

module_init(xxx_init);
module_exit(xxx_exit);

编译后:

insmod drv.ko

四、总结一句话

Linux drivers 框架 = 内核提供的一套统一机制,用来描述硬件、匹配驱动、暴露接口,并管理设备生命周期。

如果你愿意,我可以:

  • 画一张 Linux 驱动框架图
  • 对比 platform / char / usb 驱动
  • 给你一个“从零写 Linux 驱动”的学习路线

0