AndroidQ(10.0) MTK平台添加新分区

简介: AndroidQ(10.0) MTK平台添加新分区

65 平台增加一个新分区,用于保存特殊数据,修改文件列表如下

  modified:   build/make/core/Makefile
  modified:   build/make/core/config.mk
  modified:   build/make/core/envsetup.mk
  modified:   build/make/core/main.mk
  modified:   build/make/tools/releasetools/build_image.py
  modified:   device/mediatek/build/build/tools/ptgen/MT6765/partition_table_MT6765_emmc.csv
  modified:   device/mediatek/build/build/tools/ptgen/MT6765/ptgen.pl
  modified:   device/mediatek/sepolicy/bsp/non_plat/device.te
  modified:   device/mediatek/sepolicy/bsp/non_plat/file.te
  modified:   device/mediatek/sepolicy/bsp/non_plat/file_contexts
  modified:   device/mediatek/sepolicy/bsp/non_plat/fsck.te
  modified:   device/mediatek/sepolicy/bsp/non_plat/init.te
  modified:   device/mediatek/sepolicy/bsp/non_plat/system_app.te
  modified:   device/mediateksample/k62v1_64_bsp/BoardConfig.mk
  modified:   device/mediateksample/k62v1_64_bsp/init.project.rc
  modified:   system/core/rootdir/Android.mk
  modified:   system/sepolicy/prebuilts/api/29.0/public/app.te
  modified:   system/sepolicy/prebuilts/api/29.0/public/domain.te
  modified:   system/sepolicy/public/app.te
  modified:   system/sepolicy/public/domain.te
  modified:   vendor/mediatek/proprietary/hardware/fstab/mt6765/fstab.in.mt6765

1、分区表中添加分区参数(配置分区文件格式、大小、对应img名称等)


配置表格式后缀为.csv,通过在 device 目录下搜索,找到目标平台文件夹下的配置表


device/mediatek/build/build/tools/ptgen/MT6765/partition_table_MT6765_emmc.csv


yOqFR1.png


2、增加 klogo.img 对应编译代码


build/make/core/Makefile

