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