一、簡介
tina 使用busybox init方式啟動,首先調(diào)用執(zhí)行pseudo_init(掛載文件系統(tǒng),如/proc、/tmp、/sys /etc、/usr),接著會調(diào)用/sbin/init進程,而init進程調(diào)用的第一個啟動腳本為/etc/init.d/rcS。
二、平臺的自定義
不同的平臺文件系統(tǒng)具有其共性與特殊性。tina/packge/busybox-init-base-files/files下提供了所有平臺的基礎(chǔ)文件。
而在tina/target/allwinner/XXX/busybox-init-base-files下存放的是平臺特性文件,其優(yōu)先級高于前者,即當(dāng)前者目錄和后者存在有相同文件時,以后者為準(zhǔn)。如有以下兩個文件:
A:tina/target/allwinner/r11-R11_pref1/busybox-init-base-files/etc/banner
B:tina/package/busybox-init-base-files/files/etc/banner
最終拷貝到文件系統(tǒng)中的為A。
三、pseudo_init與rcS
pseudo_init與rcS文件中存在很多平臺共性的代碼,避免系統(tǒng)充斥大量冗余代碼,以及方便基礎(chǔ)文件的維護和開發(fā)。所以不允許在特定平臺下自定義pseudo_init、rcS文件(必須使用tina/packge/busybox-init-base-files/files下的pseudo_init、rcS)。
如果需要添加平臺特定配置(pseudo_init,rcS沒有配置),可將其寫到rc.preboot,rc.final中,參考第四節(jié)。
四、rcS腳本
1.功能描述
(1)執(zhí)行/etc/init.d/rc.preboot。
為了滿足開機快速啟動的需求,提供了用戶可自定義rc.preboot文件,即在tina/target/allwinner/XXX/busybox-init-base-files/etc/init.d/目錄下創(chuàng)建rc.preboot腳本文件,將會被rcS最先調(diào)用執(zhí)行。
(2)配置打印級別,主機名稱。
(3)執(zhí)行/etc/init.d/rc.log,配置系統(tǒng)log信息。
系統(tǒng)默認(rèn)使用的是tina/package/busybox-init-base-files/files/etc/init.d/rc.log腳本進行配置系統(tǒng)log信息。用戶可在tina/target/allwinner/XXX/busybox-init-base-files/etc/init.d/下創(chuàng)建rc.log,自定義rc.log。
如果需要使用默認(rèn)rc.log,需要在make menuconfig配置。
Base system --- >
busybox-init-base-files......................... Busybox init base system --- >
[*] Use the rc.log
(4)掛載UDISK。
(5)執(zhí)行/etc/init.d/rc.modules,加載內(nèi)核模塊。
系統(tǒng)默認(rèn)使用的是tina/package/busybox-init-base-files/files/etc/init.d/rc.modules腳本進行內(nèi)核模塊自加載,用戶可在tina/target/allwinner/XXX/busybox-init-base-files/etc/init.d/下創(chuàng)建rc.modules,自定義rc.modules。
如果需要使用默認(rèn)rc.modules,需要在make menuconfig配置如下。
Base system --- >
busybox-init-base-files......................... Busybox init base system --- >
[*] Use the rc.modules
(6)啟動/etc/rc.d下的腳本。
關(guān)于執(zhí)行rc.d下的啟動腳本,目的為兼容procd式的應(yīng)用腳本。/etc/rc.d下的腳本是鏈接到/etc/init.d/下,默認(rèn)情況下只執(zhí)行adbd,如果需要執(zhí)行其他腳本,需要在tina/target/allwinner/XXX/busybox-init-base-files/etc/init.d/下,自定義load_script.conf文件,文件內(nèi)容中寫上要啟動的應(yīng)用,如adbd(注意,每一個應(yīng)用占一行)。可參考:tina/packge/busybox-init-base-files/files/etc/init.d/load_script.conf。
如果需要執(zhí)行rc.d下的啟動腳本,需要在make menuconfig做如下配置。
Base system --->
busybox-init-base-files......................... Busybox init base system --->
[*] Auto load the script in /etc/rc.d
(7)ota初始化。
(8)執(zhí)行/etc/init.d/rc.final,用戶自定義啟動腳本。
用戶可在tina/packge/busybox-init-base-files/files/etc/init.d/下創(chuàng)建一個rc.final腳本,自定義啟動應(yīng)用程序,該腳本將會被rcS最后調(diào)用執(zhí)行。
2.rc.preboot與rc.final的區(qū)別?
rc.preboot比rc.final先運行,在執(zhí)行rc.preboot腳本的時候,系統(tǒng)的一些初始化操作還沒完成,如掛載UDISK、內(nèi)核模塊自加載、ota等等操作。而rc.final執(zhí)行的時候,以上的初始化操作已經(jīng)完成。
五.如何寫應(yīng)用的啟動腳本
example:開機自啟動smartlinkd(tina/package/allwinner/smartlinkd/files/smartlinkd.init)
1.方法一(特定格式要求)
(1)procd式
#!/bin/sh /etc/rc.common #本質(zhì)為script腳本,以#!開頭, 之后執(zhí)行/etc/rc.common
START=98 #開機啟動優(yōu)先級(序列) [數(shù)值越小, 越先啟動]
STOP=98 #關(guān)機停止優(yōu)先級(序列) [數(shù)值越小, 越先關(guān)閉]
USE_PROCD=1
PROG=smartlinkd
start_service() { #啟動函數(shù)
procd_open_instance
procd_set_param command $PROG -d
procd_close_instance
}
shutdown() {
echo shutdown
}
(2)Sys式
#!/bin/sh /etc/rc.common
START=98
STOP=98
PROG=smartlinkd
start() {
smartlinkd -d &
}
使用上述procd式和sys式腳本,既能兼容procd init啟動和busybox init的啟動方式。
另外如果使用的是busybox init的啟動方式,還需要在load_script.conf文件中換行添加內(nèi)容:smartlinkd
2.方法二(無特定格式要求)
創(chuàng)建rc.preboot或者rc.final腳本,添加啟動smartlinkd的內(nèi)容。
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
605瀏覽量
28613 -
RCS
+關(guān)注
關(guān)注
0文章
57瀏覽量
12993
發(fā)布評論請先 登錄
全志V853的ARM A7和RISC-V E907之間的通信

評論