下面是添加飞控板模块函数
function(px4_add_board)
#这里是一个模板,在各个飞控板编译的defluat文件里面可以看到类似的模块
px4_parse_function_args(
NAME px4_add_board
ONE_VALUE
PLATFORM
TOOLCHAIN
ARCHITECTURE
ROMFSROOT
IO
UAVCAN_INTERFACES
UAVCAN_TIMER_OVERRIDE
LINKER_PREFIX
CRYPTO
KEYSTORE
MULTI_VALUE
DRIVERS
MODULES
SYSTEMCMDS
EXAMPLES
SERIAL_PORTS
UAVCAN_PERIPHERALS
OPTIONS
BUILD_BOOTLOADER
CONSTRAINED_FLASH
NO_HELP
CONSTRAINED_MEMORY
EXTERNAL_METADATA
TESTING
ETHERNET
REQUIRED
PLATFORM
ARGN ${ARGN})
# 将PX4_BOARD_DIR设置成CMAKE_CURRENT_LIST_DIR
set(PX4_BOARD_DIR ${CMAKE_CURRENT_LIST_DIR} CACHE STRING "PX4 board directory" FORCE)
include_directories(${PX4_BOARD_DIR}/src)
# get the VENDOR & MODEL from the caller's directory names
#获取CMAKE_CURRENT_LIST_FILE目录赋值给base_dir,获取base_dir完整名称分别赋值给MODEL和VENDOR
get_filename_component(base_dir "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)
get_filename_component(MODEL "${base_dir}" NAME)
get_filename_component(base_dir "${base_dir}" DIRECTORY)
get_filename_component(VENDOR "${base_dir}" NAME)
#设置编译的飞控版型号
set(PX4_BOARD ${VENDOR}_${MODEL} CACHE STRING "PX4 board" FORCE)
# board name is uppercase with no underscores when used as a define
#设置字符串大写
string(TOUPPER ${PX4_BOARD} PX4_BOARD_NAME)
#用“-”代替飞控版名字中下划线
string(REPLACE "-" "_" PX4_BOARD_NAME ${PX4_BOARD_NAME})
#更新PX4_BOARD_NAME名字
set(PX4_BOARD_NAME ${PX4_BOARD_NAME} CACHE STRING "PX4 board define" FORCE)
set(PX4_BOARD_VENDOR ${VENDOR} CACHE STRING "PX4 board vendor" FORCE)
set(PX4_BOARD_MODEL ${MODEL} CACHE STRING "PX4 board model" FORCE)
#获取现有编译列表,并且设置现有的编译列表
if(NOT LABEL)
get_filename_component(LABEL "${CMAKE_CURRENT_LIST_FILE}" NAME_WE)
endif()
set(PX4_BOARD_LABEL ${LABEL} CACHE STRING "PX4 board label" FORCE)
#配置PX4_CONFIG
set(PX4_CONFIG "${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_${PX4_BOARD_LABEL}" CACHE STRING "PX4 config" FORCE)
# set OS, and append specific platform module path
set(PX4_PLATFORM ${PLATFORM} CACHE STRING "PX4 board OS" FORCE)
list(APPEND CMAKE_MODULE_PATH ${PX4_SOURCE_DIR}/platforms/${PX4_PLATFORM}/cmake)
# platform-specific include path
#添加硬件编译代码路径
include_directories(${PX4_SOURCE_DIR}/platforms/${PX4_PLATFORM}/src/px4/common/include)
#修改系统进程设置和编译器
if(ARCHITECTURE)
set(CMAKE_SYSTEM_PROCESSOR ${ARCHITECTURE} CACHE INTERNAL "system processor" FORCE)
endif()
if(TOOLCHAIN)
set(CMAKE_TOOLCHAIN_FILE Toolchain-${TOOLCHAIN} CACHE INTERNAL "toolchain file" FORCE)
endif()
set(romfs_extra_files)
set(config_romfs_extra_dependencies)
# additional embedded metadata
if (NOT CONSTRAINED_FLASH AND NOT EXTERNAL_METADATA AND NOT ${PX4_BOARD_LABEL} STREQUAL "test")
#添加parameters.json.xz,all_events.json.xz路径到romfs_extra_files文件中
list(APPEND romfs_extra_files
${PX4_BINARY_DIR}/parameters.json.xz
${PX4_BINARY_DIR}/events/all_events.json.xz)
list(APPEND romfs_extra_dependencies
parameters_xml
events_json)
endif()
list(APPEND romfs_extra_files ${PX4_BINARY_DIR}/component_general.json.xz)
list(APPEND romfs_extra_dependencies component_general_json)
set(config_romfs_extra_files ${romfs_extra_files} CACHE INTERNAL "extra ROMFS files" FORCE)
set(config_romfs_extra_dependencies ${romfs_extra_dependencies} CACHE INTERNAL "extra ROMFS deps" FORCE)
#设置端口
if(SERIAL_PORTS)
set(board_serial_ports ${SERIAL_PORTS} PARENT_SCOPE)
endif()
# ROMFS
if(ROMFSROOT)
set(config_romfs_root ${ROMFSROOT} CACHE INTERNAL "ROMFS root" FORCE)
if(BUILD_BOOTLOADER)
set(config_build_bootloader "1" CACHE INTERNAL "build bootloader" FORCE)
endif()
# IO board (placed in ROMFS)
if(IO)
set(config_io_board ${IO} CACHE INTERNAL "IO" FORCE)
endif()
if(UAVCAN_PERIPHERALS)
set(config_uavcan_peripheral_firmware ${UAVCAN_PERIPHERALS} CACHE INTERNAL "UAVCAN peripheral firmware" FORCE)
endif()
endif()
if(UAVCAN_INTERFACES)
set(config_uavcan_num_ifaces ${UAVCAN_INTERFACES} CACHE INTERNAL "UAVCAN interfaces" FORCE)
endif()
if(UAVCAN_TIMER_OVERRIDE)
set(config_uavcan_timer_override ${UAVCAN_TIMER_OVERRIDE} CACHE INTERNAL "UAVCAN TIMER OVERRIDE" FORCE)
endif()
# OPTIONS
#一些选择项,有些飞控板可以没有
if(CONSTRAINED_FLASH)
set(px4_constrained_flash_build "1" CACHE INTERNAL "constrained flash build" FORCE)
add_definitions(-DCONSTRAINED_FLASH)
if (NO_HELP)
add_definitions(-DCONSTRAINED_FLASH_NO_HELP="https://docs.px4.io/master/en/modules/modules_main.html")
endif()
endif()
if(CONSTRAINED_MEMORY)
set(px4_constrained_memory_build "1" CACHE INTERNAL "constrained memory build" FORCE)
add_definitions(-DCONSTRAINED_MEMORY)
endif()
if(TESTING)
set(PX4_TESTING "1" CACHE INTERNAL "testing enabled" FORCE)
endif()
if(ETHERNET)
set(PX4_ETHERNET "1" CACHE INTERNAL "ethernet enabled" FORCE)
endif()
if(CRYPTO)
set(PX4_CRYPTO ${CRYPTO} CACHE STRING "PX4 crypto implementation" FORCE)
endif()
if(KEYSTORE)
set(PX4_KEYSTORE ${KEYSTORE} CACHE STRING "PX4 keystore implementation" FORCE)
endif()
if(LINKER_PREFIX)
set(PX4_BOARD_LINKER_PREFIX ${LINKER_PREFIX} CACHE STRING "PX4 board linker prefix" FORCE)
else()
set(PX4_BOARD_LINKER_PREFIX "" CACHE STRING "PX4 board linker prefix" FORCE)
endif()
include(px4_impl_os)
px4_os_prebuild_targets(OUT prebuild_targets BOARD ${PX4_BOARD})
###########################################################################
# Modules (includes drivers, examples, modules, systemcmds)
set(config_module_list)
#对各个模块进行搜索,并添加到config_module_list
if(DRIVERS)
foreach(driver ${DRIVERS})
list(APPEND config_module_list drivers/${driver})
endforeach()
endif()
if(MODULES)
foreach(module ${MODULES})
list(APPEND config_module_list modules/${module})
endforeach()
endif()
if(SYSTEMCMDS)
foreach(systemcmd ${SYSTEMCMDS})
list(APPEND config_module_list systemcmds/${systemcmd})
endforeach()
endif()
if(EXAMPLES)
foreach(example ${EXAMPLES})
list(APPEND config_module_list examples/${example})
endforeach()
endif()
# add board config directory src to build modules
file(RELATIVE_PATH board_support_src_rel ${PX4_SOURCE_DIR}/src ${PX4_BOARD_DIR})
list(APPEND config_module_list ${board_support_src_rel}/src)
set(config_module_list ${config_module_list} PARENT_SCOPE)
endfunction()