B-Zebul 2025-11-25 17:59 采纳率: 0%
浏览 14

Android15 MTK平台(mt6768)增加分区

安卓15的MTK平台(mt6768),如何添加分区
目前我已经在
1、新建vnd/device/mediateksample/zelus8786p1_64_k66_P3000/peakdata.mk内容为

CUSTOM_IMAGE_MOUNT_POINT := peakdata
CUSTOM_IMAGE_PARTITION_SIZE := 268435456
CUSTOM_IMAGE_FILE_SYSTEM_TYPE := ext4
CUSTOM_IMAGE_SELINUX := true

2、在vnd/device/mediateksample/zelus8786p1_64_k66_P3000/BoardConfig.mk添加

BOARD_PEAKDATAIMAGE_PARTITION_SIZE?=268435456

3、在vnd/device/mediateksample/zelus8786p1_64_k66_P3000/BoardConfig.mk添加

+#Create root/peakdata 
+BOARD_ROOT_EXTRA_FOLDERS += peakdata
+
+#Add peakdata.mk to the project image compilation
+PRODUCT_CUSTOM_IMAGE_MAKEFILES += $(MTK_PROJECT_FOLDER)/peakdata.mk

4、在vnd/vendor/mediatek/proprietary/tools/ptgen/common/ptgen_unfz_android_s.mk添加

BOARD_PEAKDATAIMAGE_PARTITION_SIZE="${BOARD_PEAKDATAIMAGE_PARTITION_SIZE}" \

5、在vnd/vendor/mediatek/proprietary/tools/ptgen/common/ptgen_android_u.mk添加

vendor/mediatek/proprietary/tools/ptgen/common/ptgen_android_u.mk

6、在vnd/vendor/mediatek/proprietary/tools/ptgen/MT6768/partition_table_emmc_ab.csv

 vendor_b,EXT4,EMMC_USER,,main,N,N,NONE,Y,N,AUTO,8388608,
 system_b,EXT4,EMMC_USER,,main,N,Y,system_other.img,Y,N,AUTO,8388608,
 super,Raw data,EMMC_USER,,,N,Y,super.img,Y,N,AUTO,8388608,"ne(DYNAMIC_PARTITION_SUPPORT,yes) or eq(PRODUCT_RETROFIT_DYNAMIC_PARTITIONS,yes)"
+peakdata,EXT4,EMMC_USER,,,N,Y,peakdata.img,N,N,AUTO,,
 userdata,EXT4,EMMC_USER,,,N,Y,userdata.img,N,N,NEEDRESIZE,,
 mrdump,Raw data,EMMC_USER,,,Y,N,NONE,N,N,RESERVED,,

7、在vnd/vendor/mediatek/proprietary/hardware/fstab/mt6768/fstab.in添加

DEVPATH(peakdata)   /peakdata               ext4   FS_FLAG_COMMIT  FSMGR_FLAG_FMT

8、在vnd/build/make/core/tasks/tools/build_custom_image.mk添加

@@ -26,7 +26,7 @@
 
 intermediates := $(call intermediates-dir-for,PACKAGING,$(my_custom_image_name))
 my_built_custom_image := $(intermediates)/$(my_custom_image_name).img
-my_staging_dir := $(intermediates)/$(CUSTOM_IMAGE_MOUNT_POINT)
+my_staging_dir := $(PRODUCT_OUT)/$(CUSTOM_IMAGE_MOUNT_POINT)
 
 # Collect CUSTOM_IMAGE_MODULES's installd files and their PICKUP_FILES.
 my_built_modules :=
@@ -126,6 +126,7 @@
     $(hide) echo "fs_type=$(PRIVATE_FILE_SYSTEM_TYPE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt
     $(hide) echo "partition_size=$(PRIVATE_PARTITION_SIZE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt
     $(hide) echo "ext_mkuserimg=$(notdir $(MKEXTUSERIMG))" >> $(PRIVATE_INTERMEDIATES)/image_info.txt
