• 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$ 
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    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))
    
    • 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

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

    LOCAL_MODULE := make_apollo_dir_symlink
    LOCAL_MODULE_CLASS := FAKE
    LOCAL_MODULE_TAGS := optional
    
    • 1
    • 2
    • 3

    3.关于LOCAL_POST_INSTALL_CMD

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

    4. 其他:rootdir

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

    5.最终效果图

    在这里插入图片描述

  • 相关阅读:
    运算符重载之日期类的实现
    docker 镜像 overview
    新书推荐:人-机器人交互导论
    《软件工程》期末重点复习笔记
    ②【Maven】从0上手Maven的安装与配置 - 最全教程 (下载 + 配置 + 环境变量 )
    拍案叫绝!阿里内部开源Spring Boot实战+进阶+面试攻略手慢无
    代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
    始祖双碳新闻 | 2022年8月10日碳中和行业早知道
    Docker comsul(注册中心)
    Java如何实现pdf转base64以及怎么反转?
  • 原文地址:https://blog.csdn.net/yyzsyx/article/details/126750513