導航:首頁 > 操作系統 > 修改androidinitrc

修改androidinitrc

發布時間:2022-08-07 06:29:20

android mediaserver怎麼啟動

mediaserver 開機的時候就啟動,說具體一點是在initrc裡面啟動的,這裡面還啟動了很多其他的server

⑵ Android怎麼讓安裝的apk通過jni調用腳本時運行在root許可權下

解決方法是在manifest中將AP提升至system許可權,給apk打標簽,然後在initrc中將/sys/下面對應的文件chown成為systemowner,就可以了。

⑶ android源碼怎麼編譯生成recovery.img

recovery.img生成過程
L630-L637 依賴關系
(From: build/core/Makefile)630 $(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) /631 $(INSTALLED_RAMDISK_TARGET) /632 $(INSTALLED_BOOTIMAGE_TARGET) /633 $(recovery_binary) /634 $(recovery_initrc) $(recovery_kernel) /635 $(INSTALLED_2NDBOOTLOADER_TARGET) /636 $(recovery_build_prop) $(recovery_resource_deps) /637 $(RECOVERY_INSTALL_OTA_KEYS)

INSTALLED_RECOVERYIMAGE_TARGET 為我們的編譯目標:

584 INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img

它依賴很多其它目標:
1.MKBOOTFS, MINIGZIP, MKBOOTIMG,PC端工具軟體:(From build/core/config.mk)265 MKBOOTFS := $(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX)266 MINIGZIP := $(HOST_OUT_EXECUTABLES)/minigzip$(HOST_EXECUTABLE_SUFFIX)267 MKBOOTIMG := $(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX)

2.INSTALLED_RAMDISK_TARGET,標准根文件系統 ramdisk.img:

326 BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img328 # We just build this directly to the install location.329 INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET) 3.INSTALLED_BOOTIMAGE_TARGET, 即boot.img,標准內核及標准根文件系統:362 INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img

4. recovery_binary, Recovery可執行程序,源碼位於:bootable/recovery

590 recovery_binary := $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery

5. recovery_initrc,recovery模式的init.rc, 位於 bootable/recovery/etc/init.rc

586 recovery_initrc := $(call include-path-for, recovery)/etc/init.rc

6. recovery_kernel, recovery 模式的kernel, 同標准內核

587 recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system

7.INSTALLED_2NDBOOTLOADER_TARGET,我們不用。

8. recovery_build_prop, recovery 模式的build.prop, 同標准模式。589 recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET)

9. recovery_resource_deps, recovery 模式使用的res, 位於:recovery/custom/{proct_name}/res, 以及設備自定義部分(我們沒用到)

591 recovery_resources_common := $(call include-path-for, recovery)/custom/$(TARGET_PRODUCT)/res592 recovery_resources_private := $(strip $(wildcard $(TARGET_DEVICE_DIR)/recovery/res))593 recovery_resource_deps := $(shell find $(recovery_resources_common) 594 $(recovery_resources_private) -type f) 10. RECOVERY_INSTALL_OTA_KEYS, ota 密鑰:

618 # Generate a file containing the keys that will be read by the619 # recovery binary.620 RECOVERY_INSTALL_OTA_KEYS := /621 $(call intermediates-dir-for,PACKAGING,ota_keys)/keysL638-L655 准備內容
638 @echo ----- Making recovery image ------639 rm -rf $(TARGET_RECOVERY_OUT)640 mkdir -p $(TARGET_RECOVERY_OUT)641 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)642 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/etc643 mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/tmp

准備recovery目錄:out/target/proct/{proct_name}/recovery 及其子目錄:

./root

./root/etc

./root/tmp644 echo Copying baseline ramdisk...645 cp -R $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT)646 echo Modifying ramdisk contents...647 rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res

從標准根文件系統拷貝所有文件, 刪除其res 目錄。

648 cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/649 cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ 拷貝recovery 模式的核心文件 init.rc 及 recovery 650 cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/651 $(foreach item,$(recovery_resources_private), /652 cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/)653 cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys 拷貝資源文件及密鑰文件。 654 cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) /655 > $(TARGET_RECOVERY_ROOT_OUT)/default.prop 生成屬性文件 default.prop, 它包含了標准根文件系統的default.prop (out/target/proct/{proct_name}/root/default.prop)以及system分區的build.prop (out/target/proct/{proct_name}/system/build.prop) L656-L661 最終生成recovery.img
656 $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk) 壓縮recovery根文件系統 657 build/quacomm/mkimage $(PRODUCT_OUT)/ramdisk-recovery.img RECOVERY > $(PRODUCT_OUT)/ramdisk_recovery.img 加一個標識頭(RECOVERY) 658 mv $(PRODUCT_OUT)/ramdisk_recovery.img $(PRODUCT_OUT)/ramdisk-recovery.img659 $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) --output $@660 @echo ----- Made recovery image -------- $@661 $(hide) $(call assert-max-image-size,$@,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw)

