DFU 완료 후 전원 래치 Low 방지, zip 파일명에 버전 정보 포함
This commit is contained in:
@@ -25,6 +25,18 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
/* 실제 보드에 DK용 외부 QSPI flash가 없어서 부팅 시 probe 실패를 막음 */
|
||||
&qspi
|
||||
{
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
/* DK 보드 정의에 포함된 MX25R64 외부 flash도 함께 비활성화 */
|
||||
&mx25r64
|
||||
{
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
/* I2C0 핀 재설정: ICM42670P IMU (SCL=P1.14, SDA=P1.15) */
|
||||
&i2c0_default
|
||||
{
|
||||
|
||||
@@ -68,6 +68,8 @@ CONFIG_BT_RX_STACK_SIZE=4096
|
||||
# 애플리케이션이 MCUboot 환경(부트로더)에서 동작(MCUboot: FW 교체 판단, 서명 검증)
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
CONFIG_ZCBOR=y
|
||||
# major.minor.revision+build 형식으로 버전 문자열 지정 (빌드 시스템에서 자동으로 버전 정보 채워 넣음)
|
||||
CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION="0.0.2+0"
|
||||
|
||||
# 내부 Flash Meory 활성화
|
||||
CONFIG_FLASH=y
|
||||
@@ -87,7 +89,17 @@ CONFIG_MCUMGR_TRANSPORT_BT=y
|
||||
# BLE로 수신된 mcumgr 메시지에 대해 읽기/쓰기 권한 허용
|
||||
CONFIG_MCUMGR=y
|
||||
CONFIG_MCUMGR_TRANSPORT_BT=y
|
||||
CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW=y
|
||||
CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW_AUTHEN=y
|
||||
# BLE로 분할 수신된 SMP 패킷 재조립
|
||||
CONFIG_MCUMGR_TRANSPORT_BT_REASSEMBLY=y
|
||||
# DFU image chunk를 받을 mcumgr transport 버퍼 크기
|
||||
CONFIG_MCUMGR_TRANSPORT_NETBUF_SIZE=1024
|
||||
# CBOR data byte string 최대 길이
|
||||
CONFIG_ZCBOR_MAX_STR_LEN=512
|
||||
# DFU 진행 상태를 앱 콜백으로 받기
|
||||
CONFIG_MCUMGR_MGMT_NOTIFICATION_HOOKS=y
|
||||
CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS=y
|
||||
CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS=y
|
||||
# mcumgr 이미지 관리 그룹 활성화 (이미지 업로드, 테스트, 확인, 슬롯 상태 조회)
|
||||
CONFIG_MCUMGR_GRP_IMG=y
|
||||
# mcumgr OS 관리 그룹 활성화 (시스템 정보 조회, 재부팅 등 OS 관련 명령 지원)
|
||||
|
||||
@@ -29,4 +29,49 @@ if(SB_CONFIG_BOOTLOADER_MCUBOOT)
|
||||
CACHE INTERNAL
|
||||
"Extra devicetree overlay for the MCUboot image"
|
||||
)
|
||||
|
||||
list(APPEND mcuboot_EXTRA_ZEPHYR_MODULES
|
||||
"${APP_DIR}/sysbuild/mcuboot_power_hold_module"
|
||||
)
|
||||
list(REMOVE_DUPLICATES mcuboot_EXTRA_ZEPHYR_MODULES)
|
||||
set(
|
||||
mcuboot_EXTRA_ZEPHYR_MODULES
|
||||
"${mcuboot_EXTRA_ZEPHYR_MODULES}"
|
||||
CACHE INTERNAL
|
||||
"Extra Zephyr modules for the MCUboot image"
|
||||
)
|
||||
endif()
|
||||
|
||||
# DFU ZIP 파일명에 MCUboot 서명 버전을 붙인 복사본 생성
|
||||
set(APP_PRJ_CONF "${APP_DIR}/prj.conf")
|
||||
if(EXISTS "${APP_PRJ_CONF}")
|
||||
file(READ "${APP_PRJ_CONF}" APP_PRJ_CONF_TEXT)
|
||||
|
||||
if(APP_PRJ_CONF_TEXT MATCHES "CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION=\"([^\"]+)\"")
|
||||
set(DFU_ZIP_VERSION "${CMAKE_MATCH_1}")
|
||||
set(DFU_ZIP_SUFFIX "${DFU_ZIP_VERSION}")
|
||||
|
||||
# 0.0.1+3 형식은 사용자가 구분하기 쉽도록 1+3만 사용
|
||||
if(DFU_ZIP_VERSION MATCHES "^0\\.0\\.([0-9]+\\+[^+]+)$")
|
||||
set(DFU_ZIP_SUFFIX "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
|
||||
# 파일명에 쓰기 어려운 문자는 밑줄로 치환
|
||||
string(REGEX REPLACE "[^A-Za-z0-9_.+-]" "_" DFU_ZIP_SUFFIX "${DFU_ZIP_SUFFIX}")
|
||||
|
||||
set(DFU_ZIP_SOURCE "${CMAKE_BINARY_DIR}/dfu_application.zip")
|
||||
set(DFU_ZIP_VERSIONED "${CMAKE_BINARY_DIR}/dfu_application_${DFU_ZIP_SUFFIX}.zip")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${DFU_ZIP_VERSIONED}"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${DFU_ZIP_SOURCE}" "${DFU_ZIP_VERSIONED}"
|
||||
DEPENDS "${DFU_ZIP_SOURCE}"
|
||||
COMMENT "Generating versioned DFU ZIP ${DFU_ZIP_VERSIONED}"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(dfu_application_versioned_zip ALL
|
||||
DEPENDS "${DFU_ZIP_VERSIONED}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
#include <zephyr/dt-bindings/gpio/gpio.h>
|
||||
|
||||
/* MCUboot에서 P0.08을 UART0 RX로 잡지 않도록 비활성화 */
|
||||
&uart0 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&gpio0 {
|
||||
power_hold_hog: power_hold_hog {
|
||||
gpio-hog;
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.20.0)
|
||||
|
||||
zephyr_library()
|
||||
zephyr_library_sources(src/mcuboot_power_hold_early.c)
|
||||
@@ -0,0 +1,14 @@
|
||||
#include <zephyr/init.h>
|
||||
#include <hal/nrf_gpio.h>
|
||||
|
||||
#define POWER_HOLD_PIN 8U
|
||||
|
||||
static int mcuboot_power_hold_early_init(void)
|
||||
{
|
||||
nrf_gpio_pin_set(POWER_HOLD_PIN);
|
||||
nrf_gpio_cfg_output(POWER_HOLD_PIN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
SYS_INIT(mcuboot_power_hold_early_init, EARLY, 0);
|
||||
@@ -0,0 +1,2 @@
|
||||
build:
|
||||
cmake: .
|
||||
Reference in New Issue
Block a user