本文来源电子发烧友社区,作者:jf_25674040, 帖子地址:https://bbs.elecfans.com/jish u_2283042_1_1.html
一、 获取编译器1.在https://github.com/riscv-collab/riscv-gnu-toolchain/tags上获取最新版本,2022.05.15。
2. 通过编译源码的方式获取
2.1 git clonehttps://github.com/riscv/riscv-gnu-toolchain获取源代码
2.2 sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev安装所需工具
2.3 ./configure --prefix=/opt/riscv --enable-multilib 使能riscv32/risv64输出。
2.4 sudo make 安装,如果发现github下载慢,可以使用的方式下载
cd /home/wps/tmp/riscv-gnu-toolchain &&
flock `git rev-parse --git-dir`/config git submodule init /home/wps/tmp/riscv-gnu-toolchain/riscv-gcc/ &&
flock `git rev-parse --git-dir`/config git submodule update /home/wps/tmp/riscv-gnu-toolchain/riscv-gcc/
cd /home/wps/tmp/riscv-gnu-toolchain &&
flock `git rev-parse --git-dir`/config git submodule init /home/wps/tmp/riscv-gnu-toolchain/newlib/ &&
flock `git rev-parse --git-dir`/config git submodule update /home/wps/tmp/riscv-gnu-toolchain/newlib/
git config --global --add safe.directory /home/apps/riscv-gnu-toolchain
cd /home/apps/riscv-gnu-toolchain &&
flock `git rev-parse --git-dir`/config git submodule init /home/apps/riscv-gnu-toolchain/riscv-gdb/ &&
flock `git rev-parse --git-dir`/config git submodule update /home/apps/riscv-gnu-toolchain/riscv-gdb/
2.5 在bashrc中添加export PATH=/opt/riscv/bin:$PATH
二、获取api文件,当前我采取使用安装官方软件的方式获取基础API。
1. 下载CSMStudio_22.03.08_x64.zip,并在windows10下安装软件。
2. 找到安装目录下的CSM32RV20_coremark_32M或CSM32RV20_LED_Breath,并获取其中的drivers,ld目录,获取src下面的vectors.S和main.c。
3. 创建Makefile,至此便可以完成代码的编译工作,后续增加下载,调试功能。
附,当前使用的Makefile
```
#target
TARGET = hello_world
#building variables
#debug
DEBUG =1
OPT = -O2
BUILD_DIR = build
#BIN_DIR = $(BUILD_DIR)/bin
C_SOURCES =
src/main.c
drivers/Src/clic.c
drivers/Src/cmu.c
drivers/Src/gpio.c
drivers/Src/uart.c
drivers/Src/ee_printf.c
drivers/Src/adc.c
drivers/Src/comp.c
drivers/Src/data_always.c
drivers/Src/flash.c
drivers/Src/i2c.c
drivers/Src/iwdg.c
drivers/Src/lowpower.c
drivers/Src/lv.c
drivers/Src/random.c
drivers/Src/rtc.c
drivers/Src/spi.c
drivers/Src/timer.c
drivers/Src/usb.c
drivers/Src/wup.c
ASM_SOURCES =
src/vectors.S
# binaries
PREFIX = riscv64-unknown-elf-
ifdef GCC_PATH
CC = $(GCC_PATH)/$(PREFIX)gcc
AS = $(GCC_PATH)/$(PREFIX)g++
CP = $(GCC_PATH)/$(PREFIX)objcopy
SZ = $(GCC_PATH)/$(PREFIX)size
else
CC = $(PREFIX)gcc
AS = $(PREFIX)g++
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
# C_FLAGS
CPU = -march=rv32imac
# mcu
MCU = -mabi=ilp32 $(CPU)
AS_DEFS =
C_DEFS =
AS_INCLUDES =
-Idrivers/Inc
C_INCLUDES =
-Idrivers/Inc
# compile gcc flags
ASFLASGS = -Wall -g $(MCU) -fdata-sections -ffunction-sections -fomit-frame-pointer -mcmodel=medlow -mtune=rocket $(OPT)
ASFLASGS += $(C_DEFS) $(C_INCLUDES)
CFLAGS = -Wall -g $(MCU) -fdata-sections -ffunction-sections -fomit-frame-pointer -mcmodel=medlow -mtune=rocket $(OPT)
CFLAGS += $(C_DEFS) $(C_INCLUDES)
# link script
LDSCRIPT = ld/target.ld
LDFLAGS = $(MCU) -T $(LDSCRIPT) -nostartfiles
LDFLAGS += -Wl,-Map,map.txt
LDFLAGS += -Xlinker --gc-sections -Xlinker --cref
LDFLAGS += --specs=nano.specs --specs=nosys.specs
all: $(BUILD_DIR)/$(TARGET).elf
# 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) $< -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):
mkdir $@
clean:
-rm -fR $(BUILD_DIR)
```
一、 获取编译器1.在https://github.com/riscv-collab/riscv-gnu-toolchain/tags上获取最新版本,2022.05.15。
2. 通过编译源码的方式获取
2.1 git clonehttps://github.com/riscv/riscv-gnu-toolchain获取源代码
2.2 sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev安装所需工具
2.3 ./configure --prefix=/opt/riscv --enable-multilib 使能riscv32/risv64输出。
2.4 sudo make 安装,如果发现github下载慢,可以使用的方式下载
cd /home/wps/tmp/riscv-gnu-toolchain &&
flock `git rev-parse --git-dir`/config git submodule init /home/wps/tmp/riscv-gnu-toolchain/riscv-gcc/ &&
flock `git rev-parse --git-dir`/config git submodule update /home/wps/tmp/riscv-gnu-toolchain/riscv-gcc/
cd /home/wps/tmp/riscv-gnu-toolchain &&
flock `git rev-parse --git-dir`/config git submodule init /home/wps/tmp/riscv-gnu-toolchain/newlib/ &&
flock `git rev-parse --git-dir`/config git submodule update /home/wps/tmp/riscv-gnu-toolchain/newlib/
git config --global --add safe.directory /home/apps/riscv-gnu-toolchain
cd /home/apps/riscv-gnu-toolchain &&
flock `git rev-parse --git-dir`/config git submodule init /home/apps/riscv-gnu-toolchain/riscv-gdb/ &&
flock `git rev-parse --git-dir`/config git submodule update /home/apps/riscv-gnu-toolchain/riscv-gdb/
2.5 在bashrc中添加export PATH=/opt/riscv/bin:$PATH
二、获取api文件,当前我采取使用安装官方软件的方式获取基础API。
1. 下载CSMStudio_22.03.08_x64.zip,并在windows10下安装软件。
2. 找到安装目录下的CSM32RV20_coremark_32M或CSM32RV20_LED_Breath,并获取其中的drivers,ld目录,获取src下面的vectors.S和main.c。
3. 创建Makefile,至此便可以完成代码的编译工作,后续增加下载,调试功能。
附,当前使用的Makefile
```
#target
TARGET = hello_world
#building variables
#debug
DEBUG =1
OPT = -O2
BUILD_DIR = build
#BIN_DIR = $(BUILD_DIR)/bin
C_SOURCES =
src/main.c
drivers/Src/clic.c
drivers/Src/cmu.c
drivers/Src/gpio.c
drivers/Src/uart.c
drivers/Src/ee_printf.c
drivers/Src/adc.c
drivers/Src/comp.c
drivers/Src/data_always.c
drivers/Src/flash.c
drivers/Src/i2c.c
drivers/Src/iwdg.c
drivers/Src/lowpower.c
drivers/Src/lv.c
drivers/Src/random.c
drivers/Src/rtc.c
drivers/Src/spi.c
drivers/Src/timer.c
drivers/Src/usb.c
drivers/Src/wup.c
ASM_SOURCES =
src/vectors.S
# binaries
PREFIX = riscv64-unknown-elf-
ifdef GCC_PATH
CC = $(GCC_PATH)/$(PREFIX)gcc
AS = $(GCC_PATH)/$(PREFIX)g++
CP = $(GCC_PATH)/$(PREFIX)objcopy
SZ = $(GCC_PATH)/$(PREFIX)size
else
CC = $(PREFIX)gcc
AS = $(PREFIX)g++
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
# C_FLAGS
CPU = -march=rv32imac
# mcu
MCU = -mabi=ilp32 $(CPU)
AS_DEFS =
C_DEFS =
AS_INCLUDES =
-Idrivers/Inc
C_INCLUDES =
-Idrivers/Inc
# compile gcc flags
ASFLASGS = -Wall -g $(MCU) -fdata-sections -ffunction-sections -fomit-frame-pointer -mcmodel=medlow -mtune=rocket $(OPT)
ASFLASGS += $(C_DEFS) $(C_INCLUDES)
CFLAGS = -Wall -g $(MCU) -fdata-sections -ffunction-sections -fomit-frame-pointer -mcmodel=medlow -mtune=rocket $(OPT)
CFLAGS += $(C_DEFS) $(C_INCLUDES)
# link script
LDSCRIPT = ld/target.ld
LDFLAGS = $(MCU) -T $(LDSCRIPT) -nostartfiles
LDFLAGS += -Wl,-Map,map.txt
LDFLAGS += -Xlinker --gc-sections -Xlinker --cref
LDFLAGS += --specs=nano.specs --specs=nosys.specs
all: $(BUILD_DIR)/$(TARGET).elf
# 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) $< -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):
mkdir $@
clean:
-rm -fR $(BUILD_DIR)
```
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
南京中科微
+关注
关注
0文章
60浏览量
742 -
CSM32RV20
+关注
关注
0文章
40浏览量
215
发布评论请先 登录
相关推荐
瑞芯微主板/开发板Linux系统播放音频方法,触觉智能RK3562开发板演示
本文介绍瑞芯微方案主板/开发板Linux系统播放音频的方法,触觉智能RK3562开发板演示,通用RK3566、RK3568、RK3588等
追加名额丨米尔瑞芯微RK3576开发板有奖试用
米尔与瑞芯微合作发布的新品基于瑞芯微RK3576应用处理器的MYD-LR3576开发板免费试用活动加码啦~~米尔追加了2块价值849元的MYD-LR3576
常用在工业控制系统上的MCU芯片资料:CSM32RV20
CSM32RV20是一款基于RISC-V核的低功耗MCU芯片。 内置RISC-V RV32IMAC内核(2.6CoreMark/MHz); 蕞高32MHz工作频率; 内置4kB的SRAM; 内置8B
有奖丨米尔 瑞芯微RK3576开发板免费试用
米尔与瑞芯微合作发布的新品基于瑞芯微RK3576应用处理器的MYD-LR3576开发板免费试用活动来啦~~米尔提供了7块价值849元的MYD-LR3576
嵌入式linux开发板怎么操作
嵌入式Linux开发板是一种基于Linux操作系统的嵌入式系统开发平台。它通常包括一个处理器、内存、存储器、输入/输出接口等硬件组件,以及一个基于L
嵌入式linux开发板芯片的工作原理
嵌入式Linux开发板是一种基于Linux操作系统的嵌入式系统开发平台,它广泛应用于工业控制、智能家居、智能交通、医疗设备等领域。 嵌入式Linux
linux开发板如何编译curl
在Linux开发板上编译 curl 库通常涉及到几个步骤,包括准备开发环境、下载源代码、配置编译选项以及执行编译和安装过程。以下是一个基本的指南,帮助你在Linux
linux开发板和单片机开发的区别
硬件架构 Linux开发板和单片机开发在硬件架构上有很大的区别。Linux开发板通常基于ARM、x86或其他处理器架构,具有较高的处理能力和
香橙派发布首款RISC-V开发板OrangePi RV
2024年3月,香橙派在全球开发者会议上发布了其首款基于RISC-V开发的OrangePi RV主板。这款开发板拥有四核RISC-V U74与S7协处理器,配备 2MB L2缓存。同时
fpga开发板与linux开发板区别
FPGA开发板与Linux开发板是两种不同的硬件开发平台,各自具有不同的特点和应用场景。在以下的文章中,我将详细介绍FPGA开发板和
DIY个人的Linux开发板教程
作者简介:大佬已在硬创社开源了近50款开发板,动手能力极强,于去年年底开始接触学习Linux,并由全志V3s、F1C200S等芯片开始上手DIY个人的Linux开发板。
评论