和內核一起,生成recovery.img附:Recovery 根文件系統目錄結構


$ tree

.

├── advanced_meta_init.rc

├── data

├── default.prop

├── dev

├── etc

├── init

├── init.factory.rc

├── init.goldfish.rc

├── init.quacomm.rc

├── init.rc

├── meta_init.rc

├── proc

├── res

│ ├── images

│ │ ├── icon_error.png

│ │ ├── icon_installing.png

│ │ ├── indeterminate1.png

│ │ ├── indeterminate2.png

│ │ ├── indeterminate3.png

│ │ ├── indeterminate4.png

│ │ ├── indeterminate5.png

│ │ ├── indeterminate6.png

│ │ ├── progress_empty.png

│ │ └── progress_fill.png

│ └── keys

├── sbin

│ ├── adbd

│ ├── advanced_meta_init

│ ├── meta_init

│ ├── meta_tst

│ └── recovery

├── sys

├── system

└── tmp

⑷ Android:怎麼獲取當前文件(類)所在的目錄的完整路徑

android的硬存儲是按照linux系統規則來劃分的,用於存儲客戶信息和客戶安裝的應用的是/data分區,你如果使用的是c程序的話,應該是在/data/app之類的下面,我手頭沒有板子沒法給你查。文件夾是google約定俗成的,不同廠家應該都是一樣的路徑。如果是廠家定製的應用則是在/system分區下,路徑應該是/system/app下。

如果你是一個android系統學習者,而不是應用開發者的話,我建議看看以下system/etc/initrc對於你會有很大的幫助。

⑸ android2.3系統laaboo手機recovery模式怎麼選擇

Recovery Binary 是 Android 進入 Recovery 模式所運行的程序,實現了 Recovery 模式下的功能。它由目錄
bootable/recovery 下的源代碼編譯生成。頭文件 bootable/recovery/recovery_ui.h 定義了 Recovery UI
的介面,bootable/recovery/default_recovery_ui.c 是其默認實現,每個設備可以有自己不同的實現,然後通過變數
TARGET_RECOVERY_UI_LIB 來指定,否則使用默認實現。

# bootable/recovery/Android.mk

ifeq ($(TARGET_RECOVERY_UI_LIB),)

LOCAL_SRC_FILES + = default_recovery_ui.c

else

LOCAL_STATIC_LIBRARIES + = $(TARGET_RECOVERY_UI_LIB)

endif

Recovery Image:

Recovery Image 的生成規則在文件 build/core/Makefile 中定義,具體分析如下:

# build/core/Makefile

# -----------------------------------------------------------------

# Recovery image

# If neither TARGET_NO_KERNEL nor TARGET_NO_RECOVERY are true

ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY)
$(BUILD_TINY_ANDROID)))

INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img

recovery_initrc := $(call include-path-for, recovery)/etc/init.rc

recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery
system

recovery_ramdisk := $(PRODUCT_OUT)/ramdisk-recovery.img

recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET)

recovery_binary := $(call
intermediates-dir-for,EXECUTABLES,recovery)/recovery

recovery_resources_common := $(call include-path-for, recovery)/res

recovery_resources_private := $(strip
$(wildcard$(TARGET_DEVICE_DIR)/recovery/res))

recovery_resource_deps := $(shell find $(recovery_resources_common) \

$(recovery_resources_private) -type f)

recovery_fstab := $(strip $(wildcard
$(TARGET_DEVICE_DIR)/recovery.fstab))

recovery_mmc_fstab := $(strip
$(wildcard$(TARGET_DEVICE_DIR)/recovery_mmc.fstab))

ifeq ($(recovery_resources_private),)

$(info No private recovery resources for TARGET_DEVICE
$(TARGET_DEVICE))

endif

ifeq ($(recovery_fstab),)

$(info No recovery.fstab for TARGET_DEVICE $(TARGET_DEVICE))

endif

INTERNAL_RECOVERYIMAGE_ARGS := \

