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/ 目录)深入学习。