日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android 7.0 init.rc的一点改变

發(fā)布時(shí)間:2025/4/16 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 7.0 init.rc的一点改变 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊打開鏈接

在Android?7之前的版本中,系統(tǒng)Native服務(wù),不管它們的可執(zhí)行文件位于系統(tǒng)什么位置都定義在根分區(qū)的init.*.rc文件中。這造成init*.rc文件臃腫龐大,給維護(hù)帶來(lái)了一些不便,而且其中定義的一些服務(wù)的二進(jìn)制文件根本不存在。

但在Android 7.0中,對(duì)該機(jī)制做了一些改變 。

  • 單一的init*.rc,被拆分,服務(wù)根據(jù)其二進(jìn)制文件的位置(/system,/vendor,/odm)定義到對(duì)應(yīng)分區(qū)的etc/init目錄中,每個(gè)服務(wù)一個(gè)rc文件。與該服務(wù)相關(guān)的觸發(fā)器、操作等也定義在同一rc文件中。?
    • /system/etc/init,包含系統(tǒng)核心服務(wù)的定義,如SurfaceFlinger、MediaServer、Logcatd等。
    • /vendor/etc/init, SOC廠商針對(duì)SOC核心功能定義的一些服務(wù)。比如高通、MTK某一款SOC的相關(guān)的服務(wù)。
    • /odm/etc/init,OEM/ODM廠商如小米、華為、OPP其產(chǎn)品所使用的外設(shè)以及差異化功能相關(guān)的服務(wù)。
  • 這樣的目錄結(jié)構(gòu)拆分,也與Android產(chǎn)品的開發(fā)流程相吻合,減輕了維護(hù)的負(fù)擔(dān)。下圖為Android7.0 模擬器/system/etc/init中定義的服務(wù)。

    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.提供一個(gè)編譯宏LOCAL_INIT_RC用于將服務(wù)相關(guān)的RC文件編譯到相應(yīng)位置。這能確保服務(wù)定義和服務(wù)的可執(zhí)行文件同時(shí)存在,避免了之前出現(xiàn)的服務(wù)對(duì)應(yīng)的可執(zhí)行程序不存在的問(wèn)題。?
    例如logcatd的Android.mk中,通過(guò)LOCAL_INIT_RC將logcatd對(duì)應(yīng)的logcatd.rc編譯到/system/etc/init目錄中。

    #system/core/logcat/Android.mk include $(CLEAR_VARS)LOCAL_MODULE := logpersist.start LOCAL_MODULE_TAGS := debug LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_INIT_RC := logcatd.rc LOCAL_MODULE_PATH := $(bin_dir) LOCAL_SRC_FILES := logpersist ALL_TOOLS := logpersist.start logpersist.stop logpersist.cat LOCAL_POST_INSTALL_CMD := $(hide) $(foreach t,$(filter-out $(LOCAL_MODULE),$(ALL_TOOLS)),ln -sf $(LOCAL_MODULE) $(TARGET_OUT)/bin/$(t);) include $(BUILD_PREBUILT)
    • 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執(zhí)行mount_all指令掛載分區(qū)時(shí),會(huì)加載這些目錄中的rc文件,并在合適的時(shí)機(jī)運(yùn)行這些服務(wù)和操作。下面位Android7.0模擬器的log。

    [ 0.912389] init: init first stage started! ---------加載根分區(qū)的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...-----------掛載分區(qū),加載附加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

    相關(guān)內(nèi)容可以參考android 7.0 system/etc/init/readme.txt.


    總結(jié)

    以上是生活随笔為你收集整理的Android 7.0 init.rc的一点改变的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。