$(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \

--kernel $(recovery_kernel) \

--ramdisk $(recovery_ramdisk)

# Assumes this has already been stripped

ifdef BOARD_KERNEL_CMDLINE

INTERNAL_RECOVERYIMAGE_ARGS += --cmdline "$(BOARD_KERNEL_CMDLINE)"

endif

ifdef BOARD_KERNEL_BASE

INTERNAL_RECOVERYIMAGE_ARGS += --base $(BOARD_KERNEL_BASE)

endif

BOARD_KERNEL_PAGESIZE := $(strip $(BOARD_KERNEL_PAGESIZE))

ifdef BOARD_KERNEL_PAGESIZE

INTERNAL_RECOVERYIMAGE_ARGS += --pagesize $(BOARD_KERNEL_PAGESIZE)

endif

INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img

kernel: $(INSTALLED_BOOTIMAGE_TARGET)

.PHONY: kernel

# Keys authorized to sign OTA packages this build will accept. The

# build always uses test-keys for this; release packaging tools will

# substitute other keys for this one.

OTA_PUBLIC_KEYS := $(SRC_TARGET_DIR)/proct/security/testkey.x509.pem

# Generate a file containing the keys that will be read by the

# recovery binary.

RECOVERY_INSTALL_OTA_KEYS := \

$(call intermediates-dir-for,PACKAGING,ota_keys)/keys

DUMPKEY_JAR := $(HOST_OUT_java_LIBRARIES)/mpkey.jar

$(RECOVERY_INSTALL_OTA_KEYS): PRIVATE_OTA_PUBLIC_KEYS :=
$(OTA_PUBLIC_KEYS)

$(RECOVERY_INSTALL_OTA_KEYS): $(OTA_PUBLIC_KEYS) $(DUMPKEY_JAR)

@echo "DumpPublicKey: $@ <= $(PRIVATE_OTA_PUBLIC_KEYS)"

@rm -rf $@

@mkdir -p $(dir $@)

java -jar $(DUMPKEY_JAR) $(PRIVATE_OTA_PUBLIC_KEYS) > $@

$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP)
\

$(INSTALLED_RAMDISK_TARGET) \

$(INSTALLED_BOOTIMAGE_TARGET) \

$(recovery_binary) \

$(recovery_initrc) $(recovery_kernel) \

$(INSTALLED_2NDBOOTLOADER_TARGET) \

$(recovery_build_prop) $(recovery_resource_deps) \

$(recovery_fstab) \

$(RECOVERY_INSTALL_OTA_KEYS)

/* 以正常系統的根文件系統為基礎構建 Recovery 的根文件系統 */

@echo ----- Making recovery image ------

rm -rf $(TARGET_RECOVERY_OUT)

mkdir -p $(TARGET_RECOVERY_OUT)

mkdir -p $(TARGET_RECOVERY_ROOT_OUT)

mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/etc

mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/tmp

echo Copying baseline ramdisk...

cp -R $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT)

/* 刪除所有的 Init 腳本,使用 Recovery 特定的 Init 腳本 */

rm $(TARGET_RECOVERY_ROOT_OUT)/init*.rc

echo Modifying ramdisk contents...

cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/

/* 添加 Recovery Binary */

cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/

/* 添加通用的和設備特定的 Recovery 資源 */

cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/

$(foreach item,$(recovery_resources_private), \

cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/)

/* 添加設備特定的文件系統表 */

$(foreach item,$(recovery_fstab), \

cp -f $(item) $(TARGET_RECOVERY_ROOT_OUT)/etc/recovery.fstab)

$(foreach item,$(recovery_mmc_fstab), \

cp -f $(item) $(TARGET_RECOVERY_ROOT_OUT)/etc/recovery_mmc.fstab)

/* 內嵌驗證簽名的公鑰 */

cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys

/* 生成 Recovery 模式的默認屬性文件 */

cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) \

> $(TARGET_RECOVERY_ROOT_OUT)/default.prop

/* 生成 Recovery 的根文件系統 ramdisk-recovery.img */

$(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) >
$(recovery_ramdisk)

/* 把正常系統的內核跟 ramdisk-recovery.img 打包生成 Recovery Image */

$(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) --output $@

@echo ----- Made recovery image -------- $@

/* 驗證生成的 Recovery Image 有沒有超出 Recovery 分區的大小 */

$(hide) $(call
assert-max-image-size,$@,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw)

else

INSTALLED_RECOVERYIMAGE_TARGET :=

endif

.PHONY: recoveryimage

recoveryimage: $(INSTALLED_RECOVERYIMAGE_TARGET)

Recovery Init Script:

從上面的分析可以看出 recovery.img 和 boot.img 的區別不大,主要是 init 腳本不一樣,recovery 的 init
腳本相對簡單,系統起來後只運行 ueventd、recovery、adbd 三個服務。

# bootable/recovery/etc/init.rc

on early-init

start ueventd

on init

export PATH /sbin

export ANDROID_ROOT /system

export ANDROID_DATA /data

export EXTERNAL_STORAGE /sdcard

symlink /system/etc /etc

mkdir /sdcard

mkdir /system

mkdir /data

mkdir /cache

mount /tmp /tmp tmpfs

on boot

ifup lo

hostname localhost

domainname localdomain

class_start default

service ueventd /sbin/ueventd

critical

service recovery /sbin/recovery

service adbd /sbin/adbd recovery

disabled

on property:persist.service.adb.enable=1

start adbd

on property:persist.service.adb.enable=0

stop adbd

