android 新增分区
为什么要新增分区?
项目开发中,需要存储一些数据,不想被在系统刷机或者重置的时候被清理掉,一般会根据需求新增自己的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 新增分区相关推荐
- android 新分区 挂载,android 新增分区以及挂载方法-Go语言中文社区
好长时间没更新我的CSDN 了,今天抽时间来重新一下,了解一点android新增分区和挂载的东西. 我是以高通平台代码为例来写的. 闲话不多说,直接上方法: 以新增kaicom分区举例: 1.在par ...
- Android新增自定义分区
目录结构 前言 下面还有RK3326 Q的新增分区方法 有需要的可以参考一下,我觉得下面的正宗点 参考思路 A50新增自定义分区 Steps1 Steps2 Steps3 Steps4 Steps5 ...
- Android 系统(251)---sec2.0和sec2.1新增分区DA客制化步骤
sec2.0和sec2.1新增分区DA客制化步骤 在sec2.0和sec2.1中,如果客户新增分区超过两个,又不想用DA中默认的sec policy,可以按如下方法进行配置. 以MT6739为例,增加 ...
- Android 动态分区详解(一) 5 张图让你搞懂动态分区原理
文章目录 0. 导读 1. 动态分区详解的背景 1.1 背景 1.2 动态分区的本质 2. Linux device mapper 驱动 3. Android 动态分区布局 3.1 动态分区布局 3. ...
- Android 系统(65)---Android修改分区格式为F2FS
Android修改分区格式为F2FS 谁人没试过犹豫,达到理想不太易 -–Beyond 本文介绍如何将Android系统的/data分区改变成F2FS格式.修改的原因是F2FS分区格式拥有更加的I/O ...
- Android 虚拟分区详解(三) 分区状态变化
Android Virtual A/B 系统简称 VAB,我将其称为虚拟分区. 本系列文章基于 Android R(11) 进行分析,如果没有特别说明,均基于代码版本 android-11.0.0_r ...
- Android 动态分区详解(六) 动态分区的底层机制
文章目录 1. Android 动态分区的两重含义 2. device mapper 的原理 3. linear 映射的原理 3.1 多个设备映射示例 3.2 `dmsetup create` 命令参 ...
- Android系统分区介绍
Android系统分区介绍 hboot--系统开机引导类似电脑BIOS,这块刷错手机就会变成砖 radio--通讯模块.基带.WIFI.Bluetooth等衔接硬件的驱动软件 model分区 reco ...
- android动态分区AB升级,Android A/B 系统升级简介
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 来源:https://pengzhangdev.github.io/Android-AB-system-update/ ...
最新文章
- Linux之DNS服务
- 函数声明(函数原型)的一些关键技巧
- dos删除文件与文件夹
- Android之NDK开发
- 编译安装mysql5.6.36_MySQL5.6.36编译安装
- 数字图像处理--图像ROI
- servlet 验证生命周期过程调用方法的次数
- iptables基本用法和linux网络相关
- Pytorch:Tensor(张量)的使用
- android 视频播放器框架 [饺子播放器](https://github.com/Jzvd/JiaoZiVideoPlayer) 源码解析与评估
- 常见的距离算法和相似度(相关系数)计算方法
- 大一新生必看,自学必看,里昂详解数据结构之队列
- 若依管理系统windows本地运行教程
- 国际音标(IPA)和美国音标(KK)对照表
- python编程计算圆面积和周长_vb编程计算圆周长面积
- kubernetes pod infra container网络原理
- 大数据治理运营整体解决方案
- 小白专场: Merge the incoming changes into the current branc和Rebase the current branch on top of the ...
- [总结]FFMPEG视音频编解码零基础学习方法【转】
- 小程序界面开发实现各种机型自适应