- 为了让Linux在一块新的
ARM SoC 上运行,需要提供大量的底层支撑,如定时器节拍、中断控制器、SMP启动、CPU热插拔以及底层的GPIO、时钟、pinctrl、DMA硬件的封装;
- 定时器节拍为Linux基于时间片的调度机制以及内核和用户空间的定时器提供支撑;
- 中断控制器的驱动使得Linux内核工程师可以直接调用
local_irq_disable() disable_irq() 等通用的中断API ; SMP 启动用于让SoC 内部的多个cpu 核都投入运行;CPU 热插拔用于在运行时挂载或拔除cpu ;- 时钟框架,让具体的SoC实现clk_ops()成员函数,并通过clk_register()、clk_register_clkdev()注册时钟源以及源与设备的对应关系,具体的时钟驱动都统一迁移到drivers/clk目录中;
- pinctrl驱动架构,通过在内核中增加一个drivers/pinctrl目录,以支撑SoC上的引脚复用,各SoC的实现代码均放到该目录;
- 各SoC采用
dmaengine 架构实现DMA 驱动,该架构提供了通用的DMA通道API,例如dmaengine_prep_slave_single() dmaengine_submit() 等,各SoC实现dma_device的成员函数,实现代码统一放入drivers/dma目录; - drivers/gpio下的gpiolib已能与新的pinctrl共存,实现引脚的GPIO和其他功能之间的复用,各SoC只需要实现统一的gpio_chip结构体的成员函数即可;
- 当前GPIO、时钟、pinmux等都能良好地进行设备树的映射处理,因此可方便地在
.dts 中定义一个设备需要的GPIO、时钟和pinmux引脚;
|