位置:sdk/Kconfig 的 Upgrade 選單,緊接 NOR image filename 設定之後。
以下為目前檔案中的完整定義:
config SPECIAL_OUTPUT
bool "Generate special output files"
depends on (UPGRADE_BOOTLOADER || UPGRADE_IMAGE || UPGRADE_DATA)
default n
help
Generate two extra files beside the normal upgrade package: a ROM
file which holds the bootloader only, and a PKG file which holds
everything but the bootloader. The normal package is not changed.
help_cht
額外產生兩個檔案:只含 bootloader 的 ROM 燒錄檔,以及不含 bootloader 的
PKG 更新檔。原本的更新檔不受影響。
help_chs
额外产生两个文件:只含 bootloader 的 ROM 刻录档,以及不含 bootloader 的
PKG 更新档。原本的更新档不受影响。
config SPECIAL_OUTPUT_BOOTLOADER_ROM_FILENAME
string "Bootloader only ROM filename"
depends on SPECIAL_OUTPUT
default "ITE_BOOT.ROM"
help
The file name of the ROM image which holds the bootloader only.
help_cht
只含 bootloader 的 ROM 燒錄檔的檔案名稱。
help_chs
只含 bootloader 的 ROM 刻录档的文件名。
config SPECIAL_OUTPUT_BOOTLOADER_ROM_SIZE
string "Bootloader only ROM size"
depends on SPECIAL_OUTPUT
default "0x300000"
help
The size of the ROM image which holds the bootloader only. It should
cover the reserved area of the bootloader booting device.
help_cht
只含 bootloader 的 ROM 燒錄檔的檔案大小,需涵蓋 bootloader 開機裝置的保留區。
help_chs
只含 bootloader 的 ROM 刻录档的文件大小,需涵盖 bootloader 开机装置的保留区。
config SPECIAL_OUTPUT_PKG_FILENAME
string "PKG filename without bootloader"
depends on SPECIAL_OUTPUT
default "ITE_APP.PKG"
help
The file name of the package file which does not hold the bootloader.
help_cht
不含 bootloader 的 PKG 更新檔的檔案名稱。
help_chs
不含 bootloader 的 PKG 更新档的文件名。
# SPECIAL_OUTPUT: a ROM file holding the bootloader only, and a PKG# file holding everything but the bootloader. Both are generated# beside the normal package, which is left untouched.if(CFG_SPECIAL_OUTPUT AND NOT(${CMAKE_PROJECT_NAME} STREQUAL bootloader))if(NOT DEFINED bootloader_args)message(FATAL_ERROR "SPECIAL_OUTPUT requires bootloader upgrade data; enable BOOTLOADER_ENABLE and UPGRADE_BOOTLOADER")endif()if(NOT CFG_UPGRADE_IMAGE OR NOT CFG_UPGRADE_DATA)message(FATAL_ERROR "SPECIAL_OUTPUT requires UPGRADE_IMAGE and UPGRADE_DATA to retain the application and selected filesystem data")endif()if("${CFG_SPECIAL_OUTPUT_PKG_FILENAME}" STREQUAL ""
OR "${CFG_SPECIAL_OUTPUT_BOOTLOADER_ROM_FILENAME}" STREQUAL ""
OR "${CFG_SPECIAL_OUTPUT_BOOTLOADER_ROM_SIZE}" STREQUAL "")message(FATAL_ERROR "SPECIAL_OUTPUT requires package filename, ROM filename and ROM size")endif()if("${CFG_SPECIAL_OUTPUT_PKG_FILENAME}" STREQUAL "${CFG_UPGRADE_FILENAME}"
OR "${CFG_SPECIAL_OUTPUT_BOOTLOADER_ROM_FILENAME}" STREQUAL "${CFG_UPGRADE_NOR_IMAGE_FILENAME}"
OR "${CFG_SPECIAL_OUTPUT_PKG_FILENAME}" STREQUAL "${CFG_SPECIAL_OUTPUT_BOOTLOADER_ROM_FILENAME}"
OR "${CFG_SPECIAL_OUTPUT_PKG_FILENAME}" STREQUAL "BOOTLOADER_ONLY.PKG"
OR "${CFG_SPECIAL_OUTPUT_BOOTLOADER_ROM_FILENAME}" STREQUAL "BOOTLOADER_ONLY.PKG")message(FATAL_ERROR "SPECIAL_OUTPUT filenames must be distinct from normal and intermediate outputs")endif()# The application POST_BUILD reads the bootloader output. Without# this dependency, a parallel build can package an older bootloader.if(NOT CFG_UPGRADE_BOOTLOADER_EXTERNAL_PROJECT)if(NOT TARGET bootloader)message(FATAL_ERROR "SPECIAL_OUTPUT requires the internal bootloader target")endif()add_dependencies(${CMAKE_PROJECT_NAME} bootloader)endif()# ${args} carries image + data + reserved areas, but never the# bootloader, which is kept apart in ${bootloader_args}.add_custom_command(
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND pkgtool
ARGS -o ${CFG_SPECIAL_OUTPUT_PKG_FILENAME}${args} --key ${CFG_UPGRADE_ENC_KEY}
COMMAND pkgtool
ARGS -l ${CFG_SPECIAL_OUTPUT_PKG_FILENAME} --key ${CFG_UPGRADE_ENC_KEY})if(DEFINED bootloader_args)unset(special_output_rom_opt)if(DEFINED CFG_UPGRADE_BOOTLOADER_NAND)set(special_output_rom_opt -r)elseif(DEFINED CFG_UPGRADE_BOOTLOADER_NOR)set(special_output_rom_opt -n)elseif(DEFINED CFG_UPGRADE_BOOTLOADER_SD0)set(special_output_rom_opt -w)elseif(DEFINED CFG_UPGRADE_BOOTLOADER_SD1)set(special_output_rom_opt -x)endif()# pkgtool rejects raw data that has no reserved area declared# for its device, so ${reservedargs} has to travel with it.add_custom_command(
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND pkgtool
ARGS -o BOOTLOADER_ONLY.PKG ${reservedargs}${bootloader_args} --key ${CFG_UPGRADE_ENC_KEY}
COMMAND pkgtool
ARGS -s ${CFG_SPECIAL_OUTPUT_BOOTLOADER_ROM_SIZE} -o ${CFG_SPECIAL_OUTPUT_BOOTLOADER_ROM_FILENAME}${special_output_rom_opt} BOOTLOADER_ONLY.PKG --key ${CFG_UPGRADE_ENC_KEY})endif()endif()