e200的SDK(Software Development Kit)平台主要是由Makefile脚本、板级支持包(BSP)、链接脚本和软件示例组成的开发环境。
BSP主要目录内容为:
(1)bsp/hbirds-e200/drivers,存放驱动程序代码,包括hclkgen(High-Speed Clock Generation),PLIC(Platform-Level Interrupt Controller),关于PLIC可参考https://blog.csdn.net/moonllz/article/details/52251788;
(2)bsp/hbirds-e200/include,存放外设寄存器地址
(3)bsp/hbirds-e200/stubs,存放C运行库Newlib的桩函数,具体分析见https://blog.csdn.net/qq_40946355/article/details/104732234
(4)bsp/hbirds-e200/env,存放着系统启动、初始化、异常中断、链接文件,其中common.mk,start.S常用
下面以Hello World.c为例了解Makefile编写的程序编译过程
TARGET = hello_world
生成的elf文件名
BSP_BASE = ../../bsp
C_SRCS += hello_world.c
include $(BSP_BASE)/$(BOARD)/env/common.mk
CFLAGS += -O2
//makefile有一个特性,对于未定义的变量会在其他命令行寻找
//因此只需要将编译命令集成到一个文件里include进来即可
//CFLAGS为C编译命令,在risc中调用gcc编译,优化级别为O2
对于CFLAGS的具体命令,打开common.mk查找CFLAGS
CFLAGS += -g
CFLAGS += -march=$(RISCV_ARCH)
//-march=用于指定RISC-V平台所支持的模块化指令集组合
CFLAGS += -mabi=$(RISCV_ABI)
//-mabi=用于指定嵌入式RISC-V平台所支持的ABI函数调用规则
CFLAGS += -ffunction-sections -fdata-sections -fno-common
ifeq ($(REPLACE_PRINTF),1)
CFLAGS += -fno-builtin-printf -fno-builtin-malloc
endif