您的位置:首页 > 其它

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

2016-06-13 16:47 381 查看
(PS:这是第一次写博客,以前也有记录一些经验总结心得什么的,不过都是手写笔记或者记在word上,csdn看了好久,总觉的只索取不付出心里有些过意不去,以后尽量都写到这吧,也会搬一些以前记在word里的东西过来,大家不要嫌弃就好……)

源码目录结构(获取源码的方法这里就不多说了,官网或者百度都找得到,用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,烧写时make  xxx-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    。。。。

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

好了,先写到这吧……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: