1. init.rc文件結構
文件位置:
init.c : /system/core/init
init.rc : /system/core/rootdir
首先init.rc文件是以模塊爲單位的,每一個模塊裏的內容都是一塊兒執行的,模塊分爲3種類型:on、service、import。
咱們能夠看下init.rc文件是怎麼寫的:
1.importphp
import /init.usb.rc
android
import /init.${ro.hardware}.rc
shell
import /init.trace.rc函數
上面的內容很容易懂,就是導入其餘的.rc文件,因此當你在android源碼裏添加了產品並要添加開機啓動項時,就能夠往這裏添加。
2.on
通常on類型都是作一些chown、mkdir、write、export、symlink等簡單的shell指令
並且init.rc自己帶了些註釋,比較好懂。post
on post-fs-data
ui
# We chown/chmod /data again so because mount is run as root + defaults
spa
chown system system /data
rest
chmod 0771 /data
隊列
3.service
service類型的模塊表示一個可執行程序,例如:get
service bootanim /system/bin/bootanimation
class main
user graphics
group graphics
disabled
oneshot
bootanim爲模塊名
/system/bin/bootanimation爲可執行文件的路徑
class、user、group、onrestart這些關鍵字所對應的行是用來描述service一些特色。,不一樣的service有着不一樣的特色。
init.rc的結構大概就如此,那麼這個init.rc是如何運行起來的呢?這個就要看init.c文件了
首先咱們知道每一個on模塊都有本身的名字,如上邊post-fs-data。而後你能夠在init.c裏發現這樣一句:
action_for_each_trigger("post-fs-data", action_add_queue_tail);
這就把 」 on post-fs-data「開始的這樣一個section裏的全部命令加入到一個執行隊列,在將來的某個時候會順序執行隊列裏的命令,因此調用action_for_each_trigger()的前後決定了命令執行的前後。
那這個service何時被執行呢?
在某個on模塊的指令裏會存在「class_start」,例如:
class_start core
class_start main
on nonencrypted
class_start late_start
當執行到這裏是service模塊就會被調用。
最後關於init.c就不分析了,有興趣的朋友應該能夠經過函數名和註釋很好的理解裏面的內容是作些什麼的。
原文做者:android_fans
原文連接:http://forum.cubietech.com/forum.php?mod=viewthread&tid=1118&extra=page%3D1