1. 程式人生 > >Openwrt啟動後的指令碼執行(二)

Openwrt啟動後的指令碼執行(二)

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=p

iinitpathpi_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的關鍵字,新增KSTOPS{START}的字首,這樣就決定了指令碼執行的先後次序。