折返的Liung

我如溪水,静静流淌在山涧~~我如白云,俯瞰此生今生~~

APM-采用Make方法编译APM2.x(Win,Mac,Linux)

概述

对于开发者而言编译APM应用的最佳方式是使用带有分布式版本管理的Makefile系统,该系统是编译APM的标准方式。APM应用不再使用标准的Arduino IDE,因为APM编译需要的Arduino IDE基础库已经被排除在编译之外。

对于不喜欢使用make方法的开发者,可以使用一个修改版的Arduino IDE来模拟通常的APM编译过程。


要求

APM的makefiles可以在Mac OS和Liunx平台运行。Windows平台用户可以通过Unix兼容系统如Mingw或Cygwin使用Makefiles。


Mac OS

Mac OS系统需要:

  • 1.0或更高版本的Arduino。Arduino安装程序提供了一个AVR的编译器。
  • 苹果开发者工具(从苹果官网可免费下载)。它提供了一个包含GNU Make的命令行工具。

Arduino应该安装到可以被Spotlight工具索引到的位置。


Linux

请按照本页面的指导在Linux上进行代码编译。

  • GNU sed(stream editor,流编辑器)工具
  • GNU make 工具,也被称为‘gmake’
  • GNU awk 工具, 也被称为‘gawk’,注意: 许多Liunx发布版本默认没有安装‘gawk’。你可以通过which gawk命令测试该工具是否已经安装
  • AVR-GCC 工具链

还有许多方法能够得到针对你的系统的所有工具集。在Linux上安装AVR工具链时你可以咨询Arduino的Linux指导手册相关说明。


Windows

大概需要如下基本要求:

  • 可正常运行的当前版本Arduino
  • 安装了基本Cygwin软件,确保带有GNU sed、GNU make、GNU awk等模块(地址:http://www.cygwin.com/

如果你将arduino安装在一些特定地方,那么当前makefile是不能够自动识别其位置。这时,你需要使用环境变量定义一个ARDUINO路径,或者将arduino可执行程序路径添加在config.mk配置文件中以保证makefile能够正常运行。


准备工作

从https://github.com/diydrones/ardupilot中克隆一份APM代码库到本地。

git clone https://github.com/diydrones/ardupilot.git

第一次编译代码前,先从APM内相应模式下的sketches中使用make configure命令,将会在ardupilot代码库的顶层目录生成config.mk文件。

cd ardupilot/ArduCopter
make configure
cd ..
vim config.mk

根据自己的系统类型来编辑config.mk文件内容

接下来你需要根据自己的需要执行:


编译

对于默认平台编译sketch文件,可以在该sketch目录下调用不带参数的make命令。

cd ardupilot/ArduPlane
make

默认的编译文件输出位于$TMPDIR/_sketchname_.build

make
%% param_table.o
%% ArduPlane.cpp
%% ArduPlane.o
...
%% ArduPlane.elf
%% ArduPlane.eep
%% ArduPlane.hex

加载固件

如果你已经配置了正确的PORT变量,那么可以利用upload参数会使用avrdude工具将编译完成的APM应用加载到基于AVR的平台系统中。

$ cd ardupilot/ArduPlane
$ make upload

对于PX4平台系列,利用px4-upload参数会使用PX4 bootloader来执行加载操作。


故障排除

编译过程中,编译器可能会抛出代码错误之外的一些诊断问题,这可能潜在地影响代码是否能够成功编译。这些诊断问题可能包括:

WARNING: More than one copy of Arduino was found, using …(Mac OS only)

Spotlight工具检测到你系统中存在多个Arduino程序。检查打印出来的Arduino路径,确保使用具有正确版本号的Arduino程序。为了避免出现该问题,可以直接删除其他老版本的Arduino,也可以在调用编译系统时指定ARDUINO选项。通常情况下编译系统会使用最近频繁使用的某版本Arduino。

ERROR: must set BOARD before including this file.

sketch的Makefile文件中没有定义BOARD变量。正常情况下对于编译APM2.x该变量设置为atmega2560

ERROR: Spotlight cannot find Arduino on your system.(Mac OS only)

Arduino没有安装,或者是已经安装在某个位置但没有被Spotlight索引到。你既可以使Spotlight重新定向Arduino的安装位置,也可以和上面说明一样设置ARDUINO选项。需要注意地是Spotlight重新索引需要花费一些时间,所以当Spotlight能够定位Arduino位置时可能还不能够立刻解决此问题。

ERROR: Cannot find Arduino on this system

(Linux 和 Windows系统可能存在)Arduino没有在默认索引位置找到。可以将Arduino移动到标准路径,也可以直接在config.mk文件中指定ARDUINO选项为当前Arduino位置。

ERROR: cannot find the compiler tools anywhere on the path …

没有找到编译器和相关工具。对于Mac OS和Win平台,这些工具正常情况下是Arduino程序的一部分,出现该信息表明Arduino安装程序已经损坏或者不完整。

对于Linux系统,这意味着AVR工具没有安装到标准位置。可以设置TOOLPATH选项指定为包含AVR工具的目录,也可以安装它们到标准位置。正常情况下Liunx系统下安装Arduino会更正AVR工具的安装问题。

ERROR: cannot find gawk – you may need to install GNU awk

(Linux和Windows系统可能存在)需要GNU awk工具,但是没有安装或者没有检测到。在命令窗口使用gawk -version检查awk工具是否工作。可能需要显式地使用AWK选项指定其安装位置。


链接

  1. APM官网原文链接
  2. APM开发人员参考手册目录列表

(over)

Comments