ArduCopter编译流程

2017 年 7 月 26 日 无人机 Jone.海龙

 ByJone.海龙     Time 2017.7.25

发现错误的大神欢迎加微信 Zhaohailong123455432

 

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

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

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

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


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

一、apm.mk

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

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


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


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

二、Environ.mk

配置环境变量GIT_VERSIONSRCROOTSKETCHBOOKSKETCHBUILDROOTHAL_BOARD

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

 

三、Configure.mk

直接上截图


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

 

四、Help.mk

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

 

五、Targets.mk

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

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


3、定义了make clean编译指令

4、调用moudules.mkmavgen.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_AVRAP_HALPX4),并更新到LIBTOKENS变量中;

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

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

故加载board_px4.mk

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

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

十、find_tools.mk

find_tools.mk配置了编译过程中所需要的工具所在的路径和名称,包括CXXCCASARLDGDBOBJCOPE


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


十一、px4_targets.mk(主要)

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

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

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

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

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

 

在这个文件里也定义了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

该文件是指定固件编译所有px4fmuv1v2v4)需要的驱动及任务模块。

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

 


长按识别图中二维码关注我们!

登录查看更多
0

相关内容

2345网址导航始建于2005年9月。宗旨是方便网友们快速找到自己需要的网站,而不用去记太多复杂的网址;同时也提供多种搜索引擎入口、实用查询、天气预报、团购导航、影视大全、地方导航等服务。于2005年9月正式上线,迅速成为国内第二大网址导航网站。2345网址导航收录了网民需要的各类网站,提供实用查询、邮箱登录、天气预报、搜索引擎、在线收藏等常用网络服务。
【ACL2020】多模态信息抽取,365页ppt
专知会员服务
148+阅读 · 2020年7月6日
【2020新书】实战R语言4,323页pdf
专知会员服务
102+阅读 · 2020年7月1日
华为发布《自动驾驶网络解决方案白皮书》
专知会员服务
128+阅读 · 2020年5月22日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
96+阅读 · 2019年12月4日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
30+阅读 · 2019年10月17日
微信小程序支持webP的WebAssembly方案
前端之巅
19+阅读 · 2019年8月14日
ISeeYou一款强大的社工工具
黑白之道
32+阅读 · 2019年5月17日
用PyTorch做物体检测和追踪
AI研习社
12+阅读 · 2019年1月6日
WebAssembly在QQ邮箱中的一次实践
IMWeb前端社区
13+阅读 · 2018年12月19日
误差反向传播——RNN
统计学习与视觉计算组
18+阅读 · 2018年9月6日
【下载】PyTorch 实现的YOLO v2目标检测算法
专知
15+阅读 · 2017年12月27日
Foreground-aware Image Inpainting
Arxiv
4+阅读 · 2019年1月17日
A General and Adaptive Robust Loss Function
Arxiv
8+阅读 · 2018年11月5日
Arxiv
3+阅读 · 2018年10月25日
Structure Aware SLAM using Quadrics and Planes
Arxiv
4+阅读 · 2018年8月13日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关VIP内容
相关资讯
微信小程序支持webP的WebAssembly方案
前端之巅
19+阅读 · 2019年8月14日
ISeeYou一款强大的社工工具
黑白之道
32+阅读 · 2019年5月17日
用PyTorch做物体检测和追踪
AI研习社
12+阅读 · 2019年1月6日
WebAssembly在QQ邮箱中的一次实践
IMWeb前端社区
13+阅读 · 2018年12月19日
误差反向传播——RNN
统计学习与视觉计算组
18+阅读 · 2018年9月6日
【下载】PyTorch 实现的YOLO v2目标检测算法
专知
15+阅读 · 2017年12月27日
Top
微信扫码咨询专知VIP会员