什么叫做驱动框架?内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,并把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架。
即标准化的驱动实现,统一管理系统资源,维护系统稳定。
这样驱动开发从设计题变成了填空题。
基于 Linux kernel-5.1,参考 Linux 源码根目录下 MAINTAINERS 文件,该文件是目前内核维护人员列表,从这里可以看出 Linux 大概有哪些部分。MAINTAINERS 文件中已经列出了 2280 个子系统 subsystems,但并不是每个子系统都一直在维护,很多已经不维护了。下面列出比较常见的子系统。
gpio 子系统pinctrl 子系统input 子系统PWM 子系统leds 子系统中断子系统IIO(Industrial Input/Output) 子系统ADC 子系统I2C 子系统SPI 子系统regmap 子系统USB 子系统RTC 子系统Common Clock 子系统cpufreq 子系统cpuidle 子系统Security 子系统SOC-CAMERA V4L2 子系统音频 ALSA 子系统时间子系统图形子系统TTY 子系统Remote Processor 子系统Remote Processor Message 子系统SCSI 子系统SOUNDWIRE 子系统SPMI 子系统STAGING 子系统SWIOTLB 子系统TEE 子系统TURBOCHANNEL 子系统ULTRA-WIDEBAND (UWB) 子系统VME 子系统XEN BLOCK 子系统XEN PCI 子系统XEN SWIOTLB 子系统MFD 子系统Regulator 子系统counter 子系统mtd 子系统PM wakeup source 子系统Runtime PM 子系统