为什么要新增分区?

项目开发中,需要存储一些数据,不想被在系统刷机或者重置的时候被清理掉,一般会根据需求新增自己的persist 分区,oem 分区等.

分区方式

可以是挂载的分区,类似于System.img,有自己目录,通过添加权限让用户可以通过文件系统访问到.

也可以是非挂载的,用于存储文件信息,普通用户看不到相关目录结构.

如何新增

高通平台

1,cp 侧分区表新增分区

partition.xml

   <partition label="oem" size_in_kb="4" type="guid 号" bootable="false" readonly="false" filename="" /><partition label="userdata" size_in_kb="4194304" type="1B81E7E6-F50D-419B-A739-2AEEF8DA3335" bootable="false" readonly="false" filename="userdata.img" sparse="true"/>

lable:分区名,长度小于17字符,否则会导致bootloader无法开机(同事开发经验)

size_in_kb:分区大小,单位是kb

type:UUID https://www.uuidgenerator.net/ 生成,与其他分区uuid 不一致即可

bootable:启动分区为true,非启动分区为false

readonly:是否只读

filename:刷机的镜像文件名,挂载的独立分区,需要设置该名称,对于上面的oem 分区,只是存储文件信息的,则不需要设置.

ps:

1,新增的分区,需要写到userdata 前面,这样减少的分区大小,会自动分配到userdata 上,不需要我们手动修改

2,校验是否生效

编译image_cp.sh.

打包imageout.sh

编译ap,然后刷机

adb shell

ls -alh dev/block/by-name/oem

lrwxrwxrwx 1 root root 21 1970-01-03 01:17 dev/block/by-name/oem -> /dev/block/mmcblk0p81

说明修改生效,/dev/block/mmcblk0p81是实际的文件系统

3,新增镜像刷机文件

参考系统中persist 分区的方案,改成自己的

LA.UM.9.15.R2/device/qcom/common/generate_extra_images.mk

#----------------------------------------------------------------------
# Generate persist image (persist.img)
#----------------------------------------------------------------------
ifneq ($(strip $(BOARD_PERSISTIMAGE_PARTITION_SIZE)),) #分区大小
ifneq ($(strip $(TARGET_NO_KERNEL)),true)TARGET_OUT_PERSIST := $(PRODUCT_OUT)/persist //分区路径INTERNAL_PERSISTIMAGE_FILES := \$(filter $(TARGET_OUT_PERSIST)/%,$(ALL_DEFAULT_INSTALLED_MODULES))INSTALLED_PERSISTIMAGE_TARGET := $(PRODUCT_OUT)/persist.img //镜像名称define build-persistimage-target$(call pretty,"Target persist fs image: $(INSTALLED_PERSISTIMAGE_TARGET)")@mkdir -p $(TARGET_OUT_PERSIST)$(hide) PATH=$(HOST_OUT_EXECUTABLES):$${PATH} $(MKEXTUSERIMG) $(TARGET_OUT_PERSIST) $@ ext4 persist $(BOARD_PERSISTIMAGE_PARTITION_SIZE)$(hide) chmod a+r $@$(hide) $(call assert-max-image-size,$@,$(BOARD_PERSISTIMAGE_PARTITION_SIZE))
endef$(INSTALLED_PERSISTIMAGE_TARGET): $(MKEXTUSERIMG) $(MAKE_EXT4FS) $(INTERNAL_PERSISTIMAGE_FILES)$(build-persistimage-target)ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_PERSISTIMAGE_TARGET)
ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_PERSISTIMAGE_TARGET)
droidcore: $(INSTALLED_PERSISTIMAGE_TARGET).PHONY: persistimage
persistimage: $(INSTALLED_PERSISTIMAGE_TARGET)endif
endif

上面主要修改点:

1,修改分区大小

BOARD_PERSISTIMAGE_PARTITION_SIZE 参考这个新增自己定义的分区大小,注意定义多少需要减少相应userdata 分区的大小

LA.UM.9.15.R2/device/qcom/项目名/BoardConfig.mk

