—
SMP数据结构
CONFIG_HOTPLUG_CPU宏定义:
02
—
SMP初始化
smp_prepares_cpus
core0执行完setup_arch后,在其初始化的最后部分调用,配置好SMP相关的SCU模块。其中setup_max_cpus由内核配置选项NR_CPUS决定。
其实例化如下:
smp_secondary_init
这个函数是SMP系统初始化过程中唯一一个secondary core执行的代码。它的执行时间点在core1解复位之后,由secondary_start_kernel()调用,通常会配置core1的电源模式等。
smp_boot_secondary
作为开启SMP系统的钥匙函数,它是一定要实现的。由__cpu_up进行调用,设置core1解复位后要执行的第一条指令地址,使core1得以执行初始化代码并最终进入到secondary_start_kernel()函数中。
对于每个多核ARM SoC而言,这个函数使一定要实现的,其实例化的方式大相径庭,都可以参考如下方式:
而core1执行的第一条指令符号是secondary_startup,通常的做法是将符号secondary_startup的绝对地址写入SoC内部特定的寄存器,当core1被激活后,会自动跳转到该寄存器所存的地址处进行取指。
至此,4个smp相关的初始化函数介绍完毕,以下为kernel SMP的完整初始化流程。
推荐阅读
进群,请加一口君个人微信,带你嵌入式入门进阶。