【Android】【Android启动流程】【新建分区并挂载】

Android开机流程中涉及的调试与记录

新建分区并挂载

1、创建分区将要挂载的目录
这里可以选择多种方式去创建目录,如在根目录下创建,根目录下的dev、proc、data等均在此处创建,我们仿照添加想要添加的temp目录即可

# Put it here instead of in init.rc module definition,
# because init.rc is conditionally included.
#
# create some directories (some are mount points) and symlinks
LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \
    dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk  temp\
    linkerconfig second_stage_resources postinstall $(BOARD_ROOT_EXTRA_FOLDERS)); \
    ln -sf /system/bin $(TARGET_ROOT_OUT)/bin; \
    ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \
    ln -sf /data/user_de/0/com.android.shell/files/bugreports $(TARGET_ROOT_OUT)/bugreports; \
    ln -sfn /sys/kernel/debug $(TARGET_ROOT_OUT)/d; \
    ln -sf /storage/self/primary $(TARGET_ROOT_OUT)/sdcard
ifdef BOARD_USES_VENDORIMAGE
  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/vendor
else
  LOCAL_POST_INSTALL_CMD += ; ln -sf /system/vendor $(TARGET_ROOT_OUT)/vendor
endif
ifdef BOARD_USES_PRODUCTIMAGE
  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/product
else
  LOCAL_POST_INSTALL_CMD += ; ln -sf /system/product $(TARGET_ROOT_OUT)/product
endif
ifdef BOARD_USES_SYSTEM_EXTIMAGE
  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/system_ext
else
  LOCAL_POST_INSTALL_CMD += ; ln -sf /system/system_ext $(TARGET_ROOT_OUT)/system_ext
endif
ifdef BOARD_USES_METADATA_PARTITION
  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/metadata
endif

在device目录下的AndroidBoard.mk下创建目录。

@mkdir -p $(PRODUCT_OUT)/root/mnt/vendor/temp

自定义模块的Android.mk中创建目录。

include $(CLEAR_VARS)
LOCAL_MODULE := temp
LOCAL_TAGS := optional
LOCAL_CLASS := EXECUTABLES
LOCAL_MODULE_TARGET_ARCHS := x86_64
LOCAL_POST_INSTALL_CMD := $(hide) \
	mkdir -p $(TARGET_OUT_VENDOR)/temp
	...
include $(BUILD_PREBUILT) 

在init.rc中创建目录。
2、挂载分区
挂载的方式也可在不同的阶段进行,如下,添加的分区在/dev/block/下,将其挂载到创建的目录下,该文件是fstab文件,一般在device目录下。

system		/system		erofs	ro				wait,logical,first_stage_mount,slotselect
/dev/block/platform/soc@0/1d84000.ufs/by-name/userdata	/data		f2fs	nodev,noatime,nosuid,inlinecrypt,reserve_root=32768	latemount,wait,formattable,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,check,fscompress,checkpoint=fs
/dev/block/platform/soc@0/1d84000.ufs/by-name/userdata	/data		ext4	discard,noatime,noauto_da_alloc,data=ordered,user_xattr,barrier=1,inlinecrypt	latemount,wait,formattable,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota
/dev/block/platform/soc@0/1d84000.ufs/by-name/metadata	/metadata	ext4	noatime,nosuid,nodev,discard					wait,formattable,first_stage_mount,check
/dev/block/platform/soc@0/1d84000.ufs/by-name/misc /misc emmc defaults defaults
/devices/platform/soc@0/8804000.mmc/mmc_host/mmc*	auto	auto	defaults	voldmanaged=sdcard1:auto
vendor		/vendor		erofs	ro				wait,logical,first_stage_mount,slotselect
system_ext	/system_ext	erofs	ro				wait,logical,first_stage_mount,slotselect
product		/product	erofs	ro				wait,logical,first_stage_mount,slotselect
system_dlkm	/system_dlkm	erofs	ro				wait,logical,first_stage_mount,slotselect
vendor_dlkm	/vendor_dlkm	erofs	ro				wait,logical,first_stage_mount,slotselect
/dev/block/zram0					none	swap	defaults	zramsize=75%

/dev/block/by-name/temp        /mnt/vendor/temp    ext4    noatime,nosuid,nodev,	   defaults

也可以在init.rc中on post-fs中通过mount 命令挂载。

mount tmpfs tmpfs /temp nodev noexec nosuid mode=0775,gid=1000

