linux驱动子系统有哪些
Linux 内核的驱动子系统(也称为框架或子系统)是内核中用于管理硬件设备的标准化接口层,它们抽象了硬件细节,为驱动开发提供统一的模型。以下是 Linux 中主要的驱动子系统和框架:
1. 字符设备(Char Devices)
- 功能:提供字节流式访问(非块设备),如键盘、串口、传感器等。
- 核心API:
file_operations
结构体(实现 open
、read
、write
、ioctl
等)。
- 示例驱动:
/dev/random
、/dev/ttyS0
。
2. 块设备(Block Devices)
- 功能:管理以固定大小块(如磁盘、SSD)访问的设备,支持缓存和文件系统。
- 核心API:
block_device_operations
结构体。
- 示例驱动:
/dev/sda
(SCSI磁盘)、/dev/loop0
(回环设备)。
3. 网络设备(Network Devices)
- 功能:处理网络数据包(以太网卡、Wi-Fi 等)。
- 核心API:
net_device
结构体(注册 ifconfig
可见的接口)。
- 示例驱动:
eth0
、wlan0
。
4. 输入子系统(Input Subsystem)
- 功能:统一管理输入设备(键盘、鼠标、触摸屏)。
- 核心API:
input_dev
结构体,通过 /dev/input/eventX
上报事件。
- 示例驱动:USB 键盘、触摸板驱动。
5. 帧缓冲(Framebuffer)
- 功能:抽象显示设备,提供图形内存的直接访问。
- 核心API:
fb_info
结构体。
- 示例驱动:
/dev/fb0
(显卡驱动)。
6. 声音子系统(ALSA)
- 功能:高级音频架构(Advanced Linux Sound Architecture)。
- 核心API:ALSA 库和内核接口(如
snd_card
)。
- 示例驱动:声卡驱动(如
snd_hda_intel
)。
7. USB 子系统(USB Core)
- 功能:管理 USB 主机控制器和设备(HID、存储、串口等)。
- 核心API:
usb_driver
、usb_device_id
。
- 示例驱动:USB 摄像头(
uvcvideo
)、USB 存储(usb-storage
)。
8. I2C/SPI 子系统
- 功能:管理 I2C 和 SPI 总线设备(传感器、EEPROM 等)。
- 核心API:
- I2C:
i2c_driver
、i2c_client
。
- SPI:
spi_driver
、spi_device
。
- 示例驱动:温度传感器(
lm75
)、OLED 屏幕。
9. PCI/PCIe 子系统
- 功能:管理 PCI/PCIe 设备(显卡、网卡等)。
- 核心API:
pci_driver
、pci_device_id
。
- 示例驱动:NVIDIA 显卡(
nouveau
)、Intel 网卡(igb
)。
10. 设备树(Device Tree)
- 功能:描述硬件配置(替代传统硬编码),用于嵌入式平台(如 ARM)。
- 关键文件:
.dts
(设备树源码)、.dtb
(编译后的二进制)。
11. 电源管理(Power Management)
- 功能:处理休眠(Suspend/Resume)、动态频率调整(DVFS)。
- 核心API:
pm_ops
、Runtime PM(运行时电源管理)。
12. DMA 引擎(DMA Engine)
- 功能:管理直接内存访问(DMA)控制器。
- 核心API:
dmaengine
框架。
13. Regulator 框架
- 功能:管理电源调节器(如电压、电流控制)。
- 典型应用:移动设备省电优化。
14. IIO(Industrial I/O)
- 功能:工业传感器框架(ADC、陀螺仪、光感等)。
- 核心API:
iio_dev
结构体。
15. V4L2(Video for Linux 2)
- 功能:视频设备框架(摄像头、采集卡)。
- 核心API:
video_device
结构体。
16. GPU 驱动(DRM/KMS)
- 功能:图形渲染与显示管理(Direct Rendering Manager/Kernel Mode Setting)。
- 示例驱动:
amdgpu
、i915
(Intel 显卡)。
17. 其他重要框架
- MTD(Memory Technology Devices):Flash 存储(如 NAND、NOR)。
- HWMON(Hardware Monitoring):硬件监控(温度、风扇转速)。
- LED 框架:控制 LED 设备。
- PWM 框架:脉冲宽度调制(如电机控制)。
总结
Linux 通过子系统将驱动分类管理,开发者只需实现对应框架的接口,无需关心底层细节。理解这些子系统是开发或调试驱动的关键。可通过内核文档(Documentation/driver-api/
)或源码(drivers/
目录)深入学习。