普通的reboot是通过busybox为入口,进入halt_main函数,然后给init进程发送SIGTERM信号,init进程接收到信号后给其他进程发送终止信号,最后调用C库函数reboot,reboot通过系统调用sys_reboot进入内核,内核将整个系统重启。其中在shell中执行reboot –f则通过halt_main直接调用C函数reboot,不经过init进程。 三、代码详解 1.reboot...
用户空间程序通过reboot系统调用,进入内核空间 内核空间根据执行路径的不同,提供了kernel_restart、kernel_halt和kernel_power_off三个处理函数,响应用空间的reboot请求 这三个处理函数的处理流程大致相同,主要包括:向关心reboot过程的进程发送Notify事件;调用drivers核心模块提供的接口,关闭所有的外部设备;调用drivers syscore...
2. reboot流程图 对于嵌入式系统,reboot命令都是busybox集成,当敲入reboot命令之后,进入halt_main,向1号init进程发送SIGTERM信号;如果init-system采用busybox-init,则init进程的init_main接收到信号后给其他进程发送终止信号,最后调用C库函数reboot,reboot通过系统调用sys_reboot进入内核。 内核reboot子系统将根据系统调用...
POST加电自检-->BIOS(Boot Sequence)-->加载对应引导上的MBR(bootloader)-->主引导设置加载其BootLoader-->Kernel初始化-->initrd—>/etc/init进程加载/etc/inittab,其进程流程图如下: 二、剖析详细启动过程 ⑴、 POST开机自检:电脑主机打开电源的时候,随后会听到滴的一声,系统启动开始了开机自检(POST-power on ...
这个函数定义在`kernel/sys.c`文件中,并使用`SYSCALL_DEFINE4(reboot, int, magic, int, cmd, unsigned long, arg)`这样的宏来声明,接受不同的参数以执行不同类型的关机操作。 关机流程概述 1. 验证请求: 在接收到关机请求后,内核会检查调用者是否有足够的权限执行此操作,并验证传入的参数是否合法。 2. ...
kernel_restart(buffer);break; #ifdefCONFIG_KEXEC_COREcaseLINUX_REBOOT_CMD_KEXEC:ret = kernel_kexec();break;#endif #ifdefCONFIG_HIBERNATIONcaseLINUX_REBOOT_CMD_SW_SUSPEND:ret = hibernate();break;#endif default:ret = -EINVAL;break;}mutex_unlock(&system_transition_mutex);returnret;} ...
linux4.14/init/main.c,start_kernel 函数。asmlinkage __visible void __init start_kernel(void) ...
整个关机流程会依次进行如下调用: -->kernel_power_off() -->kernel_shutdown_prepare -->migrate_to_reboot_cpu -->syscore_shutdown -->machine_power_off // 该函数根据具体平台而定,riscv 平台在 arch/riscv/kernel/reset.c 文件中 Hifive Unmatched 开发板中的 SiFive FU740 芯片将 GPIO2 口用作关...
我们在arch\arm\kernel找到__lookup_machine_type被定义在head-common.S文件中。开始分析代码:首先,读出3b的地址给r3,这里的3b就是下面的那个3:所对应的虚拟地址。然后用ldmia指令将r3存放的虚拟地址分别存入r4,r5,r6。所以现在 r4=. ; r5=__arch_info_begin ; r6=__arch_info_end ...