$(if $(BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "klogo_fs_type=$(BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
$(if $(BOARD_KLOGOIMAGE_PARTITION_SIZE),$(hide) echo "klogo_size=$(BOARD_KLOGOIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(INTERNAL_USERIMAGES_EXT_VARIANT),$(hide) echo "fs_type=$(INTERNAL_USERIMAGES_EXT_VARIANT)" >> $(1))

编译规则

# -----------------------------------------------------------------
# klogo partition image
# ifdef BUILDING_KLOGO_IMAGE
ifdef BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE
INTERNAL_KLOGOIMAGE_FILES := \
    $(filter $(TARGET_OUT_KLOGO)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
klogoimage_intermediates := \
    $(call intermediates-dir-for,PACKAGING,klogo)
BUILT_KLOGOIMAGE_TARGET := $(PRODUCT_OUT)/klogo.img
define build-klogoimage-target
  $(call pretty,"Target klogo fs image: $(INSTALLED_KLOGOIMAGE_TARGET)")
  @mkdir -p $(TARGET_OUT_KLOGO)
  @mkdir -p $(klogoimage_intermediates) && rm -rf $(klogoimage_intermediates)/klogo_image_info.txt
  $(call generate-image-prop-dictionary, $(klogoimage_intermediates)/klogo_image_info.txt,cache,skip_fsck=true)
  $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
      build/make/tools/releasetools/build_image.py \
      $(TARGET_OUT_KLOGO) $(klogoimage_intermediates)/klogo_image_info.txt $(INSTALLED_KLOGOIMAGE_TARGET) $(TARGET_OUT)
  $(hide) $(call assert-max-image-size,$(INSTALLED_KLOGOIMAGE_TARGET),$(BOARD_KLOGOIMAGE_PARTITION_SIZE))
endef
# We just build this directly to the install location.
INSTALLED_KLOGOIMAGE_TARGET := $(BUILT_KLOGOIMAGE_TARGET)
$(INSTALLED_KLOGOIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_KLOGOIMAGE_FILES) $(BUILD_IMAGE_SRCS)
  $(build-klogoimage-target)
.PHONY: klogoimage-nodeps
klogoimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
  $(build-klogoimage-target)
else # BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE
# we need to ignore the broken klogo link when doing the rsync
IGNORE_KLOGO_LINK := --exclude=klogo
endif # BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE
# -----------------------------------------------------------------
# -----------------------------------------------------------------
# odm partition image
ifdef BUILDING_ODM_IMAGE
$(BUILT_TARGET_FILES_PACKAGE): \
      $(INSTALLED_RAMDISK_TARGET) \
      $(INSTALLED_BOOTIMAGE_TARGET) \
      $(MTK_BOOTIMAGE_TARGET) \
      $(INSTALLED_RADIOIMAGE_TARGET) \
      $(INSTALLED_RECOVERYIMAGE_TARGET) \
      $(FULL_SYSTEMIMAGE_DEPS) \
      $(INSTALLED_USERDATAIMAGE_TARGET) \
      $(INSTALLED_CACHEIMAGE_TARGET) \
      $(INSTALLED_VENDORIMAGE_TARGET) \
      $(INSTALLED_PRODUCTIMAGE_TARGET) \
      $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) \
      $(INSTALLED_VBMETAIMAGE_TARGET) \
      $(INSTALLED_KLOGOIMAGE_TARGET) \
      $(INSTALLED_ODMIMAGE_TARGET) \

build/make/core/config.mk


dont_bother_goals := out \
    snod systemimage-nodeps \
    stnod systemtarball-nodeps \
    userdataimage-nodeps userdatatarball-nodeps \
    cacheimage-nodeps \
    klogoimage-nodeps \
    bptimage-nodeps \


build/make/core/envsetup.mk

TARGET_OUT_CACHE := $(PRODUCT_OUT)/cache
TARGET_OUT_KLOGO := $(PRODUCT_OUT)/klogo
.KATI_READONLY := TARGET_OUT_CACHE

build/make/core/main.mk

.PHONY: cacheimage
cacheimage: $(INSTALLED_CACHEIMAGE_TARGET)
.PHONY: klogoimage
klogoimage: $(INSTALLED_KLOGOIMAGE_TARGET)
# Build files and then package it into the rom formats
.PHONY: droidcore
droidcore: $(filter $(HOST_OUT_ROOT)/%,$(modules_to_install)) \
    $(INSTALLED_SYSTEMIMAGE_TARGET) \
    $(INSTALLED_RAMDISK_TARGET) \
    $(MTK_BOOTIMAGE_TARGET) \
    $(INSTALLED_DEBUG_RAMDISK_TARGET) \
    $(INSTALLED_DEBUG_BOOTIMAGE_TARGET) \
    $(INSTALLED_RECOVERYIMAGE_TARGET) \
    $(INSTALLED_VBMETAIMAGE_TARGET) \
    $(INSTALLED_USERDATAIMAGE_TARGET) \
    $(INSTALLED_CACHEIMAGE_TARGET) \
    $(INSTALLED_KLOGOIMAGE_TARGET) \
    $(INSTALLED_BPTIMAGE_TARGET) \
    $(INSTALLED_VENDORIMAGE_TARGET) \
    $(INSTALLED_ODMIMAGE_TARGET) \


build/make/tools/releasetools/build_image.py

  elif mount_point == "cache":
    copy_prop("cache_fs_type", "fs_type")
    copy_prop("cache_size", "partition_size")
  elif mount_point == "klogo":
    copy_prop("klogo_fs_type", "fs_type")
    copy_prop("klogo_size", "partition_size")
  ...
   elif image_filename == "cache.img":
      mount_point = "cache"
   elif image_filename == "klogo.img":
      mount_point = "klogo"


device/mediateksample/k62v1_64_bsp/BoardConfig.mk

BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE := ext4


system/core/rootdir/Android.mk

ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache
else
  LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache
endif
ifdef BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE
  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/klogo
endif


3、修改 fstab 文件添加分区的挂载和系统启动时挂载权限


device/mediateksample/k62v1_64_bsp/init.project.rc


on post-fs-data
#/dev/ttyMT2 for Connectivity BT/FM/GPS usage
    chmod 777 /dev/ttyS0
    chmod 777 /dev/ttyS1
    chown system system /dev/ttyS0
    chown system system /dev/ttyS1
    chown system system /klogo
    chmod 0771 /klogo


vendor/mediatek/proprietary/hardware/fstab/mt6765/fstab.in.mt6765

DEVPATH(nvdata)     /mnt/vendor/nvdata      ext4   FS_FLAG_DISCARD  FSMGR_FLAG_FMT
DEVPATH(nvcfg)      /mnt/vendor/nvcfg       ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
DEVPATH(klogo)      /klogo                  ext4   FS_FLAG_DISCARD   FSMGR_FLAG_FMT

注意此处的类型设置为 FS_FLAG_DISCARD, 若为 FS_FLAG_COMMIT 卡在 logo 界面无法进入系统

抓取串口 log 如下

[   30.764913] <1>.(1)[365:init]init 14: [libfs_mgr]__mount(source=/dev/block/platform/bootdevice/by-name/klogo,target=/klogo,type=ext4)=-1: Invalid argument
[   30.767684] <3>.(3)[101:kworker/u16:1][name:pmic_auxadc&][name:pmic_auxadc&][CH3_DBG] bat_cur = -2018
[   30.767717] <3>.(1)[365:init]init 14: [libfs_mgr]Running /system/bin/e2fsck on /dev/block/mmcblk0p34
[   30.771264] <3>-(3)[101:kworker/u16:1]mt635x_auxadc_read_raw: 3 callbacks suppressed
[   30.771278] <3>.(3)[101:kworker/u16:1]mt635x-auxadc mt-pmic:mt635x-auxadc: name:BAT_TEMP, channel=3, adc_out=0xffe, adc_result=1799
[   30.774087] <3>.(3)[101:kworker/u16:1][name:mtk_battery&][name:mtk_battery&][force_get_tbat] ntc_disable_nafg -40 25
[   30.832233] <3>.(3)[101:kworker/u16:1][name:lockdep&]lockdep: [name:lockdep&][00000000e4bcd0cb] (&chrdet_lock) held by pmic_thread/106/[2] on CPU#5/IRQ[on] from [18.439032]
[   30.980652] <1>.(1)[365:init]EXT4-fs (mmcblk0p34): can't mount with commit=1, fs mounted w/o journal
[   30.982259] <1>.(1)[365:init]init 14: [libfs_mgr]__mount(source=/dev/block/platform/bootdevice/by-name/klogo,target=/klogo,type=ext4)=-1: Invalid argument
[   30.986183] <1>.(1)[365:init]init 14: [libfs_mgr]Failed to mount an un-encryptable or wiped partition on /dev/block/platform/bootdevice/by-name/klogo at /klogo options: noauto_da_alloc,commit=1,nodelalloc: Invalid argument
[   31.025039] <0>.(0)[103:kworker/u16:2]mt635x-auxadc mt-pmic:mt635x-auxadc: name:VPROC_TEMP, channel=4, adc_out=0x60f, adc_result=681
[   31.028433] <2>.(2)[101:kworker/u16:1]mt635x-auxadc mt-pmic:mt635x-auxadc: name:VCORE_TEMP, channel=4, adc_out=0x611, adc_result=682

4、添加挂载分区的selinux权限,否则系统启动无法挂载


device/mediatek/sepolicy/bsp/non_plat/device.te

#  add for klogo
type klogo_device, dev_type;
type klogo_block_device, dev_type;

device/mediatek/sepolicy/bsp/non_plat/file.te

#  add for klogo
type klogo_file, file_type, data_file_type;


device/mediatek/sepolicy/bsp/non_plat/file_contexts

 /dev/block/platform/bootdevice/by-name/sdrpmb u:object_r:tkcore_block_device:s0
 /(vendor|system\/vendor)/bin/hw/android\.hardware\.keymaster@4\.0-service.trustkernel u:object_r:hal_keymaster_default_exec:s0
+#  add for klogo
/dev/block/platform/bootdevice/by-name/klogo u:object_r:klogo_block_device:s0
/klogo(/.*)? u:object_r:klogo_file:s0

device/mediatek/sepolicy/bsp/non_plat/fsck.te

# add for klogo
allow fsck klogo_block_device:blk_file rw_file_perms;


device/mediatek/sepolicy/bsp/non_plat/init.te

# add for klogo
allow init klogo_block_device:blk_file relabelto;
allow init klogo_file:dir mounton;


device/mediatek/sepolicy/bsp/non_plat/system_app.te

# add for klogo
allow system_app klogo_file:file { getattr unlink open read write create };
allow system_app klogo_file:dir rw_dir_perms;



5、烧写工具加载指定 img 文件路径


device/mediatek/build/build/tools/ptgen/MT6765/ptgen.pl

#download files
    %download_files = (
                       preloader  => "preloader_$ArgList{PRELOADER_PROJECT}.bin",
                       srampreld => "sram_preloader_$ArgList{BASE_PROJECT}.bin",
                       mempreld  => "mem_preloader_$ArgList{BASE_PROJECT}.bin",
                       lk      => "lk.bin",
                       boot    => "boot.img",
                       recovery   => "recovery$recovery_download_file_suffix.img",
                       logo       => "logo.bin",
                       vendor    => "vendor.img",
                       system    => "system.img",
                       cache      => "cache.img",
                       klogo      => "klogo.img",
                       userdata    => "userdata.img",
                       custom     => "custom.img"
                      );

yOqfY9.png


6、selinux 修改后编译检测报错修改


system/sepolicy/public/app.te

system/sepolicy/prebuilts/api/29.0/public/app.te


 # Block device access.
+#neverallow appdomain dev_type:blk_file { read write };


android9.0 MTK平台添加分区表

MT8127_Android_scatter.txt 文件添加backup分区

目录
相关文章
|
10天前
|
存储 缓存 监控
【嵌入式SD NAND】基于FATFS/Littlefs文件系统的日志框架实现
综上所述,构建一个基于FATFS/Littlefs文件系统的日志框架需要对文件系统的操作有深入理解,并以此为基础设计一套完整的日志处理机制。这样的框架不仅能够确保日志数据的完整性和系统的鲁棒性,同时还能够满足嵌入式系统对于性能和资源使用的严格要求。
32 4
|
3月前
|
存储 Linux Android开发
Android存储分区与Rockchip平台的分区命名及U-Boot配置
Android存储分区与Rockchip平台的分区命名及U-Boot配置
85 0
|
3月前
|
存储 Linux 内存技术
嵌入式linux下获取flash分区大小
嵌入式linux下获取flash分区大小
43 0
|
安全 Unix Linux
关于嵌入式Linux系统flash分区设计及文件系统格式选择的一些浅见
嵌入式系统应用程序升级是比较频繁的,对于flash的合理划分与文件系统选型就显得尤为关键。
324 0
|
固态存储 测试技术 BI
基于TMS320C6657+ZYNQ7035/45平台-PL端 NVMe 的 exFAT 文件系统 FPGA IP
基于广州星嵌电子科技有限公司TMS320C6657+ZYNQ7035/45评估板的PL端实现标准NVMe 1.3协议的Host端,即纯逻辑实现NVMe Host IP设计分享。
基于TMS320C6657+ZYNQ7035/45平台-PL端 NVMe 的 exFAT 文件系统 FPGA IP
|
存储 IDE 编译器
基于STM32完成FATFS文件系统移植与运用--这是完全免费开源的FAT文件系统
基于STM32完成FATFS文件系统移植与运用--这是完全免费开源的FAT文件系统
549 0
基于STM32完成FATFS文件系统移植与运用--这是完全免费开源的FAT文件系统
|
Shell 虚拟化 C++
|
Linux
下一代Linux文件系统Btrfs走向成熟
从Linux内核2.6.29版开始,Btrfs文件系统正式落户Linux系统。最近,科技专栏作家Sean Michael Kerner撰文认为,作为下一代Linux文件系统,Btrfs已经逐渐成熟,或许会慢慢取代目前流行的缺省文件系统Ext3和Ext4等。
1078 0