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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值