linux系统启动流程

内核空间启动主要流程:

1、init/main.c  start_kernel()

2、init/main.c  rest_init()

3、init/main.c  kernel_init()

4、init/main.c  init_post()

 

内核至用户空间启动主要流程:

1、如果bootloader设置了启动参数,则将"rdinit = "参数赋予ramdisk_execute_command,将"init = "参数赋予execute_command。

2、如果ramdisk_execute_command==NULL,且/init文件可访问,则令ramdisk_execute_command="/init"。

3、如果ramdisk_execute_command!=NULL,则执行run_init_process(ramdisk_execute_command)。

4、如果execute_command!=NULL,则执行run_init_process(execute_command)。

5、执行run_init_process("/sbin/init");

6、执行run_init_process("/etc/init");

7、执行run_init_process("/bin/init");

8、执行run_init_process("/bin/sh");

9、进行panic提示:panic("No init found.  Try passing init= option to kernel.");

备注:
run_init_process会调用kernel_execve,kernel_execve会执行系统调用将系统由内核空间切换到用户空间。kernel_execve执行成功后不会返回。


 

Openwrt用户空间启动主要流程:

1、/etc/preinit
# linux内核启动后,首先运行/etc/preinit脚本,preinit脚本是一系列脚本的入口。在配置文件中可以看到“init=/etc/preinit”。

2、/sbin/init
# 在/etc/preinit文件中被指定。/sbin/init -> ../bin/busybox。

3、/etc/inittab  
# busybox的init命令执行/etc/inittab的脚本。

4、/etc/init.d/rcS 
# 根据/etc/inittab,系统启动时会执行/etc/init.d/rcS S boot脚本。

5、/etc/rc.d/S*
# /etc/init.d/rcS S boot脚本将运行/etc/rc.d目录下S开头的的所有脚本。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值