上一篇讲到
apm.mk 执行到
ifeq ($(HAL_BOARD),HAL_BOARD_PX4)
include $(MK_DIR)/board_px4.mk
endif
我们进入到board_px4.mk
TOOLCHAIN = NATIVE
include $(MK_DIR)/find_tools.mk
include $(MK_DIR)/px4_targets.mk
find_tools.mk 就是将定义了我们编译是需要的编译工具
px4_targets.mk 看看干了什么
开始做了初始变量的工作
主要看看 我们经常用的mpx4-v2 干了什么
px4-v2: $(BUILDROOT)/make.flags CHECK_MODULES $(PX4_ROOT)/Archives/px4fmu-v2.export $(SKETCHCPP) module_mk px4-io-v2
$(RULEHDR)
$(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"
分析 $(BUILDROOT)/make.flags CHECK_MODULES $(PX4_ROOT)/Archives/px4fmu-v2.export $(SKETCHCPP) module_mk px4-io-v2
这些就是命令
/e/ardupilot/Build.ArduCopter/make.flags 目标
CHECK_MODULES 目标
/e/ardupilot/modules/PX4Firmware/Archives/px4fmu-v2.export 文件
/e/ardupilot/ArduCopter/ArduCopter.cpp 文件
module_mk 目标
px4-io-v2 目标
通过$(RULEHDR) 命令的定义是在 sketch_sources.mk
# common header for rules, prints what is being built
define RULEHDR
@echo %% $(subst $(BUILDROOT)/,,$@)
@mkdir -p $(dir $@)
endef
执行 px4-io-v2 这个目标 实际也是这个目标 在modules.mk 的
.PHONY: CHECK_MODULES
# PX4 build needs submodules
px4-%: CHECK_MODULES
CHECK_MODULES:
$(v)$(MK_DIR)/check_modules.sh
执行 check_modules.sh 我们的nuttx 已经是 存在了
执行 px4-io-v2 这个目标 实际也是这个目标 px4_targets.mk 的
px4-io-v2: $(PX4_ROOT)/Archives/px4io-v2.export
$(v)+ $(MAKE) -C $(PX4_ROOT) px4io-v2_default
$(v) /bin/rm -f px4io-v2.bin
$(v) cp $(PX4_ROOT)/Build/px4io-v2_default.build/firmware.bin px4io-v2.bin
$(v) cp $(PX4_ROOT)/Images/px4io-v2_default.bin px4io-v2.bin
$(v) cp $(PX4_ROOT)/Build/px4io-v2_default.build/firmware.elf px4io-v2.elf
$(v) mkdir -p $(MK_DIR)/PX4/ROMFS/px4io/
$(v) rm -f $(MK_DIR)/PX4/ROMFS/px4io/px4io.bin
$(v) cp px4io-v2.bin $(MK_DIR)/PX4/ROMFS/px4io/px4io.bin
$(v) mkdir -p $(MK_DIR)/PX4/ROMFS/bootloader/
$(v) rm -f $(MK_DIR)/PX4/ROMFS/bootloader/fmu_bl.bin
$(v) cp $(SKETCHBOOK)/mk/PX4/bootloader/px4fmuv2_bl.bin $(MK_DIR)/PX4/ROMFS/bootloader/fmu_bl.bin
$(v) echo "PX4IOv2 Firmware is in px4io-v2.bin"
实际的内容是
make -C /e/ardupilot/modules/PX4Firmware px4io-v2_default 编译firmware基本文件
/bin/rm -f px4io-v2.bin
cp /e/ardupilot/modules/PX4Firmware/Build/px4io-v2_default.build/firmware.bin px4io-v2.bin
cp /e/ardupilot/modules/PX4Firmware/Images/px4io-v2_default.bin px4io-v2.bin
cp /e/ardupilot/modules/PX4Firmware/Build/px4io-v2_default.build/firmware.elf px4io-v2.elf
mkdir -p ../mk/PX4/ROMFS/px4io/
rm -f ../mk/PX4/ROMFS/px4io/px4io.bin
cp px4io-v2.bin ../mk/PX4/ROMFS/px4io/px4io.bin
mkdir -p ../mk/PX4/ROMFS/bootloader/
rm -f ../mk/PX4/ROMFS/bootloader/fmu_bl.bin
cp /e/ardupilot/mk/PX4/bootloader/px4fmuv2_bl.bin ../mk/PX4/ROMFS/bootloader/fmu_bl.bin
PX4IOv2 Firmware is in px4io-v2.bin
生成.bin .elf 文件
执行 module_mk 这个目标 实际也是这个目标 px4_targets.mk 的
.PHONY: module_mk
module_mk:
$(v) echo "Building $(SKETCHBOOK)/module.mk"
$(RULEHDR)
$(v) echo "# Auto-generated file - do not edit" > $(SKETCHBOOK)/module.mk.new
$(v) echo "MODULE_COMMAND = ArduPilot" >> $(SKETCHBOOK)/module.mk.new
$(v) echo "SRCS = $(wildcard $(SRCROOT)/*.cpp) $(SKETCHLIBSRCSRELATIVE)" >> $(SKETCHBOOK)/module.mk.new
$(v) echo "MODULE_STACKSIZE = 4096" >> $(SKETCHBOOK)/module.mk.new
$(v) echo "EXTRACXXFLAGS = -Wframe-larger-than=1200" >> $(SKETCHBOOK)/module.mk.new
$(v) cmp $(SKETCHBOOK)/module.mk $(SKETCHBOOK)/module.mk.new 2>/dev/null || mv $(SKETCHBOOK)/module.mk.new $(SKETCHBOOK)/module.mk
$(v) rm -f $(SKETCHBOOK)/module.mk.new
实际的内容是 写东西到module.mk 里
执行 $(BUILDROOT)/make.flags 这个目标 实际也是这个目标 sketch_sources.mk 的
也是更新一些东西
$(BUILDROOT)/make.flags CHEC 。。。。。
$(RULEHDR)
的内容就讲完了
apm.mk 执行到
ifeq ($(HAL_BOARD),HAL_BOARD_PX4)
include $(MK_DIR)/board_px4.mk
endif
我们进入到board_px4.mk
TOOLCHAIN = NATIVE
include $(MK_DIR)/find_tools.mk
include $(MK_DIR)/px4_targets.mk
find_tools.mk 就是将定义了我们编译是需要的编译工具
px4_targets.mk 看看干了什么
开始做了初始变量的工作
主要看看 我们经常用的mpx4-v2 干了什么
px4-v2: $(BUILDROOT)/make.flags CHECK_MODULES $(PX4_ROOT)/Archives/px4fmu-v2.export $(SKETCHCPP) module_mk px4-io-v2
$(RULEHDR)
$(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"
分析 $(BUILDROOT)/make.flags CHECK_MODULES $(PX4_ROOT)/Archives/px4fmu-v2.export $(SKETCHCPP) module_mk px4-io-v2
这些就是命令
/e/ardupilot/Build.ArduCopter/make.flags 目标
CHECK_MODULES 目标
/e/ardupilot/modules/PX4Firmware/Archives/px4fmu-v2.export 文件
/e/ardupilot/ArduCopter/ArduCopter.cpp 文件
module_mk 目标
px4-io-v2 目标
通过$(RULEHDR) 命令的定义是在 sketch_sources.mk
# common header for rules, prints what is being built
define RULEHDR
@echo %% $(subst $(BUILDROOT)/,,$@)
@mkdir -p $(dir $@)
endef
执行 px4-io-v2 这个目标 实际也是这个目标 在modules.mk 的
.PHONY: CHECK_MODULES
# PX4 build needs submodules
px4-%: CHECK_MODULES
CHECK_MODULES:
$(v)$(MK_DIR)/check_modules.sh
执行 check_modules.sh 我们的nuttx 已经是 存在了
执行 px4-io-v2 这个目标 实际也是这个目标 px4_targets.mk 的
px4-io-v2: $(PX4_ROOT)/Archives/px4io-v2.export
$(v)+ $(MAKE) -C $(PX4_ROOT) px4io-v2_default
$(v) /bin/rm -f px4io-v2.bin
$(v) cp $(PX4_ROOT)/Build/px4io-v2_default.build/firmware.bin px4io-v2.bin
$(v) cp $(PX4_ROOT)/Images/px4io-v2_default.bin px4io-v2.bin
$(v) cp $(PX4_ROOT)/Build/px4io-v2_default.build/firmware.elf px4io-v2.elf
$(v) mkdir -p $(MK_DIR)/PX4/ROMFS/px4io/
$(v) rm -f $(MK_DIR)/PX4/ROMFS/px4io/px4io.bin
$(v) cp px4io-v2.bin $(MK_DIR)/PX4/ROMFS/px4io/px4io.bin
$(v) mkdir -p $(MK_DIR)/PX4/ROMFS/bootloader/
$(v) rm -f $(MK_DIR)/PX4/ROMFS/bootloader/fmu_bl.bin
$(v) cp $(SKETCHBOOK)/mk/PX4/bootloader/px4fmuv2_bl.bin $(MK_DIR)/PX4/ROMFS/bootloader/fmu_bl.bin
$(v) echo "PX4IOv2 Firmware is in px4io-v2.bin"
实际的内容是
make -C /e/ardupilot/modules/PX4Firmware px4io-v2_default 编译firmware基本文件
/bin/rm -f px4io-v2.bin
cp /e/ardupilot/modules/PX4Firmware/Build/px4io-v2_default.build/firmware.bin px4io-v2.bin
cp /e/ardupilot/modules/PX4Firmware/Images/px4io-v2_default.bin px4io-v2.bin
cp /e/ardupilot/modules/PX4Firmware/Build/px4io-v2_default.build/firmware.elf px4io-v2.elf
mkdir -p ../mk/PX4/ROMFS/px4io/
rm -f ../mk/PX4/ROMFS/px4io/px4io.bin
cp px4io-v2.bin ../mk/PX4/ROMFS/px4io/px4io.bin
mkdir -p ../mk/PX4/ROMFS/bootloader/
rm -f ../mk/PX4/ROMFS/bootloader/fmu_bl.bin
cp /e/ardupilot/mk/PX4/bootloader/px4fmuv2_bl.bin ../mk/PX4/ROMFS/bootloader/fmu_bl.bin
PX4IOv2 Firmware is in px4io-v2.bin
生成.bin .elf 文件
执行 module_mk 这个目标 实际也是这个目标 px4_targets.mk 的
.PHONY: module_mk
module_mk:
$(v) echo "Building $(SKETCHBOOK)/module.mk"
$(RULEHDR)
$(v) echo "# Auto-generated file - do not edit" > $(SKETCHBOOK)/module.mk.new
$(v) echo "MODULE_COMMAND = ArduPilot" >> $(SKETCHBOOK)/module.mk.new
$(v) echo "SRCS = $(wildcard $(SRCROOT)/*.cpp) $(SKETCHLIBSRCSRELATIVE)" >> $(SKETCHBOOK)/module.mk.new
$(v) echo "MODULE_STACKSIZE = 4096" >> $(SKETCHBOOK)/module.mk.new
$(v) echo "EXTRACXXFLAGS = -Wframe-larger-than=1200" >> $(SKETCHBOOK)/module.mk.new
$(v) cmp $(SKETCHBOOK)/module.mk $(SKETCHBOOK)/module.mk.new 2>/dev/null || mv $(SKETCHBOOK)/module.mk.new $(SKETCHBOOK)/module.mk
$(v) rm -f $(SKETCHBOOK)/module.mk.new
实际的内容是 写东西到module.mk 里
执行 $(BUILDROOT)/make.flags 这个目标 实际也是这个目标 sketch_sources.mk 的
也是更新一些东西
$(BUILDROOT)/make.flags CHEC 。。。。。
$(RULEHDR)
的内容就讲完了