Configuration (via .config), single entry point for options

pull/21/head
Daniele Lacamera 2019-10-10 20:39:25 +02:00
parent 45064ced50
commit ca9ffbab7c
24 changed files with 210 additions and 85 deletions

8
.gitignore vendored
View File

@ -67,11 +67,17 @@ tools/ecc256/ecc256_keygen
cscope.out
tags
# Generated files using target.h
# Generated files
.wolfboot-config
include/target.h
.wolfboot-arch-offset
.wolfboot-offset
.wolfboot-partition-size
.bootloader-partition-size
# Test tools
tools/test-expect-version/test-expect-version
tools/test-update-server/server
config/*.ld

View File

@ -3,34 +3,13 @@
# Configure by passing alternate values
# via environment variables.
#
# Default values:
ARCH?=ARM
TARGET?=stm32f4
SIGN?=ED25519
KINETIS?=$(HOME)/src/FRDM-K64F
KINETIS_CPU=MK64FN1M0VLL12
KINETIS_DRIVERS?=$(KINETIS)/devices/MK64F12
KINETIS_CMSIS?=$(KINETIS)/CMSIS
FREEDOM_E_SDK?=$(HOME)/src/freedom-e-sdk
DEBUG?=0
VTOR?=1
CORTEX_M0?=0
NO_ASM?=0
EXT_FLASH?=0
SPI_FLASH?=0
ALLOW_DOWNGRADE?=0
NVM_FLASH_WRITEONCE?=0
WOLFBOOT_VERSION?=0
V?=0
SPMATH?=1
RAM_CODE?=0
DUALBANK_SWAP=0
# Configuration values: see tools/config.mk
-include .config
include tools/config.mk
## Initializers
CFLAGS:=-D__WOLFBOOT -DWOLFBOOT_VERSION=$(WOLFBOOT_VERSION)UL
LSCRIPT:=hal/$(TARGET).ld
LSCRIPT:=config/target.ld
LDFLAGS:=-T $(LSCRIPT) -Wl,-gc-sections -Wl,-Map=wolfboot.map -ffreestanding -nostartfiles
OBJS:= \
./hal/$(TARGET).o \
@ -43,6 +22,7 @@ OBJS:= \
./lib/wolfssl/wolfcrypt/src/wolfmath.o \
./lib/wolfssl/wolfcrypt/src/fe_low_mem.o
## Architecture/CPU configuration
include arch.mk
@ -136,26 +116,23 @@ wolfboot.hex: wolfboot.elf
$(Q)$(OBJCOPY) -O ihex $^ $@
align: wolfboot-align.bin
wolfboot-align.bin: wolfboot.bin
@cat include/target.h | grep WOLFBOOT_PARTITION_BOOT_ADDRESS | tr -d "\n\r" | sed -e "s/.*[ ]//g" > .wolfboot-offset
@printf "%d" `cat .wolfboot-offset` > .wolfboot-offset
.bootloader-partition-size:
@printf "%d" $(WOLFBOOT_PARTITION_BOOT_ADDRESS) > .wolfboot-offset
@printf "%d" $(ARCH_FLASH_OFFSET) > .wolfboot-arch-offset
@expr `cat .wolfboot-offset` - `cat .wolfboot-arch-offset` > .wolfboot-partition-size
@dd if=/dev/zero bs=`cat .wolfboot-partition-size` count=1 2>/dev/null | tr "\000" "\377" > $(@)
@#rm -f .wolfboot-partition-size .wolfboot-offset .wolfboot-arch-offset
@dd if=$^ of=$(@) conv=notrunc 2>/dev/null
@expr `cat .wolfboot-offset` - `cat .wolfboot-arch-offset` > .bootloader-partition-size
@rm -f .wolfboot-offset .wolfboot-arch-offset
wolfboot-align.bin: .bootloader-partition-size wolfboot.bin
@dd if=/dev/zero bs=`cat .bootloader-partition-size` count=1 2>/dev/null | tr "\000" "\377" > $(@)
@dd if=wolfboot.bin of=$(@) conv=notrunc 2>/dev/null
@echo
@echo "\t[SIZE]"
@$(SIZE) wolfboot.elf
@echo
test-app/image.bin:
@make -C test-app TARGET=$(TARGET) EXT_FLASH=$(EXT_FLASH) SPI_FLASH=$(SPI_FLASH) ARCH=$(ARCH) \
V=$(V) RAM_CODE=$(RAM_CODE) WOLFBOOT_VERSION=$(WOLFBOOT_VERSION)\
KINETIS=$(KINETIS) KINETIS_CPU=$(KINETIS_CPU) KINETIS_DRIVERS=$(KINETIS_DRIVERS) \
KINETIS_CMSIS=$(KINETIS_CMSIS) NVM_FLASH_WRITEONCE=$(NVM_FLASH_WRITEONCE) \
FREEDOM_E_SDK=$(FREEDOM_E_SDK)
test-app/image.bin: wolfboot-align.bin
@make -C test-app
@rm -f src/*.o hal/*.o
@$(SIZE) test-app/image.elf
@ -173,10 +150,15 @@ factory.bin: $(BOOT_IMG) wolfboot-align.bin $(PRIVATE_KEY)
@echo "\t[MERGE] $@"
@cat wolfboot-align.bin test-app/image_v1_signed.bin > $@
wolfboot.elf: $(OBJS) $(LSCRIPT)
wolfboot.elf: include/target.h $(OBJS) $(LSCRIPT)
@echo "\t[LD] $@"
$(Q)$(LD) $(LDFLAGS) -Wl,--start-group $(OBJS) -Wl,--end-group -o $@
$(LSCRIPT): hal/$(TARGET).ld .bootloader-partition-size FORCE
@cat hal/$(TARGET).ld | \
sed -e "s/##WOLFBOOT_PARTITION_BOOT_ADDRESS##/`cat .bootloader-partition-size`/g" \
> $@
src/ed25519_pub_key.c: ed25519.der
src/ecc256_pub_key.c: ecc256.der
@ -185,12 +167,23 @@ keys: $(PRIVATE_KEY)
clean:
@find . -type f -name "*.o" | xargs rm -f
@rm -f *.bin *.elf wolfboot.map *.bin *.hex
@rm -f *.bin *.elf wolfboot.map *.bin *.hex config/target.ld
@make -C test-app clean
distclean: clean
@rm -f *.pem *.der tags ./src/ed25519_pub_key.c ./src/ecc256_pub_key.c
@rm -f *.pem *.der tags ./src/ed25519_pub_key.c ./src/ecc256_pub_key.c include/target.h
include/target.h: include/target.h.in FORCE
@cat include/target.h.in | \
sed -e "s/##WOLFBOOT_PARTITION_SIZE##/$(WOLFBOOT_PARTITION_SIZE)/g" | \
sed -e "s/##WOLFBOOT_SECTOR_SIZE##/$(WOLFBOOT_SECTOR_SIZE)/g" | \
sed -e "s/##WOLFBOOT_PARTITION_BOOT_ADDRESS##/$(WOLFBOOT_PARTITION_BOOT_ADDRESS)/g" | \
sed -e "s/##WOLFBOOT_PARTITION_UPDATE_ADDRESS##/$(WOLFBOOT_PARTITION_UPDATE_ADDRESS)/g" | \
sed -e "s/##WOLFBOOT_PARTITION_SWAP_ADDRESS##/$(WOLFBOOT_PARTITION_SWAP_ADDRESS)/g" \
> $@
config: FORCE
make -C config
%.o:%.c
@echo "\t[CC-$(ARCH)] $@"
@ -202,3 +195,4 @@ distclean: clean
FORCE:
.PHONY: FORCE clean

8
config/Makefile 100644
View File

@ -0,0 +1,8 @@
-include ../.config
include ../tools/config.mk
config:
rm -f ../config/target.ld
rm -f ../.config
rm -f ../include/target.h
@$(foreach q, $(CONFIG_VARS), a=$($q); echo -n $q \? [$$a] :; a=$($q); read SH_$q; test -z $$SH_$q && SH_$q=$$a; echo "$q?=$$SH_$q" >> ../.config;)

View File

@ -0,0 +1,21 @@
ARCH?=RISCV
TARGET?=hifive1
SIGN?=ECC256
FREEDOM_E_SDK?=~/src/freedom-e-sdk
DEBUG?=0
VTOR?=1
CORTEX_M0?=0
NO_ASM?=1
ALLOW_DOWNGRADE?=0
NVM_FLASH_WRITEONCE?=0
WOLFBOOT_VERSION?=1
V?=0
SPMATH?=1
RAM_CODE?=1
DUALBANK_SWAP?=0
IMAGE_HEADER_SIZE?=256
WOLFBOOT_PARTITION_SIZE?=0x80000
WOLFBOOT_SECTOR_SIZE?=0x1000
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x20020000
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x20060000
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x200A0000

View File

@ -0,0 +1,22 @@
ARCH?=ARM
TARGET?=stm32f7
SIGN?=ECC256
DEBUG?=0
VTOR?=1
CORTEX_M0?=0
NO_ASM?=0
EXT_FLASH?=0
SPI_FLASH?=0
ALLOW_DOWNGRADE?=0
NVM_FLASH_WRITEONCE?=0
WOLFBOOT_VERSION?=1
V?=0
SPMATH?=1
RAM_CODE?=1
DUALBANK_SWAP?=1
IMAGE_HEADER_SIZE?=256
WOLFBOOT_PARTITION_SIZE?=0x80000
WOLFBOOT_SECTOR_SIZE?=0x20000
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x8020000
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x8120000
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x0

View File

@ -0,0 +1,4 @@
TARGET=stm32wb
SIGN=ECC256
WOLFBOOT_PARTITION_BOOT_ADDRESS=0xA000
WOLFBOOT_PARTITION_SIZE=0x4000

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x0010000
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x20002800, LENGTH = 0xD800
}

View File

@ -4,7 +4,7 @@ ENTRY( _reset )
MEMORY
{
FLASH(rxai!w) : ORIGIN = 0x20010000, LENGTH = 64K
FLASH(rxai!w) : ORIGIN = 0x20010000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM(wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K
}

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x000A000
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x1FFF0000, LENGTH = 64K
}

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x0001f000, LENGTH = 0x0010000
FLASH (rx) : ORIGIN = 0x0001f000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x20002800, LENGTH = 0xD800
}

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x0010000
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x4000
}

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x001FFE0
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00010000
}
@ -16,6 +16,13 @@ SECTIONS
_end_text = .;
} > FLASH
.edidx :
{
. = ALIGN(4);
*(.ARM.exidx*)
} > FLASH
_stored_data = .;
.data : AT (_stored_data)
{

View File

@ -489,7 +489,9 @@ void RAMFUNCTION fork_bootloader(void)
flash_erase_sector(i);
hal_flash_write(WOLFBOOT_ORIG_BOOTLOADER, bootloader_copy_mem, BOOTLOADER_SIZE);
hal_flash_lock();
arch_reboot();
#ifdef __WOLFBOOT
//arch_reboot();
#endif
}

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 0x001FFE0
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 /* mapping TCM only */
}
@ -15,6 +15,12 @@ SECTIONS
. = ALIGN(4);
_end_text = .;
} > FLASH
.edidx :
{
. = ALIGN(4);
*(.ARM.exidx*)
} > FLASH
_stored_data = .;
.data : AT (_stored_data)

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x8000
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008FFF
}

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x8000
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 20K
}

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x8000
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000
}
@ -15,6 +15,12 @@ SECTIONS
. = ALIGN(4);
_end_text = .;
} > FLASH
.edidx :
{
. = ALIGN(4);
*(.ARM.exidx*)
} > FLASH
_stored_data = .;
.data : AT (_stored_data)

