From f3212cc924dba07acbcf6a7c628b806b976ab528 Mon Sep 17 00:00:00 2001 From: acezhao Date: Tue, 17 Sep 2019 23:22:28 +0800 Subject: [PATCH] add gcc demo --- .../common/{ => include}/riscv_encoding.h | 0 arch/risc-v/common/{ => include}/tos_cpu.h | 0 .../risc-v/common/{ => include}/tos_cpu_def.h | 0 .../common/{ => include}/tos_cpu_types.h | 0 arch/risc-v/common/{ => include}/tos_fault.h | 0 board/QEMU_Spike/GCC/demo/Makefile | 193 ++++++++++++++++++ board/QEMU_Spike/GCC/demo/link.ld | 51 +++++ .../gcc => board/QEMU_Spike/GCC/demo}/start.S | 0 .../eclipse/{hello_world => demo}/.cproject | 26 +-- .../eclipse/{hello_world => demo}/.gitignore | 0 .../eclipse/{hello_world => demo}/.project | 2 +- .../.settings/language.settings.xml | 2 +- .../org.eclipse.cdt.codan.core.prefs | 0 .../org.eclipse.ltk.core.refactoring.prefs | 0 .../eclipse/{hello_world => demo}/link.ld | 0 board/QEMU_Spike/eclipse/demo/start.S | 41 ++++ 16 files changed, 300 insertions(+), 15 deletions(-) rename arch/risc-v/common/{ => include}/riscv_encoding.h (100%) rename arch/risc-v/common/{ => include}/tos_cpu.h (100%) rename arch/risc-v/common/{ => include}/tos_cpu_def.h (100%) rename arch/risc-v/common/{ => include}/tos_cpu_types.h (100%) rename arch/risc-v/common/{ => include}/tos_fault.h (100%) create mode 100644 board/QEMU_Spike/GCC/demo/Makefile create mode 100644 board/QEMU_Spike/GCC/demo/link.ld rename {arch/risc-v/rv32i/gcc => board/QEMU_Spike/GCC/demo}/start.S (100%) rename board/QEMU_Spike/eclipse/{hello_world => demo}/.cproject (96%) rename board/QEMU_Spike/eclipse/{hello_world => demo}/.gitignore (100%) rename board/QEMU_Spike/eclipse/{hello_world => demo}/.project (98%) rename board/QEMU_Spike/eclipse/{hello_world => demo}/.settings/language.settings.xml (97%) rename board/QEMU_Spike/eclipse/{hello_world => demo}/.settings/org.eclipse.cdt.codan.core.prefs (100%) rename board/QEMU_Spike/eclipse/{hello_world => demo}/.settings/org.eclipse.ltk.core.refactoring.prefs (100%) rename board/QEMU_Spike/eclipse/{hello_world => demo}/link.ld (100%) create mode 100644 board/QEMU_Spike/eclipse/demo/start.S diff --git a/arch/risc-v/common/riscv_encoding.h b/arch/risc-v/common/include/riscv_encoding.h similarity index 100% rename from arch/risc-v/common/riscv_encoding.h rename to arch/risc-v/common/include/riscv_encoding.h diff --git a/arch/risc-v/common/tos_cpu.h b/arch/risc-v/common/include/tos_cpu.h similarity index 100% rename from arch/risc-v/common/tos_cpu.h rename to arch/risc-v/common/include/tos_cpu.h diff --git a/arch/risc-v/common/tos_cpu_def.h b/arch/risc-v/common/include/tos_cpu_def.h similarity index 100% rename from arch/risc-v/common/tos_cpu_def.h rename to arch/risc-v/common/include/tos_cpu_def.h diff --git a/arch/risc-v/common/tos_cpu_types.h b/arch/risc-v/common/include/tos_cpu_types.h similarity index 100% rename from arch/risc-v/common/tos_cpu_types.h rename to arch/risc-v/common/include/tos_cpu_types.h diff --git a/arch/risc-v/common/tos_fault.h b/arch/risc-v/common/include/tos_fault.h similarity index 100% rename from arch/risc-v/common/tos_fault.h rename to arch/risc-v/common/include/tos_fault.h diff --git a/board/QEMU_Spike/GCC/demo/Makefile b/board/QEMU_Spike/GCC/demo/Makefile new file mode 100644 index 00000000..8b6a96e6 --- /dev/null +++ b/board/QEMU_Spike/GCC/demo/Makefile @@ -0,0 +1,193 @@ +########################################################################################################################## +# File automatically-generated by tool: [projectgenerator] version: [3.3.0] date: [Mon Aug 05 10:29:11 CST 2019] +########################################################################################################################## + +# ------------------------------------------------ +# Generic Makefile (based on gcc) +# +# ChangeLog : +# 2017-02-10 - Several enhancements + project update mode +# 2015-07-22 - first version +# ------------------------------------------------ + +###################################### +# target +###################################### +TARGET = demo + + +###################################### +# building variables +###################################### +# debug build? +DEBUG = 1 +# optimization +OPT = -O0 + +TOP_DIR = ../../../.. +####################################### +# paths +####################################### +# Build path +BUILD_DIR = build + +###################################### +# source +###################################### +# C sources +KERNEL_SRC = \ + ${wildcard $(TOP_DIR)/kernel/core/*.c} + C_SOURCES += $(KERNEL_SRC) + +ARCH_SRC = \ + ${wildcard $(TOP_DIR)/arch/risc-v/rv32i/gcc/*.c} \ + ${wildcard $(TOP_DIR)/arch/risc-v/common/*.c} + C_SOURCES += $(ARCH_SRC) + +HAL_DRIVER_SRC = \ + $(TOP_DIR)/board/QEMU_Spike/Src/main.c + C_SOURCES += $(HAL_DRIVER_SRC) + +# ASM sources +ASM_SOURCES = + +ASM_SOURCES_S = \ +$(TOP_DIR)/arch/risc-v/rv32i/gcc/port_s.S \ +start.S + + +####################################### +# binaries +####################################### +PREFIX = riscv-none-embed- +# 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 = -march=rv32imac + +# fpu +FPU = + +# float-abi +FLOAT-ABI = + +# mcu +MCU = $(CPU) $(FPU) $(FLOAT-ABI) + +# macros for gcc +# AS defines +AS_DEFS = + +# C defines +C_DEFS = + +# AS includes +AS_INCLUDES = + +# C includes +KERNEL_INC = \ + -I $(TOP_DIR)/kernel/core/include \ + -I $(TOP_DIR)/kernel/pm/include \ + -I $(TOP_DIR)/kernel/hal/include \ + -I $(TOP_DIR)/arch/risc-v/common/include \ + -I $(TOP_DIR)/arch/risc-v/rv32i/gcc \ + -I $(TOP_DIR)/board/QEMU_Spike/TOS-CONFIG + C_INCLUDES += $(KERNEL_INC) +CMSIS_INC = + +HAL_DRIVER_INC = \ + -I $(TOP_DIR)/board/QEMU_Spike/Inc \ + C_INCLUDES += $(HAL_DRIVER_INC) + +# compile gcc flags +ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -mabi=ilp32 -msmall-data-limit=8 -mno-save-restore + +CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -mabi=ilp32 -msmall-data-limit=8 -mno-save-restore -std=gnu11 --specs=nosys.specs -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections + +ifeq ($(DEBUG), 1) +CFLAGS += -g +endif + + +# Generate dependency information +CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" + + +####################################### +# LDFLAGS +####################################### +# link script +LDSCRIPT = link.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 -nostartfiles + +# 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))) +OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES_S:.S=.o))) +vpath %.S $(sort $(dir $(ASM_SOURCES_S))) + +$(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)/%.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 *** diff --git a/board/QEMU_Spike/GCC/demo/link.ld b/board/QEMU_Spike/GCC/demo/link.ld new file mode 100644 index 00000000..bc3eb43f --- /dev/null +++ b/board/QEMU_Spike/GCC/demo/link.ld @@ -0,0 +1,51 @@ +OUTPUT_ARCH( "riscv" ) +ENTRY( _start ) + +MEMORY +{ + ROM (rxai!w) : ORIGIN = 0x80000000, LENGTH = 512K + RAM (wxa!ri) : ORIGIN = 0x84000000, LENGTH = 128K +} + +SECTIONS +{ + .text : { + PROVIDE( _text = . ); + *(.text.entry) + *(.text) + *(.rodata) + PROVIDE( _etext = . ); + } >ROM AT>ROM + + . = ALIGN(4); + _load_data = LOADADDR(.data); + + . = ALIGN(4); + .data : { + PROVIDE( _data = . ); + *(.data) + . = ALIGN(4); + } >RAM AT>ROM + . = ALIGN(4); + PROVIDE( _edata = . ); + + . = ALIGN(0x1000); + PROVIDE( _bss = . ); + .bss : { + *(.bss) + } >RAM AT>RAM + . = ALIGN(4); + PROVIDE( _ebss = . ); + + + . = ALIGN(8); + PROVIDE( end = . ); + + _stack_size = 128; + .stack ORIGIN(RAM) + LENGTH(RAM) - _stack_size : + { + . = _stack_size; + PROVIDE( _stack_top = . ); + } >RAM AT>RAM + _end = .; +} diff --git a/arch/risc-v/rv32i/gcc/start.S b/board/QEMU_Spike/GCC/demo/start.S similarity index 100% rename from arch/risc-v/rv32i/gcc/start.S rename to board/QEMU_Spike/GCC/demo/start.S diff --git a/board/QEMU_Spike/eclipse/hello_world/.cproject b/board/QEMU_Spike/eclipse/demo/.cproject similarity index 96% rename from board/QEMU_Spike/eclipse/hello_world/.cproject rename to board/QEMU_Spike/eclipse/demo/.cproject index 10343617..895eea06 100644 --- a/board/QEMU_Spike/eclipse/hello_world/.cproject +++ b/board/QEMU_Spike/eclipse/demo/.cproject @@ -97,7 +97,7 @@ - + @@ -107,9 +107,9 @@ @@ -125,17 +125,17 @@ @@ -301,7 +301,7 @@ - + @@ -385,7 +385,7 @@ - + @@ -417,13 +417,13 @@ - + - + diff --git a/board/QEMU_Spike/eclipse/hello_world/.gitignore b/board/QEMU_Spike/eclipse/demo/.gitignore similarity index 100% rename from board/QEMU_Spike/eclipse/hello_world/.gitignore rename to board/QEMU_Spike/eclipse/demo/.gitignore diff --git a/board/QEMU_Spike/eclipse/hello_world/.project b/board/QEMU_Spike/eclipse/demo/.project similarity index 98% rename from board/QEMU_Spike/eclipse/hello_world/.project rename to board/QEMU_Spike/eclipse/demo/.project index 1730710c..dd81e27f 100644 --- a/board/QEMU_Spike/eclipse/hello_world/.project +++ b/board/QEMU_Spike/eclipse/demo/.project @@ -1,6 +1,6 @@ - hello_world + demo diff --git a/board/QEMU_Spike/eclipse/hello_world/.settings/language.settings.xml b/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml similarity index 97% rename from board/QEMU_Spike/eclipse/hello_world/.settings/language.settings.xml rename to board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml index c13aaae5..975049f4 100644 --- a/board/QEMU_Spike/eclipse/hello_world/.settings/language.settings.xml +++ b/board/QEMU_Spike/eclipse/demo/.settings/language.settings.xml @@ -11,7 +11,7 @@ - + diff --git a/board/QEMU_Spike/eclipse/hello_world/.settings/org.eclipse.cdt.codan.core.prefs b/board/QEMU_Spike/eclipse/demo/.settings/org.eclipse.cdt.codan.core.prefs similarity index 100% rename from board/QEMU_Spike/eclipse/hello_world/.settings/org.eclipse.cdt.codan.core.prefs rename to board/QEMU_Spike/eclipse/demo/.settings/org.eclipse.cdt.codan.core.prefs diff --git a/board/QEMU_Spike/eclipse/hello_world/.settings/org.eclipse.ltk.core.refactoring.prefs b/board/QEMU_Spike/eclipse/demo/.settings/org.eclipse.ltk.core.refactoring.prefs similarity index 100% rename from board/QEMU_Spike/eclipse/hello_world/.settings/org.eclipse.ltk.core.refactoring.prefs rename to board/QEMU_Spike/eclipse/demo/.settings/org.eclipse.ltk.core.refactoring.prefs diff --git a/board/QEMU_Spike/eclipse/hello_world/link.ld b/board/QEMU_Spike/eclipse/demo/link.ld similarity index 100% rename from board/QEMU_Spike/eclipse/hello_world/link.ld rename to board/QEMU_Spike/eclipse/demo/link.ld diff --git a/board/QEMU_Spike/eclipse/demo/start.S b/board/QEMU_Spike/eclipse/demo/start.S new file mode 100644 index 00000000..30b04422 --- /dev/null +++ b/board/QEMU_Spike/eclipse/demo/start.S @@ -0,0 +1,41 @@ +// See LICENSE for license details. + +#include "riscv_encoding.h" + +.section .text.entry + .globl _start + .type _start,@function +_start: + csrc mstatus, MSTATUS_MIE + csrw mie, 0 + + la t0, machine_trap_entry + csrw mtvec, t0 + + la sp, _stack_top + + /* Load data section */ + la a0, _load_data + la a1, _data + la a2, _edata + bgeu a1, a2, begin_clear_bss +clear_data: + lw t0, (a0) + sw t0, (a1) + addi a0, a0, 4 + addi a1, a1, 4 + bltu a1, a2, clear_data + +begin_clear_bss: + // clear bss section + la a0, _bss + la a1, _ebss + bgeu a0, a1, init_finish +clear_bss: + sw zero, (a0) + addi a0, a0, 4 + bltu a0, a1, clear_bss +init_finish: + call main +__die: + j __die