ARM技术论坛
直播中

张燕

7年用户 1342经验值
私信 关注
[问答]

有什么方法让Linux在一块新的ARM SoC上运行呢

为了让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引脚。

原作者:newbee_wxh

更多回帖

发帖
×
20
完善资料,
赚取积分