android學習筆記--android啓動過程之init.rc文件淺析

1.  init.rc文件結構
文件位置:
init.c  : /system/core/init
init.rc  : /system/core/rootdir

首先init.rc文件是以模塊爲單位的,每一個模塊裏的內容都是一塊兒執行的,模塊分爲3種類型:on、serviceimport。
咱們能夠看下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

相關文章
相關標籤/搜索