QCOM 平台增加分区流程 及 注意事项

本文以qcom msm8909 为例增加carrier分区,留文以备后忘:


1、修改分区表partition.xml


diff --git a/non_hlos/common/config/emmc/partition.xml b/non_hlos/common/config/emmc/partition.xml
index 74ca036..11f38bc 100755
--- a/non_hlos/common/config/emmc/partition.xml
+++ b/non_hlos/common/config/emmc/partition.xml
@@ -36,7 +36,9 @@
     <partition label="boot" size_in_kb="32768" type="20117F86-E985-4357-B9EE-374BC1D8487D" bootable="false" readonly="true" filename="boot.img"/>    
-    <partition label="system" size_in_kb="819200" type="97D7B011-54DA-4835-B3C4-917AD6E73D74" bootable="false" readonly="true" filename="system.img" sparse="true"/>
+    <partition label="system" size_in_kb="716800" type="97D7B011-54DA-4835-B3C4-917AD6E73D74" bootable="false" readonly="true" filename="system.img" sparse="true"/>
+    <partition label="carrier" size_in_kb="40960" type="044f61e9-5826-4d9a-838a-dba8407859b8" bootable="false" readonly="false" filename=""/>
     <partition label="persist" size_in_kb="32768" type="6C95E238-E343-4BA8-B489-8681ED22AD0B" bootable="false" readonly="true" filename="persist.img" sparse="true"/>
    
注: 如上的添加方式后续导致 wifi 无法开启的问题,后续通过如下修改解决,即将新增的分区(readonly="false")远离 system(readonly="true")分区,原因待查。

2、修改 fstab ,添加新分区


注意:
    1)、针对 normal boot 和 recovery 两种情况,使用了不同的 fstab 文件,需要同步修改
    2)、当 fstab.qcom 中添加的新分区是空白可写分区时,需要同步添加 formattable 标签,无此标签可能会导致手机无法启动

diff --git a/qcom/x400/default/fstab_AB_dynamic_partition.qti b/qcom/x400/default/fstab_AB_dynamic_partition.qti
index 1c2d443..1d51c8e 100644
--- a/qcom/x400/default/fstab_AB_dynamic_partition.qti
+++ b/qcom/x400/default/fstab_AB_dynamic_partition.qti
@@ -44,6 +44,7 @@ product                                                 /product
 # Add fs_mgr flag - sysfs_path=/sys/devices/platform/soc/xxxx.[ufshc|sdhci] to userdata entry, based on UFS|eMMC device.
 /dev/block/bootdevice/by-name/userdata                  /data                  f2fs    noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier,inlinecrypt  latemount,wait,check,formattable,quota,reservedsize=128M,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized+wrappedkey_v0,metadata_encryption=aes-256-xts:wrappedkey_v0,keydirectory=/metadata/vold/metadata_encryption,checkpoint=fs
 /dev/block/bootdevice/by-name/persist                   /mnt/vendor/persist    ext4    noatime,nosuid,nodev,barrier=1                       wait
+/dev/block/bootdevice/by-name/carrier                   /mnt/carrier           ext4    noatime,nosuid,nodev,barrier=1                       wait,check,formattable
 /dev/block/bootdevice/by-name/misc                      /misc                  emmc    defaults                                             defaults
 /devices/platform/soc/4784000.sdhci/mmc_host*           /storage/sdcard1       vfat    nosuid,nodev                                         wait,voldmanaged=sdcard1:auto,encryptable=footer
 /devices/platform/soc/1da4000.ufshc_card/host*          /storage/sdcard1       vfat    nosuid,nodev                                         wait,voldmanaged=sdcard1:auto,encryptable=footer
diff --git a/qcom/x400/emmc/fstab_AB_dynamic_partition.qti b/qcom/x400/emmc/fstab_AB_dynamic_partition.qti
index d5683f6..bfe6a66 100644
--- a/qcom/x400/emmc/fstab_AB_dynamic_partition.qti
+++ b/qcom/x400/emmc/fstab_AB_dynamic_partition.qti
@@ -44,6 +44,7 @@ product                                                 /product
 # Add fs_mgr flag - sysfs_path=/sys/devices/platform/soc/xxxx.[ufshc|sdhci] to userdata entry, based on UFS|eMMC device.
 /dev/block/bootdevice/by-name/userdata                  /data                  f2fs    noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier,inlinecrypt  latemount,wait,check,formattable,quota,reservedsize=128M,fileencryption=aes-256-xts:aes-256-cts:v2+emmc_optimized+wrappedkey_v0,metadata_encryption=aes-256-xts:wrappedkey_v0,keydirectory=/metadata/vold/metadata_encryption,checkpoint=fs
 /dev/block/bootdevice/by-name/persist                   /mnt/vendor/persist    ext4    noatime,nosuid,nodev,barrier=1                       wait
