Arm32 Linux SMP 启动流程

微信公众号:mindshare思享


今天突然翻出好几年前写的一篇关于Armv7-A CPU SMP启动流程的文章,还是当时Arm第一款真正意义上的SMP多核系统,所以当时花了很多时间来去研究Linux kernel怎么支持的。

在那个年代还没有device tree, 比较多的SMP的支持还需要platform的代码支持,power on/off也没有PSCI的定义,都是平台自己的实现。

Timer也没有现在的Architecture Timer支持的标准。

到了Cortex-A7/A15以后的时候,随着device tree和Arm CPU HW越来越标准,PSCI规范的出现,现在port一个能基本工作的Linux kernel基本工作量比较少,一般硬件没问题的话,2-3天能将一个基本的Linux kernel带起来。




基本的loader--boot monitor


Boot monitor是Arm在vesatile express板子上的最基本的loader,现在已经被Arm Trusted Firmware取代,现在在Firmware里做了更多的事情。


Boot monitor采取了最常用的方式来逐个将CPU启动起来。




它的方式与下面的类似,


还有一种也比较常用的启动SMP的方式,


现在的Arm的JUNO开发板就是采用这种方式,只是JUNO上不是AVP,而是一个Cortex-M3的控制器。


SMP kernel 启动流程图



SMP kernel boot 代码流程


红色部分是需要平台实现的代码。


OnPrimary CPU




 以上Setup_arch具体工作为 



On SecondaryCPU





猜你喜欢

转载自blog.csdn.net/weixin_39366778/article/details/80495049
今日推荐