系统启动顺序
- bootloader加载内核
- 内核开动,同时扫描mtd文件系统分区
- 内核执行/etc/preinit脚本
- /etc/preinit执行/sbin/init二进制程序
- /sbin/init根据/etc/inittab定义执行启动过程
- /etc/inittab首先执行/etc/init.d/rcS,此脚本将顺序启动/etc/rc.d/目录以S开关的脚本
/sbin/init
early()
- mount
/proc
/sys
/tmp
/dev
/dev/pts
目录(early_mount) - 创建设备节点和/dev/null文件结点(early_dev)
- 设置PATH环境变量(early_env)
- 初始化/dev/console
cmdline()
- 根据/proc/cmdline内容init_debug=([0-9]+)判断debug级别
watchdog_init()
- 初始化内核watchdog(/dev/watchdog)
加载内核模块
- 创建子进程/sbin/kmodloader加载/etc/modules-boot.d/目录中的内核模块
preinit()
-
创建子进程执行/etc/preinit脚本,此时PREINIT环境变量被设置为1,主进程同时使用uloop_process_add()把/etc/preinit子进程加入uloop进行监控,当/etc/preinit执行结束时回调plugd_proc_cb()函数把监控/etc/prein