Android 7.0 init.rc的一点改变
生活随笔
收集整理的這篇文章主要介紹了
Android 7.0 init.rc的一点改变
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
點擊打開鏈接
在Android?7之前的版本中,系統Native服務,不管它們的可執行文件位于系統什么位置都定義在根分區的init.*.rc文件中。這造成init*.rc文件臃腫龐大,給維護帶來了一些不便,而且其中定義的一些服務的二進制文件根本不存在。
但在Android 7.0中,對該機制做了一些改變 。
- /system/etc/init,包含系統核心服務的定義,如SurfaceFlinger、MediaServer、Logcatd等。
- /vendor/etc/init, SOC廠商針對SOC核心功能定義的一些服務。比如高通、MTK某一款SOC的相關的服務。
- /odm/etc/init,OEM/ODM廠商如小米、華為、OPP其產品所使用的外設以及差異化功能相關的服務。
這樣的目錄結構拆分,也與Android產品的開發流程相吻合,減輕了維護的負擔。下圖為Android7.0 模擬器/system/etc/init中定義的服務。
david@daviddeMBP:~$ adb shell generic_x86:/ $ su generic_x86:/ # cd /system/etc/init generic_x86:/system/etc/init # ls atrace.rc gatekeeperd.rc mediacodec.rc rild.rc audioserver.rc init-debug.rc mediadrmserver.rc servicemanager.rc bootanim.rc installd.rc mediaextractor.rc surfaceflinger.rc bootstat.rc keystore.rc mediaserver.rc uncrypt.rc cameraserver.rc lmkd.rc mtpd.rc vdc.rc debuggerd.rc logcatd.rc netd.rc vold.rc drmserver.rc logd.rc perfprofd.rc dumpstate.rc mdnsd.rc racoon.rc generic_x86:/system/etc/init #- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
2.提供一個編譯宏LOCAL_INIT_RC用于將服務相關的RC文件編譯到相應位置。這能確保服務定義和服務的可執行文件同時存在,避免了之前出現的服務對應的可執行程序不存在的問題。?
例如logcatd的Android.mk中,通過LOCAL_INIT_RC將logcatd對應的logcatd.rc編譯到/system/etc/init目錄中。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
3.在init執行mount_all指令掛載分區時,會加載這些目錄中的rc文件,并在合適的時機運行這些服務和操作。下面位Android7.0模擬器的log。
[ 0.912389] init: init first stage started! ---------加載根分區的rc文件 [ 0.996447] init: waitpid failed: No child processes [ 0.996558] init: (Loading properties from /default.prop took 0.00s.) [ 0.997274] init: (Parsing /init.environ.rc took 0.00s.) [ 0.997457] init: (Parsing /init.usb.rc took 0.00s.) [ 0.997561] init: (Parsing /init.ranchu.rc took 0.00s.) [ 0.997823] init: (Parsing /init.usb.configfs.rc took 0.00s.) [ 0.997876] init: (Parsing /init.zygote32.rc took 0.00s.) [ 0.997895] init: (Parsing /init.rc took 0.00s.) [ 1.121126] init: Starting service 'ueventd'... [ 1.121422] init: Waiting for /dev/.coldboot_done...-----------掛載分區,加載附加rc文件 [ 1.384113] EXT4-fs (vdc): Ignoring removed nomblk_io_submit option [ 1.386155] EXT4-fs (vdc): mounted filesystem with ordered data mode. Opts: nomblk_io_submit,errors=panic [ 1.386165] SELinux: initialized (dev vdc, type ext4), uses xattr [ 1.386179] fs_mgr: __mount(source=/dev/block/vdc,target=/data,type=ext4)=0 [ 1.387397] init: (Parsing /system/etc/init/atrace.rc took 0.00s.) [ 1.387762] init: (Parsing /system/etc/init/audioserver.rc took 0.00s.) [ 1.388078] init: (Parsing /system/etc/init/bootanim.rc took 0.00s.) [ 1.388424] init: (Parsing /system/etc/init/bootstat.rc took 0.00s.) [ 1.388805] init: (Parsing /system/etc/init/cameraserver.rc took 0.00s.) [ 1.389125] init: (Parsing /system/etc/init/debuggerd.rc took 0.00s.) [ 1.389443] init: (Parsing /system/etc/init/drmserver.rc took 0.00s.) [ 1.389781] init: (Parsing /system/etc/init/dumpstate.rc took 0.00s.) [ 1.392698] init: (Parsing /system/etc/init/gatekeeperd.rc took 0.00s.) [ 1.393060] init: (Parsing /system/etc/init/init-debug.rc took 0.00s.) [ 1.393361] init: (Parsing /system/etc/init/installd.rc took 0.00s.) [ 1.393674] init: (Parsing /system/etc/init/keystore.rc took 0.00s.) [ 1.393992] init: (Parsing /system/etc/init/lmkd.rc took 0.00s.)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
相關內容可以參考android 7.0 system/etc/init/readme.txt.
頂總結
以上是生活随笔為你收集整理的Android 7.0 init.rc的一点改变的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux入门教程:Linux权限管理
- 下一篇: 关于Android Service真正的