+/dev/block/bootdevice/by-name/carrier                   /mnt/carrier           ext4    noatime,nosuid,nodev,barrier=1                       wait,check,formattable
 /dev/block/bootdevice/by-name/misc                      /misc                  emmc    defaults                                             defaults
 /devices/platform/soc/4784000.sdhci/mmc_host*           /storage/sdcard1       vfat    nosuid,nodev                                         wait,voldmanaged=sdcard1:auto,encryptable=footer
 /devices/platform/soc/1da4000.ufshc_card/host*          /storage/sdcard1       vfat    nosuid,nodev                                         wait,voldmanaged=sdcard1:auto,encryptable=footer
 


diff --git a/fstab.qcom b/fstab.qcom
index 2a063a1..4cd3d70 100755
--- a/fstab.qcom
+++ b/fstab.qcom
@@ -11,3 +11,6 @@
 /dev/block/zram0             none         swap    defaults zramsize=268435456
 /devices/platform/soc/7864900.sdhci/mmc_host*        /storage/sdcard   vfat    nosuid,nodev         wait,voldmanaged=sdcard:auto,encryptable=footer
 /dev/block/bootdevice/by-name/config         /frp  emmc  defaults defaults
+
+/dev/block/bootdevice/by-name/carrier        /carrier     ext4    nosuid,nodev,noatime,barrier=1,noauto_da_alloc,discard      wait,check,formattable
diff --git a/recovery.fstab b/recovery.fstab
index 4368425..55d5155 100644
--- a/recovery.fstab
+++ b/recovery.fstab
@@ -51,3 +51,5 @@
 /dev/block/bootdevice/by-name/sec          /sec            emmc    defaults                                                        defaults
 /dev/block/bootdevice/by-name/devinfo      /devinfo        emmc    defaults                                                        defaults
+/dev/block/bootdevice/by-name/carrier      /carrier        ext4    noatime,nosuid,nodev,barrier=1,data=ordered                     wait,check


3、修改rc权限


在当前项目的 init rc 中添加新增分区挂载目录的用户组修改和读写权限修改语句
注意:这里曾尝试将 mount 语句直接添加在如下 init rc 文件内,而不是添加在上述的 fstab 文件中,但是实测未能成功 mount,原因未知。
diff --git a/init.target.rc b/init.target.rc
index dd71e45..48f7368 100755
--- a/init.target.rc
+++ b/init.target.rc
@@ -58,6 +58,21 @@
     wait /dev/block/bootdevice/by-name/modem
     mount vfat /dev/block/bootdevice/by-name/modem /firmware ro context=u:object_r:firmware_file:s0,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337
 
+    # XXX BEGIN
+    wait /dev/block/bootdevice/by-name/carrier
+    chown system system /carrier
+    chmod 0771 /carrier
+    restorecon_recursive /carrier
+    # XXX END
 
 on post-fs-data
     mkdir /data/tombstones 0771 system system

4、其他分区大小修正     


qc8x09/platform/vendor/qcom/ferrum (path: ./LINUX/android/device/qcom/msm8909/)
由于项目没有多余的空间,需要从其它已有分区中匀出空间来给新分区,这里选则了 system 分区,重定义 system 分区大小如下
diff --git a/BoardConfig.mk b/BoardConfig.mk
index 6fcd82c..070da13 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -114,7 +114,11 @@
 
 BOARD_BOOTIMAGE_PARTITION_SIZE := 0x01000000
 BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x01000000
-BOARD_SYSTEMIMAGE_PARTITION_SIZE := 838860800
+# XXX BEGIN
+# modify by xxx 20200630  
+# shrink system from 800M to 700M for new added partitions carrier(40M)
+BOARD_SYSTEMIMAGE_PARTITION_SIZE := 734003200
+# XXX END
 BOARD_USERDATAIMAGE_PARTITION_SIZE := 1038090240
 BOARD_USBIMAGE_PARTITION_SIZE := 1020000000
 BOARD_CACHEIMAGE_PARTITION_SIZE := 268435456
 


5、增加selinux权限 


qc8x09/device/qcom/sepolicy (path: ./LINUX/android/device/qcom/sepolicy/)
为新分区添加必要的 selinux 规则语句
diff --git a/Android.mk b/Android.mk
index f7836f6..7a1e140 100644
--- a/Android.mk
+++ b/Android.mk
@@ -5,5 +5,6 @@
        device/qcom/sepolicy \
        device/qcom/sepolicy/common \
        device/qcom/sepolicy/test \