View File

@ -2,6 +2,8 @@
*
* User configurable build-time options for bootloader and application offsets
*
* target.h is automatically generated using the template in target.h.in by running
* "make config".
*
* Copyright (C) 2019 wolfSSL Inc.
*
@ -25,30 +27,11 @@
#ifndef H_TARGETS_TARGET_
#define H_TARGETS_TARGET_
/* Example flash partitioning.
* Ensure that your firmware entry point is
* at FLASH_AREA_IMAGE_0_OFFSET + 0x100
*/
#define WOLFBOOT_SECTOR_SIZE ##WOLFBOOT_SECTOR_SIZE##
#define WOLFBOOT_PARTITION_BOOT_ADDRESS ##WOLFBOOT_PARTITION_BOOT_ADDRESS##
#define WOLFBOOT_PARTITION_SIZE ##WOLFBOOT_PARTITION_SIZE##
#define WOLFBOOT_PARTITION_UPDATE_ADDRESS ##WOLFBOOT_PARTITION_UPDATE_ADDRESS##
#define WOLFBOOT_PARTITION_SWAP_ADDRESS ##WOLFBOOT_PARTITION_SWAP_ADDRESS##
#define WOLFBOOT_SECTOR_SIZE 0x20000
#define WOLFBOOT_PARTITION_BOOT_ADDRESS 0x20000
#ifdef EXT_FLASH
/* Test configuration with 1MB external memory */
/* (Addresses are relative to the beginning of the ext)*/
#define WOLFBOOT_PARTITION_SIZE 0x80000
#define WOLFBOOT_PARTITION_UPDATE_ADDRESS 0x00000
#define WOLFBOOT_PARTITION_SWAP_ADDRESS 0x80000
#else
/* Test configuration with internal memory */
#define WOLFBOOT_PARTITION_SIZE 0x20000
#define WOLFBOOT_PARTITION_UPDATE_ADDRESS 0x40000
#define WOLFBOOT_PARTITION_SWAP_ADDRESS 0x60000
#endif
#endif /* !H_TARGETS_TARGET_ */

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x08020100, LENGTH = 0x001FF00
FLASH (rx) : ORIGIN = ##WOLFBOOT_TEST_APP_ADDRESS##, LENGTH = ##WOLFBOOT_TEST_APP_SIZE##
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00010000
}
@ -25,6 +25,8 @@ SECTIONS
_start_data = .;
KEEP(*(.data*))
. = ALIGN(4);
KEEP(*(.ramcode))
. = ALIGN(4);
_end_data = .;
} > RAM

