bellyoungsmile 发表于 2022-11-30 10:49:38

Pixhawk飞控源码目录结构及编译流程分析

文章来源:无人机





源码目录结构(获取源码的方法这里就不多说了,官网或者百度都找得到,用git工具 或者直接上github 下载都可以,推荐还是通过git工具去载, 毕竟在调用make编译之前其实还会通过git去载一些缺少模块,我的是vmware下的Ubuntu的环境。这博客在win下写吧,贴代码好像不是很方便,ubuntu下吧截图工具没有又qq截图来得好用,感觉博客写起来有点蛋疼,不知道你们都是咋写的……然后我关注的也是Copter部分,别的就没有深入了解也就不多说……)

一、Vehicle directory:ArduCopter(多旋翼)、ArduPlane(固定翼)、APMrover2(巡逻车)、AntennaTracker(追踪天线)

二、AP_HAL:硬件抽象层

三、Libraries:库文件

四、Tools directory: Tools/scripts/install-prereqs-ubuntu.sh//运行这个shell脚本会自动安装ubuntu环境下编译固件所需要工具,下面看下该文件的内容
   5    BASE_PKGS="gawk make git arduino-core curl"
   6    PYTHON_PKGS="pymavlink MAVProxy droneapi catkin_pkg"
   7    PX4_PKGS="python-serial python-argparse openocd flex bison libncurses5-dev \
   8            autoconf texinfo build-essential libftdi-dev libtool zlib1g-dev \
   9            zip genromfs python-empy"
    10    BEBOP_PKGS="g++-arm-linux-gnueabihf"
    11    SITL_PKGS="g++ python-pip python-setuptools python-matplotlib python-serial python-scipy python-opencv python-numpy python-pyparsing ccache realpath"
   。//这里列出了需要的一些外部库文件,

   。

    66   $APT_GET install $BASE_PKGS $SITL_PKGS $PX4_PKGS $BEBOP_PKGS
    67    sudo pip2 -q install $PYTHON_PKGS
   。//这里将对上面列出的需要的库进行安装,当然如果已经装了,会自动跳过,这就是apt-get智能的一面

   101    apt-cache search arm-none-eabi
   102   
   103    (
   104   cd $ARDUPILOT_ROOT   
   105   git submodule init
   106   git submodule update
   107    )//自动下载或者更新飞控点某些模块

五、External support code:PX4Nuttx(板载实时系统)、PX4Firmware(px4固件源码目录)、mavlink(飞控与地面站通信协议)、uavcan(飞行器can总线通信协议)

编译流程:

    了解了大致的目录结构,我们来看看Arduopter主目录下的Makefile(Makefile 见过很多了,简单的、复杂点都看过,最复杂的应该莫过于内核Makefile了吧,这里的Makefile也算比较复杂了)

linux@ubuntu:~/src/ardupilot/ArduCopter$ cat Makefile -n
   1    include ../mk/apm.mk
   2   
好了,就一行……来看看apm.mk是什么名堂,(有点长,我们直接看关键部分)

linux@ubuntu:~/src/ardupilot/ArduCopter$ cat -n../mk/apm.mk
。。。

    22    # common makefile components
    23    include $(MK_DIR)/targets.mk
    24    include $(MK_DIR)/sketch_sources.mk
。。。

    36   
    37    ifeq ($(HAL_BOARD),HAL_BOARD_PX4)
    38    include $(MK_DIR)/board_px4.mk
    39    endif
    40   

。。。target.mk描述了所有平台下的编译目标,我们用不着,这里我们先看看具有针对性px4平台的board_px4.mk文件

linux@ubuntu:~/src/ardupilot/mk$ cat -n board_px4.mk
   1    TOOLCHAIN = NATIVE
   2    include $(MK_DIR)/find_tools.mk
   3    include $(MK_DIR)/px4_targets.mk

find_tools.mk从名字就可以知道他干的啥了,而这里的px4_targets.mk中描述的就是px4-v1、px4-v2....等等编译目标,内容比较多,我就不全贴了,反正到这里就明白了,

px4_targets.mk(注意px4_targets.mk!= target.mk)中声明的就是我们的编译目标,及烧写的命令(ardupilot官网编译教程中的,编译px4的时候make px4-v1,编译pixhawk的时候make px4-v2,烧写时makexxx-upload)

。。。

    48    # we have different config files for V1 and V2
    49    PX4_V1_CONFIG_FILE=$(MK_DIR)/PX4/config_px4fmu-v1_APM.mk
    50    PX4_V2_CONFIG_FILE=$(MK_DIR)/PX4/config_px4fmu-v2_APM.mk//这文件包含了编译目标的依赖,也就是具体编译的那些模块哪些驱动
    51    PX4_V4_CONFIG_FILE=$(MK_DIR)/PX4/config_px4fmu-v4_APM.mk

