refactor makefiles, document how to build
This commit is contained in:
parent
9ff5dc6373
commit
0c461bb5d8
@ -1,93 +1,24 @@
|
|||||||
CC=arm-none-eabi-gcc
|
|
||||||
CP=arm-none-eabi-objcopy
|
|
||||||
SZ=arm-none-eabi-size
|
|
||||||
AR=arm-none-eabi-ar
|
|
||||||
|
|
||||||
# ST related
|
all:
|
||||||
SRC = src/main.c src/init.c src/redirect.c src/flash.c src/rng.c src/led.c src/device.c
|
$(MAKE) -f application.mk -j8
|
||||||
SRC += src/fifo.c src/crypto.c src/attestation.c
|
|
||||||
SRC += src/startup_stm32l432xx.s src/system_stm32l4xx.c
|
|
||||||
SRC += $(wildcard lib/*.c) $(wildcard lib/usbd/*.c)
|
|
||||||
|
|
||||||
# FIDO2 lib
|
boot:
|
||||||
SRC += ../../fido2/util.c ../../fido2/u2f.c ../../fido2/test_power.c
|
$(MAKE) -f bootloader.mk -j8
|
||||||
SRC += ../../fido2/stubs.c ../../fido2/log.c ../../fido2/ctaphid.c ../../fido2/ctap.c
|
|
||||||
SRC += ../../fido2/ctap_parse.c ../../fido2/main.c
|
|
||||||
|
|
||||||
# Crypto libs
|
|
||||||
SRC += ../../crypto/sha256/sha256.c ../../crypto/micro-ecc/uECC.c ../../crypto/tiny-AES-c/aes.c
|
|
||||||
|
|
||||||
|
|
||||||
OBJ1=$(SRC:.c=.o)
|
|
||||||
OBJ=$(OBJ1:.s=.o)
|
|
||||||
|
|
||||||
INC = -Isrc/ -Isrc/cmsis/ -Ilib/ -Ilib/usbd/ -I../../fido2/ -I../../fido2/extensions
|
|
||||||
INC += -I../../tinycbor/src -I../../crypto/sha256 -I../../crypto/micro-ecc
|
|
||||||
INC += -I../../crypto/tiny-AES-c
|
|
||||||
|
|
||||||
SEARCH=-L../../tinycbor/lib
|
|
||||||
|
|
||||||
LDSCRIPT=stm32l432xx.ld
|
|
||||||
|
|
||||||
CFLAGS= $(INC)
|
|
||||||
|
|
||||||
TARGET=solo
|
|
||||||
HW=-mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb
|
|
||||||
|
|
||||||
# Nucleo board
|
|
||||||
#CHIP=STM32L432xx
|
|
||||||
# Solo
|
|
||||||
CHIP=STM32L442xx
|
|
||||||
|
|
||||||
DEFINES = -D$(CHIP) -DAES256=1 -DUSE_FULL_LL_DRIVER -DAPP_CONFIG=\"app.h\"
|
|
||||||
# DEFINES += -DTEST_SOLO_STM32 -DTEST -DTEST_FIFO=1
|
|
||||||
|
|
||||||
CFLAGS=$(INC) -c $(DEFINES) -Wall -fdata-sections -ffunction-sections $(HW) -g
|
|
||||||
LDFLAGS_LIB=$(HW) $(SEARCH) -specs=nano.specs -specs=nosys.specs -Wl,--gc-sections -u _printf_float -lnosys
|
|
||||||
LDFLAGS=$(HW) $(LDFLAGS_LIB) -T$(LDSCRIPT) -Wl,-Map=$(TARGET).map,--cref -ltinycbor
|
|
||||||
|
|
||||||
|
|
||||||
.PRECIOUS: %.o
|
|
||||||
|
|
||||||
all: $(TARGET).elf
|
|
||||||
$(SZ) $^
|
|
||||||
|
|
||||||
%.o: %.c
|
|
||||||
$(CC) $^ $(HW) -Os $(CFLAGS) -o $@
|
|
||||||
|
|
||||||
../../crypto/micro-ecc/uECC.o: ../../crypto/micro-ecc/uECC.c
|
|
||||||
$(CC) $^ $(HW) -O3 $(CFLAGS) -o $@
|
|
||||||
|
|
||||||
%.o: %.s
|
|
||||||
$(CC) $^ $(HW) -Os $(CFLAGS) -o $@
|
|
||||||
|
|
||||||
%.elf: $(OBJ)
|
|
||||||
$(CC) $^ $(HW) $(LDFLAGS) -o $@
|
|
||||||
|
|
||||||
%.hex: %.elf
|
|
||||||
$(CP) -O ihex $^ $(TARGET).hex
|
|
||||||
|
|
||||||
bootloader:
|
|
||||||
$(MAKE) -f bootloader.mk
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o src/*.o src/*.elf bootloader/*.o $(OBJ)
|
$(MAKE) -f application.mk clean
|
||||||
|
$(MAKE) -f bootloader.mk clean
|
||||||
|
|
||||||
flash: $(TARGET).hex
|
flash: solo.hex bootloader.hex
|
||||||
# STM32_Programmer_CLI -c port=SWD -halt -e all --readunprotect
|
python merge_hex.py solo.hex bootloader.hex all.hex
|
||||||
STM32_Programmer_CLI -c port=SWD -halt -d $(TARGET).hex -rst
|
|
||||||
|
|
||||||
flashall:
|
|
||||||
#$(MAKE) -f bootloader.mk -j8
|
|
||||||
python .\merge_hex.py .\solo.hex .\bootloader.hex all.hex
|
|
||||||
STM32_Programmer_CLI -c port=SWD -halt -e all --readunprotect
|
STM32_Programmer_CLI -c port=SWD -halt -e all --readunprotect
|
||||||
STM32_Programmer_CLI -c port=SWD -halt -d all.hex -rst
|
STM32_Programmer_CLI -c port=SWD -halt -d all.hex -rst
|
||||||
|
|
||||||
detach:
|
bootloader.hex:
|
||||||
STM32_Programmer_CLI -c port=usb1 -ob nBOOT0=1
|
echo "You need to build the bootloader first."
|
||||||
|
|
||||||
|
solo.hex:
|
||||||
|
echo "You need to build the application first."
|
||||||
|
|
||||||
cbor:
|
cbor:
|
||||||
cd ../../tinycbor/ && make clean
|
$(MAKE) -f application.mk -j8 cbor
|
||||||
cd ../../tinycbor/ && make CC="$(CC)" AR=$(AR) \
|
|
||||||
LDFLAGS="$(LDFLAGS_LIB)" \
|
|
||||||
CFLAGS="$(CFLAGS)"
|
|
||||||
|
34
targets/stm32l442/README.md
Normal file
34
targets/stm32l442/README.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# STM32L4xx Solo
|
||||||
|
|
||||||
|
This documents how to build the firmware for Solo for the STM32L4xx microcontroller.
|
||||||
|
|
||||||
|
# Building
|
||||||
|
|
||||||
|
First build the cbor library.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make cbor
|
||||||
|
```
|
||||||
|
|
||||||
|
Now build the Solo bootloader.
|
||||||
|
|
||||||
|
```
|
||||||
|
make boot
|
||||||
|
```
|
||||||
|
|
||||||
|
Now build the Solo application.
|
||||||
|
|
||||||
|
```
|
||||||
|
make clean # remove object files from bootloader, keep bootloader.hex
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
Merge the two files together. This script also patches a spot in memory to
|
||||||
|
allow the bootloader to boot the application. This memory spot is later used for
|
||||||
|
signed firmware updates.
|
||||||
|
|
||||||
|
```
|
||||||
|
python merge_hex.py solo.hex bootloader.hex all.hex
|
||||||
|
```
|
||||||
|
|
||||||
|
You can now program Solo with `all.hex`.
|
80
targets/stm32l442/application.mk
Normal file
80
targets/stm32l442/application.mk
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
CC=arm-none-eabi-gcc
|
||||||
|
CP=arm-none-eabi-objcopy
|
||||||
|
SZ=arm-none-eabi-size
|
||||||
|
AR=arm-none-eabi-ar
|
||||||
|
|
||||||
|
# ST related
|
||||||
|
SRC = src/main.c src/init.c src/redirect.c src/flash.c src/rng.c src/led.c src/device.c
|
||||||
|
SRC += src/fifo.c src/crypto.c src/attestation.c
|
||||||
|
SRC += src/startup_stm32l432xx.s src/system_stm32l4xx.c
|
||||||
|
SRC += $(wildcard lib/*.c) $(wildcard lib/usbd/*.c)
|
||||||
|
|
||||||
|
# FIDO2 lib
|
||||||
|
SRC += ../../fido2/util.c ../../fido2/u2f.c ../../fido2/test_power.c
|
||||||
|
SRC += ../../fido2/stubs.c ../../fido2/log.c ../../fido2/ctaphid.c ../../fido2/ctap.c
|
||||||
|
SRC += ../../fido2/ctap_parse.c ../../fido2/main.c
|
||||||
|
|
||||||
|
# Crypto libs
|
||||||
|
SRC += ../../crypto/sha256/sha256.c ../../crypto/micro-ecc/uECC.c ../../crypto/tiny-AES-c/aes.c
|
||||||
|
|
||||||
|
|
||||||
|
OBJ1=$(SRC:.c=.o)
|
||||||
|
OBJ=$(OBJ1:.s=.o)
|
||||||
|
|
||||||
|
INC = -Isrc/ -Isrc/cmsis/ -Ilib/ -Ilib/usbd/ -I../../fido2/ -I../../fido2/extensions
|
||||||
|
INC += -I../../tinycbor/src -I../../crypto/sha256 -I../../crypto/micro-ecc
|
||||||
|
INC += -I../../crypto/tiny-AES-c
|
||||||
|
|
||||||
|
SEARCH=-L../../tinycbor/lib
|
||||||
|
|
||||||
|
LDSCRIPT=stm32l432xx.ld
|
||||||
|
|
||||||
|
CFLAGS= $(INC)
|
||||||
|
|
||||||
|
TARGET=solo
|
||||||
|
HW=-mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb
|
||||||
|
|
||||||
|
# Nucleo board
|
||||||
|
#CHIP=STM32L432xx
|
||||||
|
# Solo
|
||||||
|
CHIP=STM32L442xx
|
||||||
|
|
||||||
|
DEFINES = -D$(CHIP) -DAES256=1 -DUSE_FULL_LL_DRIVER -DAPP_CONFIG=\"app.h\"
|
||||||
|
# DEFINES += -DTEST_SOLO_STM32 -DTEST -DTEST_FIFO=1
|
||||||
|
|
||||||
|
CFLAGS=$(INC) -c $(DEFINES) -Wall -fdata-sections -ffunction-sections $(HW) -g
|
||||||
|
LDFLAGS_LIB=$(HW) $(SEARCH) -specs=nano.specs -specs=nosys.specs -Wl,--gc-sections -u _printf_float -lnosys
|
||||||
|
LDFLAGS=$(HW) $(LDFLAGS_LIB) -T$(LDSCRIPT) -Wl,-Map=$(TARGET).map,--cref -ltinycbor
|
||||||
|
|
||||||
|
|
||||||
|
.PRECIOUS: %.o
|
||||||
|
|
||||||
|
all: $(TARGET).elf
|
||||||
|
$(SZ) $^
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $^ $(HW) -Os $(CFLAGS) -o $@
|
||||||
|
|
||||||
|
../../crypto/micro-ecc/uECC.o: ../../crypto/micro-ecc/uECC.c
|
||||||
|
$(CC) $^ $(HW) -O3 $(CFLAGS) -o $@
|
||||||
|
|
||||||
|
%.o: %.s
|
||||||
|
$(CC) $^ $(HW) -Os $(CFLAGS) -o $@
|
||||||
|
|
||||||
|
%.elf: $(OBJ)
|
||||||
|
$(CC) $^ $(HW) $(LDFLAGS) -o $@
|
||||||
|
|
||||||
|
%.hex: %.elf
|
||||||
|
$(CP) -O ihex $^ $(TARGET).hex
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o src/*.o src/*.elf bootloader/*.o $(OBJ)
|
||||||
|
|
||||||
|
detach:
|
||||||
|
STM32_Programmer_CLI -c port=usb1 -ob nBOOT0=1
|
||||||
|
|
||||||
|
cbor:
|
||||||
|
cd ../../tinycbor/ && make clean
|
||||||
|
cd ../../tinycbor/ && make CC="$(CC)" AR=$(AR) \
|
||||||
|
LDFLAGS="$(LDFLAGS_LIB)" \
|
||||||
|
CFLAGS="$(CFLAGS)"
|
@ -16,10 +16,10 @@ SRC += ../../fido2/stubs.c ../../fido2/log.c ../../fido2/ctaphid.c ../../fido2
|
|||||||
# Crypto libs
|
# Crypto libs
|
||||||
SRC += ../../crypto/sha256/sha256.c ../../crypto/micro-ecc/uECC.c
|
SRC += ../../crypto/sha256/sha256.c ../../crypto/micro-ecc/uECC.c
|
||||||
|
|
||||||
|
|
||||||
OBJ1=$(SRC:.c=.o)
|
OBJ1=$(SRC:.c=.o)
|
||||||
OBJ=$(OBJ1:.s=.o)
|
OBJ=$(OBJ1:.s=.o)
|
||||||
|
|
||||||
|
|
||||||
INC = -Ibootloader/ -Isrc/ -Isrc/cmsis/ -Ilib/ -Ilib/usbd/ -I../../fido2/ -I../../fido2/extensions
|
INC = -Ibootloader/ -Isrc/ -Isrc/cmsis/ -Ilib/ -Ilib/usbd/ -I../../fido2/ -I../../fido2/extensions
|
||||||
INC += -I../../tinycbor/src -I../../crypto/sha256 -I../../crypto/micro-ecc
|
INC += -I../../tinycbor/src -I../../crypto/sha256 -I../../crypto/micro-ecc
|
||||||
INC += -I../../crypto/tiny-AES-c
|
INC += -I../../crypto/tiny-AES-c
|
||||||
@ -49,6 +49,7 @@ LDFLAGS=$(HW) $(LDFLAGS_LIB) -T$(LDSCRIPT) -Wl,-Map=$(TARGET).map,--cref
|
|||||||
all: $(TARGET).elf
|
all: $(TARGET).elf
|
||||||
$(SZ) $^
|
$(SZ) $^
|
||||||
|
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CC) $^ $(HW) -Os $(CFLAGS) -o $@
|
$(CC) $^ $(HW) -Os $(CFLAGS) -o $@
|
||||||
|
|
||||||
@ -66,16 +67,3 @@ all: $(TARGET).elf
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o src/*.o bootloader/*.o src/*.elf $(OBJ)
|
rm -f *.o src/*.o bootloader/*.o src/*.elf $(OBJ)
|
||||||
|
|
||||||
flash: $(TARGET).hex
|
|
||||||
STM32_Programmer_CLI -c port=SWD -halt -e all --readunprotect
|
|
||||||
STM32_Programmer_CLI -c port=SWD -halt -d $(TARGET).hex -rst
|
|
||||||
|
|
||||||
detach:
|
|
||||||
STM32_Programmer_CLI -c port=usb1 -ob nBOOT0=1
|
|
||||||
|
|
||||||
cbor:
|
|
||||||
cd ../../tinycbor/ && make clean
|
|
||||||
cd ../../tinycbor/ && make CC="$(CC)" AR=$(AR) \
|
|
||||||
LDFLAGS="$(LDFLAGS_LIB)" \
|
|
||||||
CFLAGS="$(CFLAGS)"
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user