View File

@ -1,6 +1,6 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x0020100, LENGTH = 0x005FFF
FLASH (rx) : ORIGIN = ##WOLFBOOT_TEST_APP_ADDRESS##, LENGTH = ##WOLFBOOT_TEST_APP_SIZE##
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 16K /* Run in lowmem */
}
@ -25,6 +25,8 @@ SECTIONS
_start_data = .;
KEEP(*(.data*))
. = ALIGN(4);
KEEP(*(.ramcode))
. = ALIGN(4);
_end_data = .;
} > RAM

View File

@ -1,3 +1,5 @@
-include ../.config
-include ../tools/config.mk
TARGET?=none
ARCH?=ARM
KINETIS_CMSIS?=$(KINETIS)/CMSIS
@ -19,9 +21,11 @@ ifeq ($(V),0)
Q=@
endif
LSCRIPT:=$(ARCH).ld
ENTRY_POINT=`cat .entry-point-address`
LSCRIPT:=../config/target-app.ld
LSCRIPT_TEMPLATE:=$(ARCH).ld
ifeq ($(TARGET),stm32f7)
LSCRIPT=ARM-stm32f7.ld
LSCRIPT_TEMPLATE=ARM-stm32f7.ld
CFLAGS+=-DDUALBANK_SWAP
endif
LDFLAGS:=$(CFLAGS) -T $(LSCRIPT) -Wl,-gc-sections -Wl,-Map=image.map
@ -38,7 +42,7 @@ endif
ifeq ($(TARGET),kinetis)
CFLAGS+= -I$(KINETIS_DRIVERS)/drivers -I$(KINETIS_DRIVERS) -DCPU_$(KINETIS_CPU) -I$(KINETIS_CMSIS)/Include -DDEBUG_CONSOLE_ASSERT_DISABLE=1 -DNVM_FLASH_WRITEONCE=1
APP_OBJS+= $(KINETIS_DRIVERS)/drivers/fsl_clock.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_flash.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_cache.o \
$(KINETIS_DRIVERS)/drivers/fsl_ftfx_controller.o $(KINETIS_DRIVERS)/drivers/fsl_gpio.o
$(KINETIS_DRIVERS)/drivers/fsl_ftfx_controller.o $(KINETIS_DRIVERS)/drivers/fsl_gpio.o
endif
ifeq ($(TARGET),stm32g0)
@ -102,4 +106,20 @@ standalone: image.bin
$(Q)$(CC) $(CFLAGS) -c -o $@ $^
clean:
@rm -f *.bin *.elf tags *.o
@rm -f *.bin *.elf tags *.o $(LSCRIPT)
$(LSCRIPT): $(LSCRIPT_TEMPLATE) FORCE
@printf "%d" $(WOLFBOOT_PARTITION_BOOT_ADDRESS) > .wolfboot-offset
@printf "%d" $(WOLFBOOT_PARTITION_SIZE) > .partition-size
@printf "%d" $(IMAGE_HEADER_SIZE) > .header-size
@expr `cat .wolfboot-offset` + `cat .header-size` > .entry-point
@printf "0x%X" `cat .entry-point` > .entry-point
@expr `cat .partition-size` - `cat .header-size` > .app-size
@printf "0x%X" `cat .app-size` > .app-size
@ cat $(LSCRIPT_TEMPLATE) | \
sed -e "s/##WOLFBOOT_TEST_APP_SIZE##/`cat .app-size`/g" | \
sed -e "s/##WOLFBOOT_TEST_APP_ADDRESS##/`cat .entry-point`/g" \
> $(@)
@rm -f .app-size .entry-point .wolfboot-offset .partition-size .header-size
.PHONY: FORCE clean

