ZYNQ MPSOC Xilinx SDK 编译器选项 (extra_compiler_flags extra compiler flags 选项含义)

本文介绍如何在ZYNQ AMP模式下配置双核运行,通过修改bsp工程的system.mss文件,添加-DUSE_AMP=1编译选项实现。文中提及的编译选项如-mcpu、vfpv3等细节可在Xilinx官网文档中查找。

最近参考xapp1078实现ZYNQ AMP模式双核运行(ZYNQ AMP模式双核运行视频教程
https://www.ixigua.com/i6836328174431765005/),需要设置 USE_AMP,具体为打开CPU1的bsp工程的system.mss文件,在extra_compiler_flags设置中添加 -DUSE_AMP=1。那么 -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -nostartfiles -Wall -Wextra -DUSE_AMP=1,这些编译选项都是表示什么意思呢?

我们可以直接在Xilinx官网搜索,下载相关的文档,就可以找到答案。

例如:

(1)-mcpu

(2)vfpv3

(3)DUSE_AMP

#------------------------------------------------------------------------------- # GigE Vision Reference Design Firmware #------------------------------------------------------------------------------- # Software environment : Xilinx Vitis 2022.2 # Hardware platform : MVDK + Enclustra Mercury ZX5 # Target SoC : XC7Z015 # Embedded CPU : ARM Cortex-A9 #------------------------------------------------------------------------------- # Complementary Makefile to perform tasks not covered by the Xilinx Vitis GUI. # # Particular targets... # scripts : update auxiliary TCL scripts # lib : build the GigE static library # eeprom : generate EEPROM binary image # Top-level targets... # all : build everything # s2i : prepare scripts and library for customer # # The scripts, lib, boot, and s2i targets are nonfunctional for end customers # due to missing source code of the scripts, library, and bootloader. Customer # gets prebuilt object files in the ./lib directory and up to date scripts # in the ./etc directory instead. #------------------------------------------------------------------------------- # 0.1 | 2014-07-16 | JP | Initial release # 0.2 | 2014-08-01 | JP | Fixed incompatibility with Vivado 2014.2 under # | | | Windows operating systems # 0.3 | 2014-10-07 | MAS | Cleanup for Zynq design flow (no bootloader, # | | | bitstream/application.bin file creation) # 0.4 | 2016-12-02 | JP | Upgraded to Vivado/SDK 2016.2 # 0.5 | 2019-03-20 | JP | Updated to current tools # 0.6 | 2021-11-30 | SS | Update to Vivado 2020.2/Vitis # 0.7 | 2025-02-11 | NF | Update to Vivado 2022.2/Vitis #------------------------------------------------------------------------------- #---- Project specific settings ------------------------------------------------ # Vitis workspace projects VITIS_PRJ_APP = xgvrd VITIS_CFG_APP = Release VITIS_EXPORT = xgvrd_platform/export/xgvrd_platform VITIS_EXPORT_SW = $(VITIS_EXPORT)/sw/xgvrd_platform VITIS_EXPORT_HW = $(VITIS_EXPORT)/hw # EEPROM image generator options EE_OPTIONS = -m 3C:39:E7:71:02:86 -c 6 -i 169.254.100.100 -n 255.255.0.0 -g 169.254.100.1 -p 3956 -e 999999 -a FEC00000 # Configuration flash memory map OFFSET_BIT = 0x00400000 OFFSET_APP = 0x00800000 OFFSET_XML = 0x00C00000 # Serial communication device SERIAL = /dev/ttyUSB0 #---- Project files and directories -------------------------------------------- # Base names of the input/output files LIB_NAME = gige APP_NAME = application EE_NAME = eeprom XML_NAME = xgvrd-tpg HW_NAME = xgvrd BIF_NAME = bootimage # Project directories HW_PATH = $(wildcard ../*.runs/impl_1) FW_PATH = . OUT_PATH = $(FW_PATH)/bin LIB_PATH = $(FW_PATH)/lib ETC_PATH = $(FW_PATH)/etc # Full input/output file names LIB_FILE = $(LIB_PATH)/lib$(LIB_NAME).a APP_BIN_FILE = $(OUT_PATH)/$(APP_NAME).bin EE_BIN_FILE = $(OUT_PATH)/$(EE_NAME).bin EE_C_FILE = $(FW_PATH)/$(VITIS_PRJ_APP)/src/$(EE_NAME).c XML_FILE = $(ETC_PATH)/$(XML_NAME).xml HW_BIT = $(HW_PATH)/$(HW_NAME).bit BIN_FILE = $(OUT_PATH)/$(BIF_NAME).bin BOOTIMAGE = $(ETC_PATH)/$(BIF_NAME).bif # Vitis workspace paths and files BSP_PATH = $(FW_PATH)/$(VITIS_EXPORT_SW)/domain_0 APP_PATH = $(FW_PATH)/$(VITIS_PRJ_APP) APP_OUT = $(APP_PATH)/$(VITIS_CFG_APP) APP_FILE = $(APP_OUT)/$(VITIS_PRJ_APP).elf APP_SRC := $(wildcard $(APP_PATH)/src/*.c) APP_HDR := $(wildcard $(APP_PATH)/src/*.h) FSBL_FILE = $(FW_PATH)/$(VITIS_EXPORT_SW)/boot/fsbl.elf XSA_FILE = $(FW_PATH)/$(VITIS_EXPORT_HW)/$(HW_NAME).xsa #---- Private GigE files and directories --------------------------------------- FW_PREFIX = ./fw # TCL scripts SCRIPTS_PATH = $(FW_PREFIX)/scripts/tcl # GigE library source files LIB_SRC := $(wildcard $(FW_PREFIX)/libgige/src/*.c) LIB_HDR := $(wildcard $(FW_PREFIX)/libgige/src/*.h) LIB_OBJ := $(addsuffix .o,$(basename $(notdir $(wildcard $(FW_PREFIX)/libgige/src/*.c)))) LIB_PUB := $(FW_PREFIX)/libgige/src/gige.h #---- Toolchain setup ---------------------------------------------------------- # CPU tools AR = arm-none-eabi-ar CC = arm-none-eabi-gcc SIZE = arm-none-eabi-size OC = arm-none-eabi-objcopy # Compiler options CC_OPT_LIB = -O2 CC_FLAGS = -Wall -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -nostartfiles CC_INCLUDES = -I$(BSP_PATH)/bspinclude/include # Linker options LNK_LIBPATH = -L$(BSP_PATH)/bsplib/lib -L$(LIB_PATH) LNK_FLAGS = -l$(LIB_NAME) # Object copy options OC_FLAGS = -v -I elf32-littlearm -O binary OC_REMOVE = -R .vectors.reset -R .vectors.sw_exception -R .vectors.interrupt -R .vectors.hw_exception # Correct command line tools for GNUWin environment XILINX_VITIS_DIR := $(subst \,/,$(XILINX_VITIS)) ifneq (,$(wildcard $(XILINX_VITIS_DIR)/gnuwin/.)) MKDIR := $(XILINX_VITIS_DIR)/gnuwin/bin/mkdir ECHO := $(XILINX_VITIS_DIR)/gnuwin/bin/echo RM := $(XILINX_VITIS_DIR)/gnuwin/bin/rm DATE := $(shell $(XILINX_VITIS_DIR)/gnuwin/bin/date +%Y%m%d) else MKDIR := mkdir ECHO := echo RM := rm DATE := $(shell date +%Y%m%d) endif # Correct NULL file ifeq ($(SHELL),$(filter $(SHELL),sh.exe command.com)) NULL := nul else NULL := /dev/null endif # Tcl interpreter and scripts TCLSH := $(shell which tclsh 2>$(NULL)) XTCLSH := $(shell which xtclsh 2>$(NULL)) VIVADO := $(shell which vivado 2>$(NULL)) ifdef TCLSH TCL := tclsh TCLARGS := else ifdef XTCLSH TCL := xtclsh TCLARGS := else ifdef VIVADO TCL := vivado -mode batch -nojournal -nolog -notrace -source TCLARGS := -tclargs else TCL := TCLARGS := endif endif endif CKSUM = cksum.tcl EEPROM = eeprom.tcl BITBIN = bit2bin.tcl #---- Compilation targets ------------------------------------------------------ # Aliases all: scripts lib eeprom bin s2i: scripts lib scripts: $(ETC_PATH)/$(CKSUM) $(ETC_PATH)/$(EEPROM) $(ETC_PATH)/$(BITBIN) lib: $(LIB_FILE) # delete "$(EE_C_FILE)" if EEPROM emulation is not needed #eeprom: $(EE_BIN_FILE) $(EE_C_FILE) eeprom: $(EE_BIN_FILE) app: $(APP_FILE) bin: $(BIN_FILE) # Update TCL scripts $(ETC_PATH)/$(CKSUM): $(wildcard $(SCRIPTS_PATH)/$(CKSUM)) ifeq ($(wildcard $(SCRIPTS_PATH)/$(CKSUM)),) @$(ECHO) @$(ECHO) The TCL script is not available! @$(ECHO) Please use the $(ETC_PATH)/$(CKSUM) script delivered by S2I! @$(ECHO) else @cp -fv $(SCRIPTS_PATH)/$(CKSUM) $(ETC_PATH)/$(CKSUM) endif $(ETC_PATH)/$(EEPROM): $(wildcard $(SCRIPTS_PATH)/$(EEPROM)) ifeq ($(wildcard $(SCRIPTS_PATH)/$(EEPROM)),) @$(ECHO) @$(ECHO) The TCL script is not available! @$(ECHO) Please use the $(ETC_PATH)/$(EEPROM) script delivered by S2I! @$(ECHO) else @cp -fv $(SCRIPTS_PATH)/$(EEPROM) $(ETC_PATH)/$(EEPROM) endif $(ETC_PATH)/$(BITBIN): $(wildcard $(SCRIPTS_PATH)/$(BITBIN)) ifeq ($(wildcard $(SCRIPTS_PATH)/$(BITBIN)),) @$(ECHO) @$(ECHO) The TCL script is not available! @$(ECHO) Please use the $(ETC_PATH)/$(BITBIN) script delivered by S2I! @$(ECHO) else @cp -fv $(SCRIPTS_PATH)/$(BITBIN) $(ETC_PATH)/$(BITBIN) endif # Actual targets $(LIB_FILE): $(LIB_SRC) $(LIB_HDR) ifeq ($(LIB_SRC),) @$(ECHO) @$(ECHO) Building the GigE library is not available to end customers! @$(ECHO) Please use the prebuilt $(LIB_FILE) delivered by S2I! @$(ECHO) else @$(MKDIR) -p $(LIB_PATH) @$(RM) -f $(LIB_OBJ) $(CC) $(CC_OPT_LIB) $(CC_FLAGS) $(CC_INCLUDES) -c $(LIB_SRC) $(AR) rcs $(LIB_FILE) $(LIB_OBJ) @$(RM) -f $(LIB_OBJ) @$(ECHO) $(SIZE) -t $(LIB_FILE) @$(ECHO) @cp $(LIB_PUB) $(FW_PATH)/$(VITIS_PRJ_APP)/src/ endif $(EE_BIN_FILE): $(XML_FILE) $(ETC_PATH)/$(CKSUM) $(ETC_PATH)/$(EEPROM) ifndef TCL $(error Tcl interpreter not found) endif @$(TCL) $(ETC_PATH)/$(EEPROM) $(TCLARGS) $(EE_OPTIONS) -x $(XML_FILE) -o $(EE_BIN_FILE) @$(TCL) $(ETC_PATH)/$(CKSUM) $(TCLARGS) -x $(EE_BIN_FILE) $(EE_C_FILE): $(XML_FILE) $(ETC_PATH)/$(EEPROM) ifndef TCL $(error Tcl interpreter not found) endif @$(TCL) $(ETC_PATH)/$(EEPROM) $(TCLARGS) $(EE_OPTIONS) -t -x $(XML_FILE) -o $(EE_C_FILE) $(APP_FILE): $(LIB_FILE) $(APP_SRC) $(APP_HDR) make -C $(APP_OUT) all $(APP_BIN_FILE): $(APP_FILE) $(ETC_PATH)/$(CKSUM) @$(OC) $(OC_FLAGS) $(OC_REMOVE) $(APP_FILE) $(APP_BIN_FILE) @chmod -x $(APP_BIN_FILE) ifdef TCL @$(TCL) $(ETC_PATH)/$(CKSUM) $(TCLARGS) -x $(APP_BIN_FILE) endif $(BIN_FILE): $(HW_BIT) $(APP_FILE) $(FSBL_FILE) $(XML_FILE) @$(ECHO) "//arch = zynq; split = false; format = BIN" > $(BOOTIMAGE) @$(ECHO) "the_ROM_image:" >> $(BOOTIMAGE) @$(ECHO) "{" >> $(BOOTIMAGE) @$(ECHO) " [bootloader]$(FSBL_FILE)" >> $(BOOTIMAGE) @$(ECHO) " [offset = $(OFFSET_BIT)]$(HW_BIT)" >> $(BOOTIMAGE) @$(ECHO) " [offset = $(OFFSET_APP)]$(APP_FILE)" >> $(BOOTIMAGE) @$(ECHO) " [offset = $(OFFSET_XML)]$(XML_FILE)" >> $(BOOTIMAGE) @$(ECHO) "}" >> $(BOOTIMAGE) bootgen -image $(BOOTIMAGE) -arch zynq -o $(BIN_FILE) -w on # @$(RM) -f $(BOOT_NAME).bif #---- Device programming targets ----------------------------------------------- prog: $(HW_BIT) @$(ECHO) "connect" > xsdb_prog.tcl @$(ECHO) "targets 2" >> xsdb_prog.tcl @$(ECHO) "rst" >> xsdb_prog.tcl @$(ECHO) "fpga $(HW_BIT)" >> xsdb_prog.tcl @$(ECHO) "exit" >> xsdb_prog.tcl xsdb xsdb_prog.tcl # @$(RM) -f xsdb_prog.tcl # @$(RM) -f ps7_init.* ps7_init_gpl.* run: $(APP_FILE) @$(ECHO) "connect" > xsdb_run.tcl @$(ECHO) "targets 2" >> xsdb_run.tcl # @$(ECHO) "loadhw $(HW_NAME).xsa" >> xsdb_run.tcl @$(ECHO) "source xgvrd_platform/hw/ps7_init.tcl" >> xsdb_run.tcl @$(ECHO) "ps7_init" >> xsdb_run.tcl @$(ECHO) "ps7_post_config" >> xsdb_run.tcl @$(ECHO) "dow $(APP_FILE)" >> xsdb_run.tcl @$(ECHO) "con" >> xsdb_run.tcl @$(ECHO) "exit" >> xsdb_run.tcl xsdb xsdb_run.tcl # @$(RM) -f xsdb_run.tcl # @$(RM) -f ps7_init.* ps7_init_gpl.* prog_flash: $(BIN_FILE) $(FSBL_FILE) program_flash -f $(BIN_FILE) -offset 0 -flash_type qspi_single -verify -fsbl $(FSBL_FILE) #---- Cleanup ------------------------------------------------------------------ clean: ifneq ($(LIB_SRC),) @$(RM) -fv $(LIB_FILE) endif @$(RM) -fv $(APP_BIN_FILE) @$(RM) -fv $(EE_BIN_FILE) @$(RM) -fv $(BIN_FILE) ifneq ($(wildcard $(SCRIPTS_PATH)/$(CKSUM)),) @$(RM) -fv $(ETC_PATH)/$(CKSUM) endif ifneq ($(wildcard $(SCRIPTS_PATH)/$(EEPROM)),) @$(RM) -fv $(ETC_PATH)/$(EEPROM) endif ifneq ($(wildcard $(SCRIPTS_PATH)/$(BITBIN)),) @$(RM) -fv $(ETC_PATH)/$(BITBIN) endif 以上是makefile内容,请说明在makefile中如何修改?
10-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tech06

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值