这一篇算是对之前环境准备的总结,因为我发现即使是很熟练的开发者在选择开发环境的时候其实也蛮苦恼的,所以把现阶段部署开发环境的一些新的写出来,至少在这个时间点,现在大约是17年近中旬吧,按照我说的做,一定可以明明白白的把两套项目完整的最新固件都编译过去.
系统:
ubuntu 16.10
交叉编译器:
gcc-arm-none-eabi-5_4-2016q2
gcc-arm-none-eabi-4_9-2015q3
waf(这东西是按照apm官网来的编译工具,我也是第一次用,反正看着效率还是编译速度蛮高的)
配置:
dell precision 5520 i7 7820,东芝ssd,ddr4
px4的编译很简单,按照官网来,基本上是step by step.有一点要注意的就是我在选择交叉编译器的时候选了5.4版本,算是给自己挖了个小坑.
apm的编译一共出现了三个问题:
第一个是交叉编译工具的版本问题,仅最高支持到4.9.3,然而我之前配置px的时候盲目求新,所以需要解决ubuntu下不同交叉编译工具的版本切换问题,好在不是太麻烦.具体问题可以看这里解决:
第二个问题还是编译问题,缺少pip添加的相关包,具体就是future库和lxml库,这个问题比较绕,因为一般报错的时候不是直接报的:
In file included from /home/tianqide42/apm/ardupilot/libraries/GCS_MAVLink/GCS.h:8:0,
from /home/tianqide42/apm/ardupilot/ArduCopter/Copter.h:38,
from /home/tianqide42/apm/ardupilot/ArduCopter/control_guided_nogps.cpp:1:
/home/tianqide42/apm/ardupilot/libraries/GCS_MAVLink/GCS_MAVLink.h:25:56: fatal error: include/mavlink/v2.0/ardupilotmega/version.h: No such file or directory
#include "include/mavlink/v2.0/ardupilotmega/version.h"
他一般会报没有这个目录或文件,我忘了当时手动进目录去找的时候到底有还是没有了,好象是没有。
其实还有一个同样原因的错,我现在截不到了,是缺少引入的future库,这东西其实也是一个Python相关的依赖库,本文后边我们就会知道需要用pip安装就好了.
所以我们就可以说:众所周知mavlink一般是由python相关的一些依赖库生成的某些相关编译的东西,那么总是要解决问题,那怎么解决呢,这个问题不管我在apm的托管页面上直接搜(就是在issues那里搜),其实结果差不多,具体可看这里,或者这里。
其实他们都出自这里,就是我之前博客说的要善用issuse,反正这阶段的问题在搜索引擎大海捞针的搜真的不好使了,在这里还能司马当作活马医.
解决办法也很简单,就是
pip install future lxml
如果你像我一样运气还十分的不好,可能还有这种问题:
OSError: [Errno 13] 权限不够: '/usr/local/lib/python2.7/dist-packages/_dummy_thread'
这个问题我的解决办法是直接加sudo
不过我看网上一般不推荐直接sudo pip,其实关于python我并不是十分了解为啥不能,今年我会进行一定程度的学习,将来说不定可以解释,我感觉这些应该都是很基础的问题,只是现在自己并不太了解.
安装的时候又双叒叕会报:
The directory '/home/tianqide42/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/tianqide42/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
真是一波三折啊。
其实也可以忽略,参考:
最后仔细看了下
sudo pip install requests
的报错信息
才知道要加上 -H
sudo -H pip install requests
这样就好了
-H, --set-home
Request that the security policy set the HOME environment variable to the home directory specified by the target user's password database entry. Depending on the policy, this may be the default behavior.
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
因为我没这么做反正也编译成功了.
最后的问题是waf编译,如果之前pip没有安装future和lxml的话还是会类似的错,安装完之后就好了.
其实这些问题感觉都不是真正的编译,应该多涉猎一些常用语言或工具,比如python之类的,需要又一些其他知识,善用官方给的一些文档和问题搜索工具,比如这个issues等.
以上.