-       device/qcom/sepolicy/$(TARGET_BOARD_PLATFORM)
+       device/qcom/sepolicy/$(TARGET_BOARD_PLATFORM) \
+       device/qcom/sepolicy/$(TARGET_PRODUCT)
 endif

diff --git a/x400/file_contexts b/x400/file_contexts
new file mode 100644
index 0000000..04ca251
--- /dev/null
+++ b/x400/file_contexts
@@ -0,0 +1,6 @@
+##################################
+# Primary storage device nodes
+
+/carrier(/.*)?                                                      u:object_r:persist_file:s0

附录:
qcom 建议步骤:how to add a new partition?

这个是高通 case 中给出的新增分区步骤
If customer want to create a new partition for their own use, here are some steps can be followed.
1.add a new line in partition.xml, you can following the above item of partition.
2.replace the GUID for your partition, you can generate a unique GUID from www.guidgen.com website.
3.set the correct partition size and name.
4.set the correct property of this partition for "bootable" and "readonly" items.
Here is an example of oem partition:
<partition label="oem" size_in_kb="4096" type="A695B44A-F1D3-4558-8D37-65CFC0596ABD" bootable="false" readonly="true" filename=""/>
5.
6.run the python script to generate the GPT header file and rawprogram*.xml for download.
# python ../common/build/build.py
7.
kba-200507195814_2_how_to_add_one_new_partition_in_dynamic_partition_for_android_q..pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/765685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【简单讲解神经网络训练中batch的作用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

pdf怎么拆分成一页一页?4种拆分方法分享

在日常的办公学习中&#xff0c;PDF文档因其跨平台、易阅读、不易篡改等特性&#xff0c;成为我们工作和学习中不可或缺的一部分。然而&#xff0c;当我们需要对PDF进行编辑、打印或分享时&#xff0c;有时需要将整个PDF文档拆分成一页一页的单独文件。那么&#xff0c;如何高效…

嵌入式学习——硬件(Linux系统在2440上的启动)——day57

1. Linux2.6系统在s3c2440上的启动过程分三个阶段 1.1 启动u-boot 1.2 启动Linux内核 1.3 挂载根文件系统 2. bootloader 2.1 定义 bootloader的本质是一个裸机程序&#xff0c;bootlood专门是为了能够正确地启动linux操作系 统&#xff0c;在系统初上电时需要对系统做一些…

TFD那智机器人仿真离线程序文本转换为现场机器人程序

TFD式样那智机器人离线程序通过Process Simulation、DELMIA等仿真软件为载体给机器人出离线&#xff0c;下载下来的文本程序&#xff0c;现场机器人一般是无法导入及识别出来的。那么就需要TFD on Desk TFD控制器来进行转换&#xff0c;才能导入现场机器人读取程序。 导入的文…

CAN通信波形【示波器抓取】

在测试bms系统过程中&#xff0c;在上位机发现无法读取CAN通信&#xff0c;尝试使用示波器抓取CAN通信波形&#xff0c;&#xff0c;去确定CAN通信是否正常。 做一想要从车上测出can总线上的数据还不太容易。 于是我首先使用示波器&#xff08;我使用的示波器型号是TDS 220&am…

NSSCTF-Web题目19(数据库注入、文件上传、php非法传参)

目录 [LitCTF 2023]这是什么&#xff1f;SQL &#xff01;注一下 &#xff01; 1、题目 2、知识点 3、思路 [SWPUCTF 2023 秋季新生赛]Pingpingping 4、题目 5、知识点 6、思路 [LitCTF 2023]这是什么&#xff1f;SQL &#xff01;注一下 &#xff01; 1、题目 2、知识…

全球首款商用,AI为视频自动配音配乐产品上线

近日&#xff0c;海外推出了一款名为Resona V2A的产品&#xff0c;这是全球首款商用视频转音频 (V2A) 技术产品。这项突破性技术利用AI&#xff0c;仅凭视频数据即可自动生成高质量、与上下文相关的音频&#xff0c;包括声音设计、音效、拟音和环境音&#xff0c;为电影制作人、…

【LeetCode】十、二分查找法:寻找峰值 + 二维矩阵的搜索

文章目录 1、二分查找法 Binary Search2、leetcode704&#xff1a;二分查找3、leetcode35&#xff1a;搜索插入位置4、leetcode162&#xff1a;寻找峰值5、leetcode74&#xff1a;搜索二维矩阵 1、二分查找法 Binary Search 找一个数&#xff0c;有序的情况下&#xff0c;直接…

