概述
对于开发者而言编译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
选项指定其安装位置。
链接
(over)