View File

@ -4,7 +4,7 @@ ENTRY( _reset )
MEMORY
{
FLASH(rxai!w) : ORIGIN = 0x20020100, LENGTH = 256K - 0x100
FLASH(rxai!w) : ORIGIN = ##WOLFBOOT_TEST_APP_ADDRESS##, LENGTH = ##WOLFBOOT_TEST_APP_SIZE##
RAM(wxa!ri) : ORIGIN = 0x80001000, LENGTH = 12K
}

View File

@ -28,6 +28,8 @@ SECTIONS
_start_data = .;
KEEP(*(.data*))
. = ALIGN(4);
KEEP(*(.ramcode))
. = ALIGN(4);
_end_data = .;
} > RAM

40
tools/config.mk 100644
View File

@ -0,0 +1,40 @@
#Defaults, used by CI
ifeq ($(ARCH),)
ARCH?=ARM
TARGET?=stm32f4
SIGN?=ED25519
KINETIS?=$(HOME)/src/FRDM-K64F
KINETIS_CPU=MK64FN1M0VLL12
KINETIS_DRIVERS?=$(KINETIS)/devices/MK64F12
KINETIS_CMSIS?=$(KINETIS)/CMSIS
FREEDOM_E_SDK?=$(HOME)/src/freedom-e-sdk
DEBUG?=0
VTOR?=1
CORTEX_M0?=0
NO_ASM?=0
EXT_FLASH?=0
SPI_FLASH?=0
ALLOW_DOWNGRADE?=0
NVM_FLASH_WRITEONCE?=0
WOLFBOOT_VERSION?=0
V?=0
SPMATH?=1
RAM_CODE?=0
DUALBANK_SWAP=0
IMAGE_HEADER_SIZE?=256
WOLFBOOT_PARTITION_SIZE?=0x20000
WOLFBOOT_SECTOR_SIZE?=0x20000
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x20000
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x40000
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x60000
endif
CONFIG_VARS:= ARCH TARGET SIGN KINETIS KINETIS_CPU KINETIS_DRIVERS \
KINETIS_CMSIS FREEDOM_E_SDK DEBUG VTOR CORTEX_M0 NO_ASM EXT_FLASH \
SPI_FLASH ALLOW_DOWNGRADE NVM_FLASH_WRITEONCE WOLFBOOT_VERSION V \
SPMATH RAM_CODE DUALBANK_SWAP IMAGE_HEADER_SIZE \
WOLFBOOT_PARTITION_SIZE WOLFBOOT_SECTOR_SIZE \
WOLFBOOT_PARTITION_BOOT_ADDRESS WOLFBOOT_PARTITION_UPDATE_ADDRESS \
WOLFBOOT_PARTITION_SWAP_ADDRESS