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
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"
);
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 };