Android 啟動分析-init進程&init.rc[轉]

來源:互聯網
上載者:User
init.rc解析與chmod 改變檔案屬性沒用  

轉自:http://h1372865100.blog.163.com/blog/static/2104291032012929114132327/ android的init.rc文法是專屬的,可以說是一種語言吧。

       init.rc的文法分為行為(Actions),、命令(Commands) 、服務(Services)、選項(Options)

類別

名稱

描述

SECTION on 觸發條件
同上.. service 解析service
COMMAND chdir 更改當前工作目錄
同上.. chroot 更改參考的根目錄位置
.. class_start 啟動某個設定了class名稱的服務
.. class_stop 停止某個設定了class名稱的服務
.. domainname 網域名稱
.. exec 調用程式並轉移進程
.. export 提交變數
.. hostname 主機名稱
.. ifup 啟用網卡
.. insmod 掛載模組
.. import 引入配置,比如etc下的一些rc檔案,和java中的import差不多
.. mkdir 建立目錄
.. mount 掛載檔案系統
.. setkey 從源碼看,應該是設定一個命令的關鍵字縮寫,比如可以將domainname映射為dn
.. setprop 設定一個屬性
.. setrlimit

設定當前程式可以開啟的最大檔案數到系統規定程式可以開啟的最大檔案數

.. start 啟動服務
.. stop 停止服務
.. trigger 不清楚,難道是自訂觸發器。
.. symlink 建立符號連結
.. sysclktz

設定基準時間

.. wait 等待檔案準備好。Linux中這是進程調度的函數
.. write 向檔案、裝置寫個什麼東西。肯定不是傳訊息的那個wirte
.. copy 不解釋
.. chown 更改所有者
.. chmod 更改許可權
.. loglevel Log輸出層級,低於這個層級的就輸出
.. restart 重啟服務
OPTION capability 能力,也就是系統對進程的一種許可權控制。
同上.. class 設定class name
.. console 啟用控制台
.. critical 是否關鍵,也就是4分鐘之內重啟超過4次的話,重啟之後就進入recovery模式
.. disabled 不隨class自動啟動
.. group 組歸屬
.. keycodes 不明白。。。。。
.. oneshot 只啟動一次,意外退出後不必重啟
.. onrestart 重啟時
.. setenv 增加環境變數
.. socket 申請socket資源
.. user 使用者歸屬
.. ioprio io調度優先順序

(很多屬性與命令用法都與linux中同名命令差球不多)

       init是分段(section)解析init.rc的,在keywords.h中可以查看關鍵字的定義。init是以什麼標誌來分段解析init.rc呢。結合init.rc的內容,可以看出,分區段標記是以on 和 service來標記的。下面詳細說明。

    on   啥時候幹什麼

        on屬於行為。

      on early-init   

             init之前、載入完所有rc檔案後即執行,在miui的rom中,init.rc在early-init執行的是start ueventd,根據keywords.h的定義,start是個命令(COMMAND)。

             這裡順便說下ueventd,android中底層(一般指驅動)通知上層的事件,用的是uevent,java層通過觀察者模式實現,用到的類為 UEventObserver,使用intent來傳遞;native層用的是android_os_UEventObserver.cpp,使用uevent.c通過socket傳遞。當然,這是framework及以下的層面,一般開發不經常用到,更何況這幾個類都沒有被暴露出來。

      on init

             載入propety各項屬性檔案之前執行,在init變為propety service之前都屬於init階段。            

      on early-boot

             啟動屬性service後即執行。

      on boot

             boot的時候執行。

      on property:xxxxx=x

             當某個屬性設定為預期值時執行。 

 

     關於init.rc,其實結合/src/system/core/init/* 源碼和init.rc檔案來看,會明白許多。

 

=========

有時需要添加你自己增加的檔案到root的時候,然後在init.rc修改檔案的屬性探索沒有用,我也是折騰了半天,在網上看到有一個文章:

create a script somewhere, for example, /system/bin/mymod.rc
#!/system/bin/sh
   chmod 0777 /dev/mynode 

 add the following in /init.rc:
  service mymod /system/bin/mymod.rc
    oneshot

(注意表添加錯了位置/system/bin/,是組建檔案系統的system目錄,不是root下的system目錄)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.