diff --git a/tools/blupdater/CMakeLists.txt b/tools/blupdater/CMakeLists.txt index 56f4c040f..990529f70 100644 --- a/tools/blupdater/CMakeLists.txt +++ b/tools/blupdater/CMakeLists.txt @@ -3,7 +3,8 @@ if(NOT ${KK_EMULATOR}) main.c startup.s ../bootloader/bl_mpu.c - ../bootloader/isr.s) + ../bootloader/isr.s + header.s) include_directories( ${CMAKE_SOURCE_DIR}/include diff --git a/tools/blupdater/blupdater.ld b/tools/blupdater/blupdater.ld index 5dffb172b..c69522a0c 100644 --- a/tools/blupdater/blupdater.ld +++ b/tools/blupdater/blupdater.ld @@ -5,7 +5,7 @@ MEMORY { /* blupdater ROM */ - rom (rx) : ORIGIN = 0x08060100, LENGTH = 0x00100000 - 0x00060100 + rom (rx) : ORIGIN = 0x08060000, LENGTH = 0x00100000 - 0x00060000 /* ram shared by bootloader and firmware, contains msp (blupdater does not use psp) */ ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x0001FF00 @@ -14,6 +14,12 @@ MEMORY comram (rwx) : ORIGIN = 0x2001FF00, LENGTH = 0x100 } +SECTIONS +{ + .header : ALIGN(4) { + KEEP(*(.header)); + } >rom AT >rom +} INCLUDE libopencm3_stm32f2.ld SECTIONS @@ -35,7 +41,7 @@ _comram_end = ORIGIN(comram) + LENGTH(comram); /* potential bootloader/firmware isr vector changes. */ /* this is the msp for the blupdater. Make stacks 8-byte aligned. */ -_stack = _ram_end - 24; +_stack = _ram_end - 24; __stack_chk_guard = _ram_end - 24; /* statics needed for the blupdater */ @@ -51,13 +57,10 @@ _mmhusr_isr = _comram_end - 24; _param_3 = _comram_end - 20; _param_2 = _comram_end - 16; _param_1 = _comram_end - 12; -_timerusr_isr = _comram_end - 8; +_timerusr_isr = _comram_end - 8; _buttonusr_isr = _comram_end - 4; _data_size = SIZEOF(.data); - - - - +_codelen = SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.ARM.exidx) + SIZEOF(.version); diff --git a/tools/blupdater/header.s b/tools/blupdater/header.s new file mode 100644 index 000000000..431a706fa --- /dev/null +++ b/tools/blupdater/header.s @@ -0,0 +1,18 @@ + .syntax unified + + .section .header, "a" + + .type g_header, %object + .size g_header, .-g_header + +g_header: + .byte 'K','P','K','Y' + .word _codelen + .byte 0 // sigindex1 + .byte 0 // sigindex2 + .byte 0 // sigindex3 + .byte 3 // flags: Preserve | UpdateAfter + . = . + 52 // reserved + . = . + 64 // sig1 + . = . + 64 // sig2 + . = . + 64 // sig3 diff --git a/tools/firmware/CMakeLists.txt b/tools/firmware/CMakeLists.txt index 6dad2d07e..358afdb80 100644 --- a/tools/firmware/CMakeLists.txt +++ b/tools/firmware/CMakeLists.txt @@ -3,7 +3,8 @@ if(NOT ${KK_EMULATOR}) keepkey_main.c startup.s ../bootloader/bl_mpu.c - ../bootloader/isr.s) + ../bootloader/isr.s + header.s) include_directories( ${CMAKE_SOURCE_DIR}/include diff --git a/tools/firmware/header.s b/tools/firmware/header.s new file mode 100644 index 000000000..dd5c476a9 --- /dev/null +++ b/tools/firmware/header.s @@ -0,0 +1,18 @@ + .syntax unified + + .section .header, "a" + + .type g_header, %object + .size g_header, .-g_header + +g_header: + .byte 'K','P','K','Y' + .word _codelen + .byte 0 // sigindex1 + .byte 0 // sigindex2 + .byte 0 // sigindex3 + .byte 1 // flags: Preserve + . = . + 52 // reserved + . = . + 64 // sig1 + . = . + 64 // sig2 + . = . + 64 // sig3 diff --git a/tools/firmware/keepkey.ld b/tools/firmware/keepkey.ld index 24dd96582..f16424339 100644 --- a/tools/firmware/keepkey.ld +++ b/tools/firmware/keepkey.ld @@ -5,7 +5,7 @@ MEMORY { /* Firmware ROM */ - rom (rx) : ORIGIN = 0x08060100, LENGTH = 0x00100000 - 0x00060100 + rom (rx) : ORIGIN = 0x08060000, LENGTH = 0x00100000 - 0x00060000 /* ram shared by bootloader and firmware, contains psp */ ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x1F800 @@ -24,6 +24,10 @@ SECTIONS *(confidential) ASSERT ((SIZEOF(.confidential) <= 32K), "Error: Confidential section too large"); } >ram + + .header : ALIGN(4) { + KEEP(*(.header)); + } >rom AT >rom } INCLUDE libopencm3_stm32f2.ld @@ -40,20 +44,19 @@ _ram_end = ORIGIN(ram) + LENGTH(ram); _bram_end = ORIGIN(bram) + LENGTH(bram); _comram_end = ORIGIN(comram) + LENGTH(comram); - /* The following bootloader references can be removed after intermediate releases are completed */ /* protected bootloader statics */ _debug_1 = _bram_end - 16; _uisr = _bram_end - 12; button_sp_ctx = _bram_end - 8; -timer_sp_ctx = _bram_end - 4; +timer_sp_ctx = _bram_end - 4; /* this is a reference to the msp*/ -_mspstack = _bram_end - 24; +_mspstack = _bram_end - 24; /* this is the psp. Make stacks 8-byte aligned. */ _stack = _ram_end - 8; -__stack_chk_guard = _ram_end - 8; +__stack_chk_guard = _ram_end - 8; /* common block vars to be accessed by both bootloader and firmware */ @@ -61,8 +64,10 @@ _mmhusr_isr = _comram_end - 24; _param_3 = _comram_end - 20; _param_2 = _comram_end - 16; _param_1 = _comram_end - 12; -_timerusr_isr = _comram_end - 8; +_timerusr_isr = _comram_end - 8; _buttonusr_isr = _comram_end - 4; _data_size = SIZEOF(.data); + +_codelen = SIZEOF(.text) + SIZEOF(.data) + SIZEOF(.ARM.exidx) + SIZEOF(.version);