AndroidQ(10.0) MTK平台添加新分区
发布日期:2021-06-29 13:07:47 浏览次数:2 分类:技术文章

本文共 10570 字,大约阅读时间需要 35 分钟。

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_IMAGEifdef BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPEINTERNAL_KLOGOIMAGE_FILES := \    $(filter $(TARGET_OUT_KLOGO)/%,$(ALL_DEFAULT_INSTALLED_MODULES))klogoimage_intermediates := \    $(call intermediates-dir-for,PACKAGING,klogo)BUILT_KLOGOIMAGE_TARGET := $(PRODUCT_OUT)/klogo.imgdefine 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-nodepsklogoimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)	$(build-klogoimage-target)else # BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE# we need to ignore the broken klogo link when doing the rsyncIGNORE_KLOGO_LINK := --exclude=klogoendif # BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE# -----------------------------------------------------------------# -----------------------------------------------------------------# odm partition imageifdef 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)/cacheTARGET_OUT_KLOGO := $(PRODUCT_OUT)/klogo.KATI_READONLY := TARGET_OUT_CACHE

build/make/core/main.mk

.PHONY: cacheimagecacheimage: $(INSTALLED_CACHEIMAGE_TARGET).PHONY: klogoimageklogoimage: $(INSTALLED_KLOGOIMAGE_TARGET)# Build files and then package it into the rom formats.PHONY: droidcoredroidcore: $(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)/cacheelse  LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cacheendififdef BOARD_KLOGOIMAGE_FILE_SYSTEM_TYPE  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/klogoendif

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_FMTDEVPATH(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 klogotype klogo_device, dev_type;type klogo_block_device, dev_type;

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

#  add for klogotype 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 klogoallow fsck klogo_block_device:blk_file rw_file_perms;

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

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

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

# add for klogoallow 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 };

转载地址:https://cczheng.blog.csdn.net/article/details/116803600 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android系统预装Chrome并自定义主页
下一篇:FdSanitizer 简介

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月25日 18时07分14秒