Android <----> Recovery Binary <----> Bootloader:

有時候 Android 需要不同的模式互相協助來完成一項任務,這樣不同模式之間就要有一種機制來交換信息。Recovery Binary 和
Bootloader 之間是通過 misc 分區來傳遞信息的,如果是 MTD 設備,則使用 misc 分區的第二個頁面,如果是塊設備,則使用 misc
分區的第一塊,交換的信息通過如下結構體封裝。Recovery Binary 和 Android 之間是通過 cache
分區下的如下幾個固定文件來傳遞信息的。

/* Recovery Binary <----> Bootloader */

struct bootloader_message {

char command[ 32];

char status[ 32];

char recovery[ 1024];

};

/* Recovery Binary <----> Android */

/cache/recovery/command

/cache/recovery/intent

/cache/recovery/log

/cache/recovery/last_log

Updater Binary:

Updater Binary 是 OTA package 的安裝程序,被打包到 OTA package 中一起發布。Updater Binary
的源代碼位於目錄 bootable/recovery/updater 中。每個設備都可以為 Updater Binary
添加自己特定的擴展,然後通過變數TARGET_RECOVERY_UPDATER_LIBS 和
TARGET_RECOVERY_UPDATER_EXTRA_LIBS 來指定。

# bootable/recovery/updater/Android.mk

LOCAL_STATIC_LIBRARIES += $(TARGET_RECOVERY_UPDATER_LIBS) \

$(TARGET_RECOVERY_UPDATER_EXTRA_LIBS)

LOCAL_STATIC_LIBRARIES + = libapplypatch libedify libmttils libminzip
libz

LOCAL_STATIC_LIBRARIES + = libmincrypt libbz

LOCAL_STATIC_LIBRARIES + = libcutils libstdc++ libc

LOCAL_C_INCLUDES + = $(LOCAL_PATH)/..

# Each library in TARGET_RECOVERY_UPDATER_LIBS should have a function

# named "Register_()". Here we emit a little C function that

# gets #included by updater.c. It calls all those registration

# functions.

# Devices can also add libraries to TARGET_RECOVERY_UPDATER_EXTRA_LIBS.

# These libs are also linked in with updater, but we don't try to call

# any sort of registration function for these. Use this variable for

# any subsidiary static libraries required for your registered

# extension libs.

inc := $(call
intermediates-dir-for,PACKAGING,updater_extensions)/register.inc

# During the first pass of reading the makefiles, we mp the list of

# extension libs to a temp file, then that to the ".list" file if

# it is different than the existing .list (if any). The register.inc

# file then uses the .list as a prerequisite, so it is only rebuilt

# (and updater.o recompiled) when the list of extension libs changes.

junk := $(shell mkdir -p $(dir $(inc));\

echo $(TARGET_RECOVERY_UPDATER_LIBS) > $(inc).temp;\

diff -q $(inc).temp $(inc).list || cp -f $(inc).temp $(inc).list)

$(inc) : libs := $(TARGET_RECOVERY_UPDATER_LIBS)

$(inc) : $(inc).list

$(hide) mkdir -p $(dir $@)

$(hide) echo "" > $@

$(hide) $(foreach lib,$(libs),echo "extern void Register_$(lib)(void);"
>> $@)

$(hide) echo "void RegisterDeviceExtensions() {" >> $@

$(hide) $(foreach lib,$(libs),echo " Register_$(lib)();" >> $@)

$(hide) echo "}" >> $@

$(call intermediates-dir-for,EXECUTABLES,updater)/updater.o : $(inc)

LOCAL_C_INCLUDES += $(dir $(inc))

閱讀全文

與修改androidinitrc相關的資料

熱點內容
打開其它app微信怎麼收不到 瀏覽:443
安卓游戲耳機怎麼戴 瀏覽:14
不越獄怎麼去除app廣告 瀏覽:174
ipadminipdf閱讀 瀏覽:504
文件夾無限制壓縮會不會降低內存 瀏覽:410
榮耀怎樣創建文件夾 瀏覽:629
如何用本機登陸遠程伺服器地址 瀏覽:680
黃小鴨解壓文具盒 瀏覽:670
女程序員的轉行方法 瀏覽:881
東風啟辰車聯網安裝文件夾 瀏覽:524
華為怎麼設置app時間鎖 瀏覽:660
後宮app視頻怎麼下載 瀏覽:525
如何把圖片轉換從PDF格式 瀏覽:259
重寫和重載的區別java 瀏覽:234
expressvpnandroid 瀏覽:84
儲存卡被加密怎麼解除 瀏覽:169
地球怎麼壓縮直徑 瀏覽:780
金鏟鏟之戰伺服器爆滿怎麼進 瀏覽:160
同仁堂pdf 瀏覽:935
如何編譯原理課程教材 瀏覽:730