研究pixhawk的makefile的结构(3)

上俩篇已经将.bin文件的生成粗略讲了


现在讲最后几个命令
$(v) rm -f $(PX4_ROOT)/makefiles/$(PX4_V2_CONFIG_FILE)
$(v) cp $(PX4_V2_CONFIG_FILE) $(PX4_ROOT)/makefiles/nuttx/
$(PX4_MAKE) px4fmu-v2_APM
$(v) /bin/rm -f $(SKETCH)-v2.px4
$(v) cp $(PX4_ROOT)/Images/px4fmu-v2_APM.px4 $(SKETCH)-v2.px4
$(v) $(SKETCHBOOK)/Tools/scripts/add_git_hashes.py $(HASHADDER_FLAGS) "$(SKETCH)-v2.px4" "$(SKETCH)-v2.px4"
$(v) echo "PX4 $(SKETCH) Firmware is in $(SKETCH)-v2.px4"
这个步骤就是编译 px4fmu-v2_APM的过程

主要是这条完成的编译任务
$(PX4_MAKE) px4fmu-v2_APM upload 
展开
@+ GIT_SUBMODULES_ARE_EVIL=1
ARDUPILOT_BUILD=1 
-----》 make -C /e/ardupilot -f /e/ardupilot/modules/PX4Firmware/Makefile 
EXTRADEFINES=-I/e/ardupilot/libraries/ 
-DARDUPILOT_BUILD -DTESTS_MATHLIB_DISABLE 
-DCONFIG_HAL_BOARD=HAL_BOARD_PX4 
-DSKETCHNAME=\"ArduCopter\" 
-DSKETCH_MAIN=ArduPilot_main 
-DAPM_BUILD_DIRECTORY=APM_BUILD_ArduCopter
-Werror -Wno-psabi -Wno-packed -Wno-error=double-promotion -Wno-error=unused-variable -Wno-error=reorder -Wno-error=float-equal -Wno-error=pmf-conversions -Wno-error=missing-declarations -Wno-error=unused-function 
'-DGIT_VERSION="fa5fb0a5" -DNUTTX_GIT_VERSION="d48fa307" -DPX4_GIT_VERSION="c3406165" -DUAVCAN=1'
APM_MODULE_DIR=/e/ardupilot 
SKETCHBOOK=/e/ardupilot 
CCACHE= PX4_ROOT=/e/ardupilot/modules/PX4Firmware
NUTTX_SRC=/e/ardupilot/modules/PX4NuttX/nuttx/ 
MAXOPTIMIZATION=-Os UAVCAN_DIR=/e/ardupilot/modules/uavcan/
px4fmu-v2_APM 
upload 

这些都是参数
指定 makefile 文件 /e/ardupilot/modules/PX4Firmware/Makefile 
但是在 makefile 文件里没有 px4fmu-v2_APM 的目标 那他是怎么生成的.bin 和. elf
先是执行 px4fmu-v2_APM 再执行 upload 
遇到了
  FIRMWARE_GOAL = firmware
EXPLICIT_CONFIGS := $(filter $(CONFIGS),$(MAKECMDGOALS))
ifneq ($(EXPLICIT_CONFIGS),)
CONFIGS := $(EXPLICIT_CONFIGS)
.PHONY: $(EXPLICIT_CONFIGS)
$(EXPLICIT_CONFIGS): all
执行 all
all: $(DESIRED_FIRMWARES)
张开$(DESIRED_FIRMWARES)
/e/ardupilot/modules/PX4Firmware/Build/aerocore_default.build/firmware.px4
/e/ardupilot/modules/PX4Firmware/Build/px4-stm32f4discovery_default.build/firmware.px4 
/e/ardupilot/modules/PX4Firmware/Build/px4fmu-v1_default.build/firmware.px4 
/e/ardupilot/modules/PX4Firmware/Build/px4fmu-v2_APM.build/firmware.px4
/e/ardupilot/modules/PX4Firmware/Build/px4fmu-v2_default.build/firmware.px4 
/e/ardupilot/modules/PX4Firmware/Build/px4fmu-v2_multiplatform.build/firmware.px4
/e/ardupilot/modules/PX4Firmware/Build/px4fmu-v2_test.build/firmware.px4 
/e/ardupilot/modules/PX4Firmware/Build/px4io-v1_default.build/firmware.px4 
/e/ardupilot/modules/PX4Firmware/Build/px4io-v2_default.build/firmware.px4


.PHONY: $(FIRMWARES)
$(BUILD_DIR)%.build/firmware.px4: config   = $(patsubst $(BUILD_DIR)%.build/firmware.px4,%,$@)
$(BUILD_DIR)%.build/firmware.px4: work_dir = $(BUILD_DIR)$(config).build/
$(FIRMWARES): $(BUILD_DIR)%.build/firmware.px4: generateuorbtopicheaders checksubmodules
@$(ECHO) %%%%
@$(ECHO) %%%% Building $(config) in $(work_dir)
@$(ECHO) %%%%
@$(ECHO) %%%% "$(FIRMWARES)"
@$(ECHO) %%%%
@$(ECHO) %%%% "$(DESIRED_FIRMWARES)"
@$(ECHO) %%%%
@$(ECHO) %%%% "$(EXPLICIT_CONFIGS)"
@$(ECHO) %%%%
#$(Q) $(MKDIR) -p $(work_dir)
完成了编译工作 ------》#$(Q)+ $(MAKE) -r -C $(work_dir) \
-f $(PX4_MK_DIR)firmware.mk \
CONFIG=$(config) \
WORK_DIR=$(work_dir) \
$(FIRMWARE_GOAL)

$(FIRMWARES)展开是符合$(DESIRED_FIRMWARES) /e/ardupilot/modules/PX4Firmware/Images/px4fmu-v2_APM.px4
   所以执行 .PHONY: $(FIRMWARES)
而$(FIRMWARES) 下的完成了编译工作  

    
 
定位到firmware.mk 文件

顺序执行文件内容 
1.
all: firmware
include $(MK_DIR)/setup.mk 通过setup.mk 告诉环境 文件目录在哪


################################################################################
# OS specific libraries and paths
################################################################################
    include $(PX4_MK_DIR)/$(PX4_TARGET_OS).mk

################################################################################
# Modules
################################################################################
省略。。。
################################################################################
# Libraries
################################################################################
省略。。。
################################################################################
ROMFS generation
################################################################################
省略。。。
################################################################################
# Builtin command list generation
################################################################################
    最后生成.bin 文件 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值