Android在rootdir根目录创建自定义目录和挂载点的方法

Posted 阿迷创客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android在rootdir根目录创建自定义目录和挂载点的方法相关的知识,希望对你有一定的参考价值。

文章目录

1.需求描述

在制作ROM时,经常需要创建自己的根目录下的挂载点,比如本文,需要在android的根文件系统,即ramdisk.img,系统运行时的根路径下,创建一个/factory/bin目录,如下详细介绍做法。

创建后效果如下图

szhou@bcsrv01:~/Disk4t/szhou/mt9269_works/android/out/target/product/mt5862_bga_1g/root$ tree -L 2
.
├── acct
├── bin
├── bugreports -> /data/user_de/0/com.android.shell/files/bugreports
├── cache
├── charger -> /sbin/charger
├── config
├── d -> /sys/kernel/debug
├── data
├── default.prop -> system/etc/prop.default
├── dev
├── etc -> /system/etc
├── factory              <----------------  创建 /factory/bin
│   └── bin              <----------------
├── init
├── init.environ.rc
├── init.rc
├── init.recovery.mt5862.rc
├── init.usb.configfs.rc
├── init.usb.rc
├── init.zygote32.rc
├── mnt
├── odm
├── oem
├── proc
├── product -> /system/product
├── sbin
├── sdcard -> /storage/self/primary
├── storage
├── sys
├── system
├── ueventd.rc
└── vendor

18 directories, 31 files
szhou@bcsrv01:~/Disk4t/szhou/mt9269_works/android/out/target/product/mt5862_bga_1g/root$ 

2. 思路及实现方法

  • 需创建的目录是在编译过程中创建的,之后才进一步打包成img分区镜像文件,所以需要到mk文件中去查找合适的位置和方法。如下很容易就找到了一个Android.mk。

  • 在LOCAL_POST_INSTALL_CMD 末尾添加 mkdir -p $(TARGET_ROOT_OUT)/factory/bin;

文件路径:android\\device\\mediatek\\mt5862\\fusion\\Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := make_apollo_dir_symlink
LOCAL_MODULE_CLASS := FAKE
LOCAL_MODULE_TAGS := optional

# preload rootfs tv folders
LOCAL_POST_INSTALL_CMD += \\
    mkdir -p $(TARGET_OUT_VENDOR)/bin; \\
    ln -sf /mnt/vendor/linux_rootfs/lib/ld-linux.so.3 $(TARGET_OUT_VENDOR)/bin/linker; \\
    ln -sf /vendor/tvconfig/config $(TARGET_OUT_VENDOR)/config; \\
    mkdir -p $(TARGET_OUT_ETC); \\
    ln -sf /data/vendor/tmp/resolv.conf $(TARGET_OUT_ETC)/resolv.conf; \\
    mkdir -p $(PRODUCT_OUT)/root/bin; \\
    ln -sf /sbin/mksh $(PRODUCT_OUT)/root/bin/sh; \\
    ln -sf /system/bin/rm $(PRODUCT_OUT)/root/bin/rm; \\
    ln -sf /system/bin/true $(PRODUCT_OUT)/root/bin/true; \\
    mkdir -p $(TARGET_ROOT_OUT)/factory/bin;

……省略……

include $(BUILD_SYSTEM)/base_rules.mk

$(LOCAL_BUILT_MODULE):
	$(hide) echo "Fake: $@"
	$(hide) mkdir -p $(dir $@)
	$(hide) touch $@
PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES))

从此mk文件可知,此文件及时为部署而做的一个伪module,用于创建链接和目录

LOCAL_MODULE := make_apollo_dir_symlink
LOCAL_MODULE_CLASS := FAKE
LOCAL_MODULE_TAGS := optional

3.关于LOCAL_POST_INSTALL_CMD

可以在系统完成源码编译,以及INSTALL部署后,继续执行此CMD包含的命令语句

4. 其他:rootdir

文件:android\\system\\core\\rootdir\\Android.mk
对于非本文所涉及的MTK平台,可以在此文件中追加修改,或者自己创建一个mk文件

5.最终效果图

以上是关于Android在rootdir根目录创建自定义目录和挂载点的方法的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件Gradle 自定义 Plugin 插件 ① ( buildSrc 目录中实现 Gradle 插件 | 创建 src/main/groovy 源码目录并编译 )

Android使用自定义字体

android自定义gradle插件之当前项目使用

在 iOS 中查看自定义目录的内容

Android 中添加自定义应用程序

Android 怎么自定义共享库