-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Changed project to compile via a Makefile * Added a dockerfile for building for, debugging, and flashing embedded ARM processors
- Loading branch information
Showing
12 changed files
with
878 additions
and
133 deletions.
There are no files selected for viewing
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
FROM ubuntu:latest | ||
|
||
# Set up container and time zones | ||
RUN apt-get update && \ | ||
DEBIAN_FRONTEND=noninteractive TZ="America/New_York" \ | ||
apt-get -y install tzdata | ||
|
||
# Download Linux support tools | ||
RUN apt-get install -y \ | ||
build-essential \ | ||
wget \ | ||
curl \ | ||
openocd \ | ||
git \ | ||
gdb-multiarch \ | ||
minicom \ | ||
vim | ||
|
||
# Download setup support for Rasperry Pi Probe | ||
RUN apt-get install -y \ | ||
automake \ | ||
autoconf \ | ||
texinfo \ | ||
libtool \ | ||
libftdi-dev \ | ||
libusb-1.0-0-dev \ | ||
pkg-config | ||
|
||
RUN git clone https://github.com/raspberrypi/openocd.git \ | ||
--branch rp2040 \ | ||
--depth=1 \ | ||
--no-single-branch | ||
|
||
# Build Rasberry Pi Probe Package | ||
RUN cd openocd && ./bootstrap | ||
RUN cd openocd && ./configure | ||
RUN cd openocd && make -j4 && make install | ||
|
||
# Set up a development tools directory | ||
WORKDIR /home/dev | ||
ADD . /home/dev | ||
|
||
RUN echo 'if [ $n -e /home/app/shepherd.ioc ]; then echo \ | ||
" ______ __ __ ______ ______ __ __ ______ ______ _____\n\ | ||
/\ ___\ /\ \_\ \ /\ ___\ /\ == \ /\ \_\ \ /\ ___\ /\ == \ /\ __-.\n\ | ||
\ \___ \ \ \ __ \ \ \ __\ \ \ _-/ \ \ __ \ \ \ __\ \ \ __< \ \ \/\ \ \n\ | ||
\/\_____\ \ \_\ \_\ \ \_____\ \ \_\ \ \_\ \_\ \ \_____\ \ \_\ \_\ \ \____- \n\ | ||
\/_____/ \/_/\/_/ \/_____/ \/_/ \/_/\/_/ \/_____/ \/_/ /_/ \/____/"; fi;' >> ~/.bashrc | ||
|
||
RUN echo 'if [ $n -e /home/app/cerberus.ioc ]; then echo \ | ||
"_________ ___. \n\ | ||
\_ ___ \ __________\_ |__ ___________ __ __ ______\n\ | ||
/ \ \/_/ __ \_ __ \ __ \_/ __ \_ __ \ | \/ ___/\n\ | ||
\ \___\ ___/| | \/ \_\ \ ___/| | \/ | /\___ \ \n\ | ||
\______ /\___ >__| |___ /\___ >__| |____//____ >\n\ | ||
\/ \/ \/ \/ \/ "; fi;' >> ~/.bashrc | ||
|
||
# Install cross compiler | ||
RUN wget -qO- https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 | tar -xvj | ||
|
||
ENV PATH $PATH:/home/dev/gcc-arm-none-eabi-10.3-2021.10/bin | ||
|
||
WORKDIR /home/app |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,212 @@ | ||
########################################################################################################################## | ||
# File automatically-generated by tool: [projectgenerator] version: [3.19.2] date: [Fri May 19 20:12:39 EDT 2023] | ||
########################################################################################################################## | ||
|
||
# ------------------------------------------------ | ||
# Generic Makefile (based on gcc) | ||
# | ||
# ChangeLog : | ||
# 2017-02-10 - Several enhancements + project update mode | ||
# 2015-07-22 - first version | ||
# ------------------------------------------------ | ||
|
||
###################################### | ||
# target | ||
###################################### | ||
TARGET = cerberus | ||
|
||
$(info _________ ___.) | ||
$(info \_ ___ \ __________\_ |__ ___________ __ __ ______) | ||
$(info / \ \/_/ __ \_ __ \ __ \_/ __ \_ __ \ | \/ ___/) | ||
$(info \ \___\ ___/| | \/ \_\ \ ___/| | \/ | /\___ \ ) | ||
$(info .\______ /\___ >__| |___ /\___ >__| |____//____ >) | ||
$(info ........\/ \/ \/ \/ \/ ) | ||
|
||
###################################### | ||
# building variables | ||
###################################### | ||
# debug build? | ||
DEBUG = 1 | ||
# optimization | ||
OPT = -Og | ||
|
||
|
||
####################################### | ||
# paths | ||
####################################### | ||
# Build path | ||
BUILD_DIR = build | ||
|
||
###################################### | ||
# source | ||
###################################### | ||
# C sources | ||
C_SOURCES = \ | ||
Core/Src/main.c \ | ||
Core/Src/freertos.c \ | ||
Core/Src/stm32f4xx_it.c \ | ||
Core/Src/stm32f4xx_hal_msp.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ | ||
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ | ||
Core/Src/system_stm32f4xx.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/croutine.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/list.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/queue.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/tasks.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/timers.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \ | ||
Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c | ||
|
||
# ASM sources | ||
ASM_SOURCES = \ | ||
startup_stm32f405xx.s | ||
|
||
|
||
####################################### | ||
# binaries | ||
####################################### | ||
PREFIX = arm-none-eabi- | ||
# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) | ||
# either it can be added to the PATH environment variable. | ||
ifdef GCC_PATH | ||
CC = $(GCC_PATH)/$(PREFIX)gcc | ||
AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp | ||
CP = $(GCC_PATH)/$(PREFIX)objcopy | ||
SZ = $(GCC_PATH)/$(PREFIX)size | ||
else | ||
CC = $(PREFIX)gcc | ||
AS = $(PREFIX)gcc -x assembler-with-cpp | ||
CP = $(PREFIX)objcopy | ||
SZ = $(PREFIX)size | ||
endif | ||
HEX = $(CP) -O ihex | ||
BIN = $(CP) -O binary -S | ||
|
||
####################################### | ||
# CFLAGS | ||
####################################### | ||
# cpu | ||
CPU = -mcpu=cortex-m4 | ||
|
||
# fpu | ||
FPU = -mfpu=fpv4-sp-d16 | ||
|
||
# float-abi | ||
FLOAT-ABI = -mfloat-abi=hard | ||
|
||
# mcu | ||
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) | ||
|
||
# macros for gcc | ||
# AS defines | ||
AS_DEFS = | ||
|
||
# C defines | ||
C_DEFS = \ | ||
-DUSE_HAL_DRIVER \ | ||
-DSTM32F405xx | ||
|
||
|
||
# AS includes | ||
AS_INCLUDES = \ | ||
-ICore/Inc | ||
|
||
# C includes | ||
C_INCLUDES = \ | ||
-ICore/Inc \ | ||
-IDrivers/STM32F4xx_HAL_Driver/Inc \ | ||
-IDrivers/STM32F4xx_HAL_Driver/Inc/Legacy \ | ||
-IMiddlewares/Third_Party/FreeRTOS/Source/include \ | ||
-IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \ | ||
-IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \ | ||
-IDrivers/CMSIS/Device/ST/STM32F4xx/Include \ | ||
-IDrivers/CMSIS/Include | ||
|
||
|
||
# compile gcc flags | ||
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections | ||
|
||
CFLAGS += $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections | ||
|
||
ifeq ($(DEBUG), 1) | ||
CFLAGS += -g -gdwarf-2 | ||
endif | ||
|
||
|
||
# Generate dependency information | ||
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" | ||
|
||
|
||
####################################### | ||
# LDFLAGS | ||
####################################### | ||
# link script | ||
LDSCRIPT = STM32F405RGTx_FLASH.ld | ||
|
||
# libraries | ||
LIBS = -lc -lm -lnosys | ||
LIBDIR = | ||
LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections | ||
|
||
# default action: build all | ||
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin | ||
|
||
|
||
####################################### | ||
# build the application | ||
####################################### | ||
# list of objects | ||
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) | ||
vpath %.c $(sort $(dir $(C_SOURCES))) | ||
# list of ASM program objects | ||
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) | ||
vpath %.s $(sort $(dir $(ASM_SOURCES))) | ||
|
||
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) | ||
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ | ||
|
||
$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) | ||
$(AS) -c $(CFLAGS) $< -o $@ | ||
|
||
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile | ||
$(CC) $(OBJECTS) $(LDFLAGS) -o $@ | ||
$(SZ) $@ | ||
|
||
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) | ||
$(HEX) $< $@ | ||
|
||
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) | ||
$(BIN) $< $@ | ||
|
||
$(BUILD_DIR): | ||
mkdir $@ | ||
|
||
####################################### | ||
# clean up | ||
####################################### | ||
clean: | ||
-rm -fR $(BUILD_DIR) | ||
|
||
####################################### | ||
# dependencies | ||
####################################### | ||
-include $(wildcard $(BUILD_DIR)/*.d) | ||
|
||
# *** EOF *** |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,40 @@ | ||
# Cerberus | ||
FreeRTOS Application that runs on MPU22A | ||
|
||
## Setting up Docker Environment | ||
For initial installation, visit here: https://nerdocs.atlassian.net/wiki/spaces/NER/pages/108888108/Setting+Up+STM32+Dev+Env | ||
|
||
## Start Container on MacOS/Linux | ||
In any terminal that is in the directory: | ||
|
||
# if need to rebuild image | ||
docker image prune -a | ||
sudo docker build -f ./Dockerfile -t ner-gcc-arm . | ||
|
||
sudo docker run --rm -it --privileged -v "$PWD:/home/app" ner-gcc-arm:latest bash | ||
|
||
## Start Container on Windows | ||
In any terminal that is in the directory: | ||
|
||
# if need to rebuild image | ||
docker image prune -a | ||
docker build -f ./Dockerfile -t ner-gcc-arm . | ||
|
||
docker run --rm -it --privileged -v "$(PWD):/home/app" ner-gcc-arm:latest bash | ||
|
||
# mounting probe | ||
# in another terminal run wsl -d ubuntu | ||
usbipd wsl list | ||
usbipd wsl attach --distribution=ubuntu --busid=<BUSID> | ||
# close the other wsl window, the device should be mounted to any wsl instance | ||
|
||
## Tools / Utils | ||
|
||
# to build project | ||
make all | ||
|
||
# to open a serial port (make sure /dev/tty0/ACM0 exists first) | ||
minicom -b 115200 -o -D /dev/ttyACM0 | ||
|
||
# to flash STM board with Raspberry Pi Probe (WIP) | ||
openocd -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg -c "adapter speed 5000" -c "program ./build/cerberus.elf verify reset exit" |
Oops, something went wrong.