。。。

    98    px4-v2: $(BUILDROOT)/make.flags CHECK_MODULES $(MAVLINK_HEADERS) $(PX4_ROOT)/Archives/px4fmu-v2.export $(SKETCHCPP) module_mk px4-io-v2
    99      $(RULEHDR)
   100      $(v) cp $(PX4_V2_CONFIG_FILE) $(PX4_ROOT)/makefiles/nuttx/
   101      $(PX4_MAKE) px4fmu-v2_APM
   102      $(v) arm-none-eabi-size $(PX4_ROOT)/Build/px4fmu-v2_APM.build/firmware.elf
   103      $(v) cp $(PX4_ROOT)/Images/px4fmu-v2_APM.px4 $(SKETCH)-v2.px4
   104      $(v) $(SKETCHBOOK)/Tools/scripts/add_git_hashes.py $(HASHADDER_FLAGS) "$(SKETCH)-v2.px4" "$(SKETCH)-v2.px4"
   105      $(v) echo "PX4 $(SKETCH) Firmware is in $(SKETCH)-v2.px4"

。。

   139    px4-v2-upload: px4-v2      //烧写命令
   140      $(RULEHDR)
   141      $(v) $(PX4_MAKE) px4fmu-v2_APM upload
   142   

。。

163    px4-io-v2: $(PX4_ROOT)/Archives/px4io-v2.export
   164      $(v)+ $(MAKE) -C $(PX4_ROOT) -f $(PX4_ROOT)/Makefile.make px4io-v2_default EXTRADEFINES="-DARDUPILOT_BUILD"
   165      $(v) cp $(PX4_ROOT)/Images/px4io-v2_default.bin px4io-v2.bin
   166      $(v) cp $(PX4_ROOT)/Build/px4io-v2_default.build/firmware.elf px4io-v2.elf
   167      $(v) mkdir -p $(MK_DIR)/PX4/ROMFS/px4io/
   168      $(v) cp px4io-v2.bin $(MK_DIR)/PX4/ROMFS/px4io/px4io.bin
   169      $(v) mkdir -p $(MK_DIR)/PX4/ROMFS/bootloader/
   170      $(v) cp $(SKETCHBOOK)/mk/PX4/bootloader/px4fmuv2_bl.bin $(MK_DIR)/PX4/ROMFS/bootloader/fmu_bl.bin
   171      $(v) echo "PX4IOv2 Firmware is in px4io-v2.bin"
   172   

在第 50行,   PX4_V2_CONFIG_FILE=$(MK_DIR)/PX4/config_px4fmu-v2_APM.mk//这文件包含了编译目标的依赖,也就是具体编译的那些模块哪些驱动

   1    #
   2    # Makefile for the px4fmu-v2_APM configuration
   3    #
   4    include $(SKETCHBOOK)/mk/PX4/px4_common.mk
   5   
   6    MODULES      += drivers/lsm303d
   7    MODULES      += drivers/l3gd20
   8    MODULES      += drivers/mpu9250
   9    MODULES      += drivers/boards/px4fmu-v2
    10    MODULES      += drivers/pwm_input
    11    MODULES         += modules/uavcan
    12    MODULES         += lib/mathlib
    13    MODULES      += drivers/px4io
    14    MODULES      += drivers/px4flow
    15    MODULES      += drivers/oreoled

在看px4_common.mk文件,略多,就不全贴了,

    1    #
   2    # common makefile elements for all PX4 boards
   3    #
   4   
   5    #
   6    # Use the configuration's ROMFS.
   7    #
   8    ROMFS_ROOT   = $(SKETCHBOOK)/mk/PX4/ROMFS
   9    MODULES      += $(APM_MODULE_DIR)
    10   
    11    #
    12    # Board support modules
    13    #
    14    MODULES      += drivers/device
    15    MODULES      += drivers/stm32
    16    MODULES      += drivers/stm32/adc
    17    MODULES      += drivers/stm32/tone_alarm
    18    MODULES      += drivers/led
    19    MODULES      += drivers/px4fmu
    20    MODULES      += drivers/rgbled
    21    MODULES      += drivers/mpu6000
    22    MODULES      += drivers/hmc5883
    23    MODULES      += drivers/ms5611
    24    MODULES      += drivers/mb12xx
    25    MODULES      += drivers/ll40ls
    26    MODULES      += drivers/trone
    27    #MODULES    += drivers/gps
    28    #MODULES    += drivers/hil
    29    #MODULES    += drivers/hott_telemetry
    30    #MODULES    += drivers/blinkm
    31    #MODULES    += modules/sensors
    32    MODULES      += drivers/airspeed
    33    MODULES      += drivers/ets_airspeed
    34    MODULES      += drivers/meas_airspeed
    35    MODULES      += drivers/mkblctrl
    36    MODULES      += drivers/batt_smbus
    37    MODULES      += drivers/irlock
    38    。。。。

这些就给出了编译的各个模块!!

【申明】文章来源:部分素材来自于网络文章,不代表本微信观点。如有侵权,请联系我们删除,联系邮箱:jiajia.cai@utmglobal.cn

欢迎投稿:news.uavchina@utmglobal.cn

页: [1]
查看完整版本: Pixhawk飞控源码目录结构及编译流程分析