标签:kernel 流程 cmd reboot 内核 shutdown restart pm
内核reboot流程
kernel/reboot.c
void kernel_restart(char *cmd) { kernel_restart_prepare(cmd); migrate_to_reboot_cpu(); syscore_shutdown(); if (!cmd) pr_emerg("Restarting system\n"); else pr_emerg("Restarting system with command '%s'\n", cmd); kmsg_dump(KMSG_DUMP_RESTART); machine_restart(cmd); }
->reboot命令
->glibc给所有任务发送kill
->内核态kernel_restart()
->kernel_restart_prepare()
->device_shutdown()
-> dev->driver->shutdown() 调用驱动注册的.shutdown钩子
->migrate_to_reboot_cpu() 关闭cpu hotplug
->syscore_shutdown() 里面ops->shutdown,内核相关子系统(比如clk,irq,pm)注册的shutdown
->machine_restart
->local_irq_disable(); smp_send_stop(); /* Disable interrupts first */
-> 根据 arm_pm_restart是否初始化决定走arm_pm_restart(reboot_mode, cmd),如果是这种case,一般会写pm register将whole cpu reset;或 do_kernel_restart(cmd);
->do_kernel_restart() 执行注册的restart_handler_list
->BIOS->ATF->芯片复位
from: https://zhuanlan.zhihu.com/p/353452093
标签:kernel,流程,cmd,reboot,内核,shutdown,restart,pm 来源: https://www.cnblogs.com/aspirs/p/14774235.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。