+    $(hide) echo "extfs_sparse_flag=-s" >> $(PRIVATE_INTERMEDIATES)/image_info.txt
     $(if $(PRIVATE_SELINUX),$(hide) echo "selinux_fc=$(SELINUX_FC)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt)
     $(if $(filter eng, $(TARGET_BUILD_VARIANT)),$(hide) echo "verity_disable=true" >> $(PRIVATE_INTERMEDIATES)/image_info.txt)
     $(hide) echo "avb_avbtool=$(PRIVATE_AVB_AVBTOOL)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt

9、在vnd/device/mediatek/sepolicy/base/vendor/device.te添加

type peakdata_block_device, dev_type;

10、在vnd/device/mediatek/sepolicy/base/vendor/file.te添加

type peakdata_data_file, file_type, data_file_type;

11、在vnd/device/mediatek/sepolicy/base/vendor/file_contexts添加

+#Forcibly bind a fixed SELinux security context to /peakdata
+/dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/peakdata     u:object_r:peakdata_block_device:s0
+/dev/block/by-name/peakdata u:object_r:peakdata_block_device:s0
+/peakdata(/.*)?   u:object_r:peakdata_data_file:s0

我修改以上内容,为什么peakdata分区没有添加出来。

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-11-25 18:14
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    你已经尝试了多个步骤来在 Android 15 MTK 平台(MT6768) 上添加一个名为 peakdata 的新分区,但发现该分区没有被正确添加。以下是详细的排查与解决方案。


    ✅ 一、问题分析

    根据你提供的修改内容,可能存在以下几个关键问题:

    1. BoardConfig.mk 中的配置不完整或错误
    2. ptgen_unfz_android_s.mkptgen_android_u.mk 中的变量未正确引用
    3. partition_table_emmc_ab.csv 中的分区定义不规范
    4. build_custom_image.mk 中的路径设置可能存在问题
    5. SELinux 配置是否生效

    🔍 二、详细排查与修复方案

    1. 检查 BoardConfig.mk 配置

    确保你在 BoardConfig.mk 中定义了正确的变量,并且引用了 peakdata.mk

    # vnd/device/mediateksample/zelus8786p1_64_k66_P3000/BoardConfig.mk
    
    # 定义分区大小
    BOARD_PEAKDATAIMAGE_PARTITION_SIZE := 268435456
    
    # 添加自定义镜像文件
    PRODUCT_CUSTOM_IMAGE_MAKEFILES += $(MTK_PROJECT_FOLDER)/peakdata.mk
    
    # 添加额外的根目录
    BOARD_ROOT_EXTRA_FOLDERS += peakdata
    

    重点:

    • 确保 BOARD_PEAKDATAIMAGE_PARTITION_SIZE 被正确赋值;
    • PRODUCT_CUSTOM_IMAGE_MAKEFILES 必须指向 peakdata.mk
    • BOARD_ROOT_EXTRA_FOLDERS 用于在系统中创建 /peakdata 目录。

    2. 检查 ptgen_unfz_android_s.mkptgen_android_u.mk

    确保这两个文件中使用了 BOARD_PEAKDATAIMAGE_PARTITION_SIZE 变量。

    修改前(假设原内容如下):

    BOARD_SYSTEMIMAGE_PARTITION_SIZE ?= 8388608
    

    修改后:

    BOARD_SYSTEMIMAGE_PARTITION_SIZE ?= 8388608
    BOARD_PEAKDATAIMAGE_PARTITION_SIZE ?= 268435456
    

    重点:

    • 确保 BOARD_PEAKDATAIMAGE_PARTITION_SIZEptgen_unfz_android_s.mkptgen_android_u.mk 中被正确引用。

    3. 检查 partition_table_emmc_ab.csv 分区定义

    你的 partition_table_emmc_ab.csv 文件中应该包含类似如下的行:

    peakdata,EXT4,EMMC_USER,,,N,Y,peakdata.img,N,N,AUTO,
    

    重点:

    • 确保 peakdata 分区的格式为 EXT4
    • Y 表示该分区是用户可写;
    • peakdata.img 是生成的镜像文件名;
    • 如果没有 peakdata.img,则不会生成对应的分区。

    4. 检查 build_custom_image.mk 中的路径

    你修改了以下部分:

    my_staging_dir := $(PRODUCT_OUT)/$(CUSTOM_IMAGE_MOUNT_POINT)
    

    重点:

    • 此路径应指向 out/target/product/your_device/peakdata
    • 如果路径不正确,镜像将无法生成;
    • 确保 $(PRODUCT_OUT) 是有效的输出路径(通常为 out/target/product/your_device)。

    5. 检查 SELinux 配置

    你已经在 file_contexts 中添加了以下内容:

    /dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/peakdata     u:object_r:peakdata_block_device:s0
    /dev/block/by-name/peakdata u:object_r:peakdata_block_device:s0
    /peakdata(/.*)?   u:object_r:peakdata_data_file:s0
    

    重点:

    • 确保这些规则已正确编译到 SELinux policy 中;
    • 如果 SELinux 限制了对 /peakdata 的访问,可能导致挂载失败。

    6. 检查 fstab.in 中的挂载信息

    确保 fstab.in 中有如下内容:

    DEVPATH(peakdata)   /peakdata               ext4   FS_FLAG_COMMIT  FSMGR_FLAG_FMT
    

    重点:

    • DEVPATH(peakdata) 是用来匹配设备节点的;
    • 确保该行出现在 fstab.in 的正确位置(通常是 systemvendor 分区之后)。

    7. 重新编译并验证

    执行以下命令进行重新编译:

    source build/envsetup.sh
    lunch your_device-userdebug
    make -j8
    

    然后查看生成的镜像文件:

    ls out/target/product/your_device/peakdata.img
    

    如果不存在,说明 peakdata.mk 没有被正确调用。


    🧠 三、可能遗漏的步骤

    | 步骤 | 是否完成 | 说明 | |------|----------|------| | ✅ 定义 BOARD_PEAKDATAIMAGE_PARTITION_SIZE | 是 | 确保在 BoardConfig.mk 中定义 | | ✅ 引入 peakdata.mkPRODUCT_CUSTOM_IMAGE_MAKEFILES | 是 | 确保 peakdata.mk 被正确调用 | | ✅ 修改 partition_table_emmc_ab.csv | 是 | 确保 peakdata 分区存在 | | ✅ 修改 fstab.in | 是 | 确保挂载点正确 | | ✅ 修改 SELinux 配置 | 是 | 确保权限和上下文正确 | | ✅ 重新编译 | 否 | 请重新编译以确认结果 |


    ✅ 四、推荐修改后的代码片段

    1. BoardConfig.mk

    BOARD_PEAKDATAIMAGE_PARTITION_SIZE := 268435456
    PRODUCT_CUSTOM_IMAGE_MAKEFILES += $(MTK_PROJECT_FOLDER)/peakdata.mk
    BOARD_ROOT_EXTRA_FOLDERS += peakdata
    

    2. partition_table_emmc_ab.csv

    peakdata,EXT4,EMMC_USER,,,N,Y,peakdata.img,N,N,AUTO,
    

    3. fstab.in

    DEVPATH(peakdata)   /peakdata               ext4   FS_FLAG_COMMIT  FSMGR_FLAG_FMT
    

    4. build_custom_image.mk 中的路径修正

    my_staging_dir := $(PRODUCT_OUT)/$(CUSTOM_IMAGE_MOUNT_POINT)
    

    📌 五、总结

    如果你已经按照上述步骤进行了修改,但 peakdata 分区仍然没有生成,请按以下顺序排查:

    1. 检查 peakdata.mk 是否被正确调用
    2. 确认 partition_table_emmc_ab.csv 中的分区定义
    3. 检查 fstab.in 中的挂载配置
    4. 查看 SELinux 配置是否阻止了挂载
    5. 重新编译并验证镜像文件是否存在

    如有需要,我可以提供完整的 peakdata.mk 示例或其他相关配置文件。欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 11月25日