ARM64多核CPU启动流程

105 篇文章 2 订阅
84 篇文章 6 订阅
ARM64多核CPU启动流程


ARM64使用ACPI parking protocol specification


BP核:
start_kernel//开始初始化内核需要的全局变量,硬件资源等
-> setup_arch
    -> setup_processor
-> cpu_init //设定IRQ堆栈
-> rest_init //在最后启动其他核
    -> kernel_thread(kernel_init, NULL, CLONE_FS);


kernel_init
    -> kernel_init_freeable();
-> smp_init
   -> cpu_up()
-> _cpu_up()
   -> __cpu_up()
-> boot_secondary
   -> cpu_ops[cpu]->cpu_boot(cpu);
    -> try_to_run_init_process("/sbin/init")
-> run_init_process
   -> do_execve
    -> try_to_run_init_process("/etc/init")
    -> try_to_run_init_process("/bin/init")




const struct cpu_operations smp_parking_protocol_ops = {
.name = "parking-protocol",
.cpu_init = smp_parking_protocol_cpu_init,
.cpu_prepare = smp_parking_protocol_cpu_prepare,
.cpu_boot = smp_parking_protocol_cpu_boot,
#ifdef CONFIG_HOTPLUG_CPU
.cpu_disable = smp_parking_protocol_cpu_disable,
.cpu_die = smp_parking_protocol_cpu_die,
#endif
};


cpu_ops[cpu]->cpu_boot(cpu); 调用了 smp_parking_protocol_cpu_boot,


smp_parking_protocol_cpu_boot
    -> writeq(__pa(secondary_entry), &mailbox->entry_point);




secondary_entry
    -> secondary_startup
-> __secondary_switched
   -> secondary_start_kernel //正式启动下一个CPU,AP核



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值