3、配置分区表
到这里是不是有点奇怪,那我的/dev/block/by-name/temp这个块设备哪里来的,是怎么创建的。这里就涉及到分区表的创建,不同厂商,配置分区表的方式不同,高通需要配置partition.xml,intel需要在device目录下的gpt.ini文件配置,不同厂商的配置不同,这里不做分析。

;---------------------------------------------------------------------------------------------------
; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串
;---------------------------------------------------------------------------------------------------


;---------------------------------------------------------------------------------------------------
;                                   固件下载参数配置
;---------------------------------------------------------------------------------------------------
;***************************************************************************************************
;    mbr的大小, 以Kbyte为单位
;***************************************************************************************************
[mbr]
size = 16384

;***************************************************************************************************
;                                              分区配置
;
;
;  partition 定义范例:
;    [partition]                ;  //表示是一个分区
;    name        = USERFS2      ; //分区名称
;    size        = 16384        ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T
;    downloadfile = "123.fex"   ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径
;    keydata     = 1            ; //私有数据分区,重新量产数据将不丢失
;    encrypt     = 1            ; //采用加密方式烧录,将提供数据加密,但损失烧录速度
;    user_type   = ?            ; //私有用法
;    verify      = 1            ; //要求量产完成后校验是否正确
;
; 注:1、name唯一, 不允许同名
;     2、name最大12个字符
;     3、size = 0, 将创建一个无大小的空分区
;     4、为了安全和效率考虑,分区大小最好保证为16M字节的整数倍
;***************************************************************************************************
[partition_start]
;------------------------------>mmcblk0p2/nand0p2
[partition]
    name         = bootloader
    size         = 65536
    downloadfile = "boot-resource.fex"
    user_type    = 0x8000

;------------------------------>mmcblk0p3/nand0p3
[partition]
    name         = env
    size         = 32768
    downloadfile = "env.fex"
    user_type    = 0x8000

;------------------------------>mmcblk0p4/nand0p4
[partition]
    name         = boot
    size         = 65536
    downloadfile = "boot.fex"
    user_type    = 0x8000

;------------------------------>mmcblk0p5/nand0p5
[partition]
    name         = system
    size         = 2868192
    downloadfile = "system.fex"
    user_type    = 0x8000

;------------------------------>mmcblk0p6/nand0p6
[partition]
    name         = vendor
    size         = 491520
    downloadfile = "vendor.fex"
    user_type    = 0x8000

;------------------------------>mmcblk0p7/nand0p7
[partition]
    name         = misc
    size         = 32768
    user_type    = 0x8000

;------------------------------>mmcblk0p8/nand0p8
[partition]
    name         = recovery
    size         = 65536
    downloadfile = "recovery.fex"
    user_type    = 0x8000

;------------------------------>mmcblk0p9/nand0p9
[partition]
    name         = cache
    size         = 1048576
    user_type    = 0x8000

;------------------------------>store encryptable
;------------------------------>mmcblk0p10/nand0p10
[partition]
    name         = metadata
    size         = 32768
    user_type    = 0x8000

;------------------------------>data image private
;------------------------------>mmcblk0p11/nand0p11
[partition]
    name         = private
    size         = 32768
    ro           = 0
    user_type    = 0x8000

;------------------------------>frp
;------------------------------>mmcblk0p12/nand0p12
[partition]
    name         = frp
    size         = 1024
    ro           = 0
    user_type    = 0x8000
    keydata      = 0x8000

;------------------------------>empty
;------------------------------>mmcblk0p13/nand0p13
[partition]
    name         = empty
    size         = 31744
    ro           = 0
    user_type    = 0x8000

;------------------------------>device tree overlay
;------------------------------>mmcblk0p14/nand0p14
[partition]
    name         = dto
    size         = 32768
    user_type    = 0x8000

;------------------------------>media_data
;------------------------------>mmcblk0p15/nand0p15
[partition]
    name         = media_data
    size         = 32768
    user_type    = 0x8000
;add by tuliyuan for new block device
;------------------------------>mmcblk0p16/nand0p16
[partition]
    name         = vtechfs              -->块设备名称
    downloadfile = "vtechfs.fex"  -->块设备对应的img
    size         = 65536          -->块设备大小
    user_type    = 0x8000   -->块设备类型

;------------------------------>UDISK
;------------------------------>mmcblk0p1/nand0p1
[partition]
    name         = UDISK
    user_type    = 0x8100

4、配置selinux权限
这里主要配置file_contexts,也可以在init.rc中启动阶段修改chown,或者在uevent.rc中配置权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值