busybox inittab
更新記錄
item | note |
---|---|
20150917 | 第一版 |
目錄
- inittab 表格 格式如下
- 實際板端範例如下 (/etc/inittab)
- 以init為第1個process,其它的都是由init長出來的
- 手動reboot程序如下
- busybox reboot程序
- kernel reboot訊息
- 其它說明
- 參考來源
inittab 表格 格式如下
1 | - Format for each entry: <id>:<runlevels>:<action>:<process> |
實際板端範例如下 (/etc/inittab)
1 | # Example of how to put a getty on a serial line (for a terminal) |
以init為第1個process,其它的都是由init長出來的
1 | # ps |
手動reboot程序如下
- 行號2是由run_shutdown_and_kill_processes呼叫run_actions(SHUTDOWN)
- 行號3-5是由run_shutdown_and_kill_processes打印出來的
- run_actions 跑的是init_action_list內容,此內容由/etc/inittab建立
1 | # reboot |
busybox reboot程序
reboot(SIGTERM)訊號由halt_reboot_pwoff處里
1 | int init_main(int argc UNUSED_PARAM, char **argv) |
- halt_reboot_pwoff 呼叫 run_shutdown_and_kill_processes打印出reboot訊息
- halt_reboot_pwoff 最後呼叫 pause_and_low_level_reboot(RB_AUTOBOOT) //RB_AUTOBOOT = 0x01234567,
- pause_and_low_level_reboot:
執行reboot(magic);
1 | /* The SIGUSR[12]/SIGTERM handler */ |
run_shutdown_and_kill_processes抓印出訊息
1 | static void run_shutdown_and_kill_processes(void) |
kernel reboot訊息
- kernel使用LINUX_REBOOT_CMD_RESTART對照由busybox傳來的(RB_AUTOBOOT = 0x01234567) reboot 訊息
- 此時kernel會執行 kernel_restart(NULL);
- 先執行 kernel_restart_prepare此時會call每個device的shutdown (如spi shutdown)
- 最後machine_restart(NULL),設定cpu register 軟啟動
SYSCALL_DEFINE4
1 | include/linux/reboot.h:#define LINUX_REBOOT_CMD_RESTART 0x01234567 |
kernel_restart_prepare
1 | void kernel_restart_prepare(char *cmd) |
其它說明
/etc/inittab
1 | # cat /etc/inittab |