武威市建设局网站 放管服,太原seo代理计费,湖南手机版建站系统开发,公司注册网上查名01—SMP数据结构SMP的数据结构如下图所示#xff0c;主要由2部分构成#xff0c;通过两个宏定义CONFIG_SMP和CONFIG_HOT_PLUG来控制。当设置kernel支持SMP模式时#xff0c;那么CONFIG_SMP选项是一定会打开的#xff0c;因此第一部分是必须实现的内容。而第二部分是否需要实… 01—SMP数据结构SMP的数据结构如下图所示主要由2部分构成通过两个宏定义CONFIG_SMP和CONFIG_HOT_PLUG来控制。当设置kernel支持SMP模式时那么CONFIG_SMP选项是一定会打开的因此第一部分是必须实现的内容。而第二部分是否需要实现取决于热插拔宏定义CONFIG_HOTPLUG_CPU是否打开。CONFIG_SMP宏定义CONFIG_HOTPLUG_CPU宏定义02—SMP初始化smp_init_cpuscore0执行该函数实际上并不去设置硬件这个函数通过SCUCONFIG(0x4)寄存器获取当前SoC的core数量预先初始化好一张cpu map的表后期若除primary cpu之外的cpu真正被激活并设置为SMP模式那么会再次更新cpu map这张表。其实例化如下smp_prepares_cpuscore0执行完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的完整初始化流程。推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~嵌入式Linux微信扫描二维码关注我的公众号