BOARD_USERDATAIMAGE_PARTITION_SIZE := 53640798208
BOARD_PERSISTIMAGE_PARTITION_SIZE := 33554432
BOARD_PERSISTIMAGE_FILE_SYSTEM_TYPE := ext4
BOARD_METADATAIMAGE_PARTITION_SIZE := 16777216
BOARD_DTBOIMG_PARTITION_SIZE := 0x0800000
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4
BOARD_FLASH_BLOCK_SIZE := 131072 # (BOARD_KERNEL_PAGESIZE * 64)

2,增加挂载点

a,新增目录

persist 唯一找到的路径,没有确认对不对,后面有空会验证下.

device/generic/common/dummy_arm64/BoardConfig.mk:36:

BOARD_ROOT_EXTRA_SYMLINKS += /mnt/vendor/persist:/persist

格式为<target>:<link_name>, 那么就会新建目录out/target/product/产品名/root/link_name, 然后用新建目录软练级到<target>

既然没有验证,我们就参考系统原生是怎么实现的

如果是根目录system/core/rootdir/Android.mk

ifdef BOARD_USES_METADATA_PARTITIONLOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/metadata
endif# For /odm partition.
LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/odm

通过该命令LOCAL_POST_INSTALL_CMD 创建自己的路径

也可以通过rc 的创建方式

LA.UM.9.15.R2/device/qcom/项目名/init.target.rc

on fsstart hwservicemanagermount_all --earlychown root system /mnt/vendor/persistchmod 0771 /mnt/vendor/persistrestorecon_recursive /mnt/vendor/persistmkdir /mnt/vendor/persist/data 0700 system system

ps:如果需要创建多层目录mkdir -p 就可以了

b,修改分组,读写权限

LA.UM.9.15.R2/device/qcom/项目名/init.target.rc

中想

on fs

start hwservicemanager

mount_all --early

chown root system /mnt/vendor/persist

chmod 0771 /mnt/vendor/persist

3,挂载文件到挂载点

LA.UM.9.15.R2/device/qcom/*/fstab_AB_dynamic_partition.qti

LA.UM.9.15.R2/device/qcom/*/fstab_non_AB_dynamic_partition.qti

#分区路径                             挂载点      文件系统类型
/dev/block/bootdevice/by-name/persist                   /mnt/vendor/persist    ext4    noatime,nosuid,nodev,barrier=1                       wait

4,生效标签

开机后重新迭代赋予标签

device/qcom/项目名/init.target.rc:69:

on fs

.......

restorecon_recursive /mnt/vendor/persist

......

4,添加Selinux

file_context 中加标签

/dev/block/platform/soc/xxxxx/by-name/partionname u:object_r:vendor_partition_file:s0

(这部分如果是加到最后一行,要注意加回车,不然会报莫名其妙的错误,

IndexError: list index out of range 巨坑)

/partionname(/.*)? u:object_r:vendor_partition_file:s0

/mnt/vendor/partionname(/.*)? u:object_r:vendor_partition_file:s0

这个是参考系统的标准格式

定义文件类型file.te

type vendor_partition_file, file_type, mlstrustedobject;

这个必须是mlstrustedobject,google 对data 分区的数据操作加了限制,所以不能参考系统的类型来写

定义设备类型device.te

type vendor_partition_file,dev_type;

然后就是缺少什么就加什么权限了

以上分区创建完成,接手之前同事的修改,加上我自己的踩的坑经验分享给大家,如有不准确的地方,还望指正.

参考:

https://www.dazhuanlan.com/bianyuan1/topics/1440206

https://blog.51cto.com/u_15243273/5426754

https://www.icode9.com/content-4-374869.html

