ArduCopter编译流程

ArduCopter编译流程

 

转自  ByJone.海龙     Time 2017.7.25

 

Apm代码的编译规则、编译顺序、程序文件包含和调用关系通过makefile文件定义。

想看apm的编译流程可以直接看ardupilot文件夹下的mk文件夹,目录如下:

 

ArduCopter的编译就是调用的上面的apm.mk文件

在ArduCopter文件夹下有makefile文件,里面就一行

 

然而并没有这么简单,后面就略复杂了。先来看apm.mk文件。

一、apm.mk

在执行make px4-v2编译指令后,首先加载apm.mk文件,主要完成两个功能:

1、判断编译系统类型,确定当前mk文件目录变量(MK_DIR)。

 

2、include包含其它文件,依次编译。

 

 

下面简单说下包含的都是干啥的,其实可以直接跳到board_px4.mk,毕竟我们的硬件是px4。

二、Environ.mk

配置环境变量GIT_VERSION、SRCROOT、SKETCHBOOK、SKETCH、BUILDROOT、HAL_BOARD

BUILDROOT环境变量的配置解释了成功编译程序后生产build.ArduCopter文件夹在哪。

 

三、Configure.mk

直接上截图

 

新的固件已经不需要这个了。(那还包含干啥)

 

四、Help.mk

Help.mk用于打印帮助信息。

 

五、Targets.mk

1、通过BOARDS和FRAMES变量定义的关键字解析编译指令。

 

2、通过eval函数动态生成一个程序编译依赖关系。

 

3、定义了make clean编译指令

4、调用moudules.mk和mavgen.mk两个文件。

 

 

六、moudules.mk

1、其中moudules.mk针对飞控源码中子程序模块的完整性在git服务器中进行检索。

2、定义了make modules-update命令。

七、mavgen.mk

mavgen.mk用于生成MAVLINK消息模块

1、设置关于mavlink头文件、输出路径等一系列变量。

2、配置使用python工具生成mavlink协议。

八、sketch_sources.mk

加载程序中所有源文件到指定变量LIBTOKENS,并配置目标文件(obj)。

1、将解析make.inc文件而得到的库目录列表赋值到LIBTOKENS中;

我们编译arducopter时是在该文件夹下,所以解析时也就解析该文件夹下的make.inc。

该文件也就是apm库里的了

 

 

2、根据特定的编译平台加载相应的硬件抽象层(AP_HAL_AVR、AP_HALPX4等),并更新到LIBTOKENS变量中;

 

3、解析所有库文件路径列表(绝对路径和相对路径)、所有库源文件绝对路径等,并赋值到相应变量。

 

根据Environ.mk配置的环境变量可得HAL_BOARD=HAL_BOARD_PX4

 

故加载board_px4.mk。

九、board_px4.mk  重头戏,上面说可以直接跳这。

定义了TOOLCHAIN=NATIVE,并加载find_tools.mk和px4_targets.mk两个文件。

 

十、find_tools.mk

find_tools.mk配置了编译过程中所需要的工具所在的路径和名称,包括CXX、CC、AS、AR、LD、GDB、OBJCOPE

其中CCACHE变量应该是用于加快编译速度的全局临时变量。

十一、px4_targets.mk(主要)

px4_targets.mk最终执行编译的地方。

定义PX4FIRMWARE、PX4NUTTX以及UAVCAN文件路径,并解析其版本。

 

配置变量PX4_V2_CONFIG_FILE=mk/PX4/config_px4fmu-v2_APM.mk,

 

该.mk文件指定了固件编译需要哪些驱动及任务模块;

 

 

并包含了px4_common.mk文件,文件指定固件编译所有px4fmu(v1、v2、v4)需要的驱动及任务模块。

 

在这个文件里也定义了make的具体指令,编译的时候make px4-v2。

 

 

烧录固件时make px4-v2-upload,哈哈。

 

那么假如写make px4-v2写烦了,可以把这个里改成px4-hai long is a good boy,

输入指令 make px4-hai long is a goodboy,就可以编译了。

 

 

十二、px4_common.mk

该文件是指定固件编译所有px4fmu(v1、v2、v4)需要的驱动及任务模块。

 

到这就差不多了,其实我就想让APM编译自己添加的驱动文件,好费劲的说。

posted @ 2017-07-26 13:47  法修1987  阅读(631)  评论(0)    收藏  举报