Openwrt启动脚本的运行分为两个阶段,
preinit完成系统的初始化,
rcS依次启动了各个应用程序模块。
执行/etc/preinit脚本之后
boot_hook_init preinit_essential
boot_hook_init preinit_main
boot_hook_init failsafe
boot_hook_init initramfs
boot_hook_init preinit_mount_root
for pi_source_file in /lib/preinit/*; do
. $pi_source_file
done
preinit执行的最后一个脚本为99_10_run_init
exec env - PATH=piinitpathpi_init_env $pi_init_cmd
pi_init_cmd为
pi_init_cmd=”/sbin/init”
因此开始运行busybox的init命令
busybox的init名执行inittab脚本,该脚本在/etc/inittab
[root@PandoraBox:/lib/functions]#cat /etc/inittab
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
ttyS0::askfirst:/bin/login
ttyS1::askfirst:/bin/login
[root@PandoraBox:/lib/functions]#
可以看到sysinit尾系统初始化运行的/etc/init.d/rcS S boot脚本
shutdown为系统重启或者关机运行的脚本
tty*是用户通过串口或者telnet登录是,运行/bin/login登录系统
运行前的提示为:
“Please press Enter to activate this console.”
启动时运行的/etc/init.d/rcS S boot,执行后将会运行一系列的启动脚本,这些脚本在/etc/rc.d/目录下:
[root@PandoraBox:/etc/rc.d]#ls
K10mjpg-streamer S12rpcd S60dnsmasq
K50dropbear S19firewall S60samba
K85odhcpd S20network S61avahi-daemon
K89log S30set_kernel_timezone S70usb_printer
K90network S35odhcpd S90mjpg-streamer
K90xCloud S40fstab S90qos
K98boot S41sysntpd S90xCloud
K99umount S50cron S94shairport
S00sysfixtime S50dropbear S95done
S10boot S50qos_gargoyle S96led
S10system S50telnet S99xunlei
S11sysctl S50uhttpd
S12log S60dbus
[root@PandoraBox:/etc/rc.d]#
这些启动脚本来自/etc/init.d/中的脚本,通过/etc/rc.common脚本,将init.d中的脚本链接到/etc/rc.d目录下,并根据这些脚本中的START和STOP的关键字,添加KSTOP和S{START}的前缀,这样就决定了脚本运行的先后次序。
时间: 2024-10-13 02:49:59