android 新增分区相关推荐

  1. android 新分区 挂载,android 新增分区以及挂载方法-Go语言中文社区

    好长时间没更新我的CSDN 了,今天抽时间来重新一下,了解一点android新增分区和挂载的东西. 我是以高通平台代码为例来写的. 闲话不多说,直接上方法: 以新增kaicom分区举例: 1.在par ...

  2. Android新增自定义分区

    目录结构 前言 下面还有RK3326 Q的新增分区方法 有需要的可以参考一下,我觉得下面的正宗点 参考思路 A50新增自定义分区 Steps1 Steps2 Steps3 Steps4 Steps5 ...

  3. Android 系统(251)---sec2.0和sec2.1新增分区DA客制化步骤

    sec2.0和sec2.1新增分区DA客制化步骤 在sec2.0和sec2.1中,如果客户新增分区超过两个,又不想用DA中默认的sec policy,可以按如下方法进行配置. 以MT6739为例,增加 ...

  4. Android 动态分区详解(一) 5 张图让你搞懂动态分区原理

    文章目录 0. 导读 1. 动态分区详解的背景 1.1 背景 1.2 动态分区的本质 2. Linux device mapper 驱动 3. Android 动态分区布局 3.1 动态分区布局 3. ...

  5. Android 系统(65)---Android修改分区格式为F2FS

    Android修改分区格式为F2FS 谁人没试过犹豫,达到理想不太易 -–Beyond 本文介绍如何将Android系统的/data分区改变成F2FS格式.修改的原因是F2FS分区格式拥有更加的I/O ...

  6. Android 虚拟分区详解(三) 分区状态变化

    Android Virtual A/B 系统简称 VAB,我将其称为虚拟分区. 本系列文章基于 Android R(11) 进行分析,如果没有特别说明,均基于代码版本 android-11.0.0_r ...

  7. Android 动态分区详解(六) 动态分区的底层机制

    文章目录 1. Android 动态分区的两重含义 2. device mapper 的原理 3. linear 映射的原理 3.1 多个设备映射示例 3.2 `dmsetup create` 命令参 ...

  8. Android系统分区介绍

    Android系统分区介绍 hboot--系统开机引导类似电脑BIOS,这块刷错手机就会变成砖 radio--通讯模块.基带.WIFI.Bluetooth等衔接硬件的驱动软件 model分区 reco ...

  9. android动态分区AB升级,Android A/B 系统升级简介

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 来源:https://pengzhangdev.github.io/Android-AB-system-update/ ...

最新文章

  1. Linux之DNS服务
  2. 函数声明(函数原型)的一些关键技巧
  3. dos删除文件与文件夹
  4. Android之NDK开发
  5. 编译安装mysql5.6.36_MySQL5.6.36编译安装
  6. 数字图像处理--图像ROI
  7. servlet 验证生命周期过程调用方法的次数
  8. iptables基本用法和linux网络相关
  9. Pytorch:Tensor(张量)的使用
  10. android 视频播放器框架 [饺子播放器](https://github.com/Jzvd/JiaoZiVideoPlayer) 源码解析与评估
  11. 常见的距离算法和相似度(相关系数)计算方法
  12. 大一新生必看,自学必看,里昂详解数据结构之队列
  13. 若依管理系统windows本地运行教程
  14. 国际音标(IPA)和美国音标(KK)对照表
  15. python编程计算圆面积和周长_vb编程计算圆周长面积
  16. kubernetes pod infra container网络原理
  17. 大数据治理运营整体解决方案
  18. 小白专场: Merge the incoming changes into the current branc和Rebase the current branch on top of the ...
  19. [总结]FFMPEG视音频编解码零基础学习方法【转】
  20. 小程序界面开发实现各种机型自适应

热门文章

  1. C#中的时间(判断是否是时间,比较大小百货等一些操作)
  2. 树莓派Pico W无线WiFi开发板使用方法及MicroPython网络编程实践
  3. 注册Google 谷歌注册的两种方法
  4. 其实,这就是「幸存者偏差」
  5. chimee视频播放插件
  6. 微信营销之聊天成交技巧分解
  7. 未来一年48项即将大热的技术趋势HTML5在列
  8. 移动App自动化测试1---自动化测试、操作系统简介
  9. 有关win7 设备管理器空白,没有声音的问题
  10. 基于C#的公交充值管理系统的设计与实现