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