http://blog.csdn.net/xlb7679/article/details/51658956

(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    。。。。

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

好了,先写到这吧……

阅读全文
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

  1. asterisk源码目录结构

    版本:asterisk-1.8.7.1 下载地址:asterisk-1.8.7.1.tar.gz main函数所在文件:main/asterisk.c (3182行) 文件夹: addons :ast ...

  2. linux与安卓系统目录,android系统架构及源码目录结构

    1. android系统架构: android系统架构采用了分层架构的思想,如下图所示,从上到下共4层,分别为:应用程序层.应用程序框架层.系统库和android运行时层.linux内核层. 每层功能 ...

  3. 【lLinux驱动】linux内核源码目录结构

    linux内核源码目录结构 代码目录结构 在阅读源码之前,还应知道Linux内核源码的整体分布情况.现代的操作系统一般由进程管理.内存管理.文件系统.驱动程序和网络等组成.Linux内核源码的各个目录 ...

  4. Android系统源码学习——源码目录结构介绍

    2019独角兽企业重金招聘Python工程师标准>>> Android 4.0源码目录结构: 本文介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Andr ...

  5. Linux操作系统内核源码目录结构详解

    Linux内核源码目录结构 代码目录结构 在阅读源码之前,还应知道Linux内核源码的整体分布情况.现代的操作系统一般由进程管理.内存管理.文件系统.驱动程序和网络等组成.Linux内核源码的各个目录 ...

  6. Android4.0源码目录结构详解

    Android4.0源码目录结构详解 Android4.0与2.1目录差不多 alsa这块,注意external/tinyalsa下有: include/tinyalsa/asoundlib.h mi ...

  7. Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构

    目录 一.Live555介绍 1.Live555项目介绍 2.官网及帮助文档介绍 二.源码目录结构 1.UsageEnvironment 2.BasicUsageEnvironment 3.group ...

  8. Chromium源码目录结构简介

    Chromium源码目录结构简介入门必备. High-level overview 高级概述 Chromium is separated into two main parts (excluding ...

  9. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

最新文章

  1. 【PySlowFast】Facebook开源算法代码库PySlowFast,轻松复现前沿视频理解模型
  2. NFV — 高性能 NFVI
  3. C#中dynamic、ExpandoObject 的正确用法
  4. 【POJ - 1562】Oil Deposits (dfs搜索,连通块问题)
  5. 《深入浅出DPDK》读书笔记(三):NUMA - Non Uniform Memory Architecture 非统一内存架构
  6. 查询group_by 与 order by
  7. Redis Sentinel 机制与用法(二)
  8. 20200530每日一句
  9. 清华数据结构c语言版严蔚敏pdf,清华数据结构习题集答案(C语言版严蔚敏).pdf
  10. 邻接矩阵实现(有向邻接矩阵)、(无向邻接矩阵) 基于C++
  11. Android--最全的启动第三方APP,应用程序(按需启动,历史启动)
  12. mysql怎么设置id自动编号_MySQL中实现ID编号自动增加的方法
  13. 加密、签名以及苹果的双重签名机制
  14. 14个种类,600款笔刷!如何做一套属于自己的精美笔刷?
  15. C++类与对象之封装篇
  16. Chrome浏览器完美保存整个网页的两种方式
  17. c语言realpath
  18. java中gettext()_java getText()
  19. 并不是只有 Redis 才可以做缓存
  20. 正在爆发的互联网革命(30余位互联网大腕、100余家电视台等媒体鼎力推荐)

热门文章

  1. 案例让一个命令在开机的时候自动运行的方法
  2. 从编程角度看32位和64位
  3. 通过Fiddler进行手机抓包
  4. [网络安全自学篇] 四十三.恶意样本原理及远程服务器IPC$安全缺陷解析
  5. iOS之性能优化·优化App界面的渲染与流畅度
  6. 【数据结构与算法】之深入解析“扁平化多级双向链表”的求解思路与算法示例
  7. OpenGL ES之Swift使用GLSL语言渲染图片的显示
  8. 实验2 递归下降语法分析程序设计
  9. Jenkins 创建一个freestyle的Job
  10. PTA —— 基础编程题目集 —— 编程题 —— 7-3 逆序的三位数 (10 分)