从零开始实现大语言模型(二):文本数据处理

1. 前言 神经网络不能直接处理自然语言文本&#xff0c;文本数据处理的核心是做tokenization&#xff0c;将自然语言文本分割成一系列tokens。 本文介绍tokenization的基本原理&#xff0c;OpenAI的GPT系列大语言模型使用的tokenization方法——字节对编码(BPE, byte pair en…

Apache POI、EasyPoi、EasyExcel

目录 ​编辑 &#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&#xff09;EasyPoi使用 &#xff08;三&#xff09;EasyExcel使用 写 读 最简单的读​ 最简单的读的excel示例​ 最简单的读的对象​ &#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&…

33 包装器

c11 也叫适配器。c中的function本质是一个类模板&#xff0c;也是一个包装器 为什么需要fuction呢&#xff1f; 当一个类型既可以是函数指针&#xff0c;也可以是仿函数和lambda比倒是&#xff0c;函数指针的类型不好理解&#xff0c;仿函数写起来麻烦&#xff0c;lambda无法拿…

2024年工程项目管理者的软件指南:11款必试进度管理工具

本文将分享11个值得关注的工程项目进度管理软件&#xff1a;Worktile、Fieldwire、Procore、Buildxact、InEight、Contractor Foreman、Housecall Pro、ClickUp、RedTeam Go、Visual Planning、B2W Schedule。 在竞争激烈的建筑行业&#xff0c;工程项目的进度管理是项目成功的…

Linux 实现自定义系统调用,支持参数和结果返回

本文实现一个简单的系统调用实现&#xff0c;支持输入字符串参数&#xff0c;并返回一个结果字符串。 以下是验证步骤&#xff1a; 1. 添加系统调用编号 试验使用的是 x86_64 架构的 Linux 内核。 找到并编辑 arch/x86/entry/syscalls/syscall_64.tbl 文件&#xff0c;在文件…

编写动态库

1.创建库.c .h文件 2.编写Makefile文件 3.make之后形成.so文件 4.make output,形成mylib 5.把mylib拷贝到test里面 mv mylib /test 6.编译 gcc main.c -I mylib/include -L mylib/lib -lmymethod形成a.out 但是直接执行会出现以下问题 很显然没有找到动态库 7.解决加载找不…

主干网络篇 | YOLOv8改进之引入YOLOv10的主干网络 | 全网最新改进

前言:Hello大家好,我是小哥谈。YOLOv10是由清华大学研究人员利用Ultralytics Python软件包开发的,它通过改进模型架构并消除非极大值抑制(NMS)提供了一种新颖的实时目标检测方法。这些优化使得模型在保持先进性能的同时,降低了计算需求。与以往的YOLO版本不同,YOLOv10的…

DFS练习

105 从前序与中序遍历序列构造二叉树 import java.util.HashMap; import java.util.Map;class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val val;} }public class Letcode105 {public TreeNode bulidTree(int[] preOrder, int[] inOrd…

c++将一个复杂的结构体_保存成二进制文件并读取

在 C 中&#xff0c;可以将复杂的结构体保存到二进制文件中&#xff0c;并从二进制文件中读取它。为了实现这一点&#xff0c;你可以使用文件流库 <fstream>。以下是一个示例&#xff0c;展示如何将一个复杂的结构体保存到二进制文件中&#xff0c;并从二进制文件中读取它…

去中心化经济的革新:探索Web3的新商业模式

随着区块链技术的发展&#xff0c;Web3正逐渐成为全球经济和商业模式的关键词之一。Web3不仅仅是技术的革新&#xff0c;更是对传统中心化商业模式的挑战和重构。本文将深入探讨Web3背后的概念、关键技术以及其带来的新商业模式&#xff0c;带领读者走进这一新兴领域的深度分析…

python如何输出list

直接输出list_a中的元素三种方法&#xff1a; list_a [1,2,3,313,1] 第一种 for i in range(len(list_a)):print(list_a[i]) 1 2 3 313 1 第二种 for i in list_a:print(i) 1 2 3 313 1 第三种&#xff0c;使用enumerate输出list_a方法&#xff1a; for i&#xff0c;j in enum…

中日区块链“大比拼”!中国蚂蚁加大区块链押注资本!日本索尼进军加密货币市场!

科技巨头在区块链和加密货币领域的动作越来越频繁。近期&#xff0c;中国金融科技巨头蚂蚁集团进一步加大了在区块链业务上的投资&#xff0c;而日本电子科技巨头索尼集团则正式进军加密货币交易领域。这些举措反映了两国对于区块链和加密资产领域的不同态度和布局。 蚂蚁集团加…