目录
- 树莓派控制无人机实现定点降落(三)——PX4固件源码编译中的坑
-
- 1、建立工作空间,克隆固件源码
- 2、arm-none-eabi-gcc安装
- 3、错误解决
- 4、成功编译
树莓派控制无人机实现定点降落(三)——PX4固件源码编译中的坑
我这里是使用的我自己的电脑,安装的是ubuntu16.04系统,装有ROS Kinetic,包括gazebo之类的软件已经有了,这些安装方法网上也有很多,这里不多说。 我的飞控是pixhawk4
1、建立工作空间,克隆固件源码
mkdir -p ~/Firmware_ws/src
cd ~/Firmware_ws/src
git clone https://github.com/PX4/Firmware.git
cd Firmware
git submodule update --init --recursive
注:若想安装指定版本的固件,使用如下方法:
# 查看目前固件版本
git describe --always --tags
2、arm-none-eabi-gcc安装
在编译时候要用到交叉编译器arm-none-eabi-gcc,可以用下面命令查看其版本:
arm-none-eabi-gcc --version
一般用apt-get install安装的应该都是4.3版本,但这个版本大概率是编译不成的,包括后面的很多问题,都可能是这个编译器版本的问题,现在我们通过源码安装一个新版本的: 先上官网下个新版本的网址在此 我大概试了试,新的几个版本7-2018-q2、8-2019-q3、8-2019-q4都可,我这里用的是8-2019-q3-update这个版本,下载下来以后解压:
# 解压
cd ~/Downloads
tar -jxf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
解压出来的文件夹可以放在任意位置,我这里就直接放到~/Downloads下了,一般有的人放在/usr/lib下,有人放在/opt下,都可以,只是后面环境变量设置一下就好
sudo vim ~/.bashrc
# 在最后添加
export PATH=[路径]/gcc-arm-none-eabi-8-2019-q3-update/bin:$PATH
我括起来的路径换成文件所在路径就好,如在这里我就添加:
export PATH=~/Downloads/gcc-arm-none-eabi-8-2019-q3-update/bin:$PATH
添加好后还需要设置软链接让编译时能找到它:
sudo ln -s [路径]/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gcc /usr/bin/
sudo ln -s [路径]/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-g++ /usr/bin/
到此,交叉编译器就安装好了
3、错误解决
在这里编译时候一般还会出错,大家可以试一试,出错内容如下:
error: this statement may fall through [-Werror=implicit-fallthrough=]
mixer_text_length = 0;
~~~~~~~~~~~~~~~~~~^~~
可以到官方github的讨论区里看到有人也遇到了这样的错误,回答说原因是ccache的版本过旧(有是版本问题…) 可以看到Firmware/Tools/setup/ubuntu.sh中105行为下载ccache的命令,按照该命令我们到http://launchpadlibrarian.net里寻找,果然有更新的版本,我这里下载最新的版本3.7.7-1:
wget -O /tmp/ccache_3.7.7-1_amd64.deb http://launchpadlibrarian.net/459437926/ccache_3.7.7-1_amd64.deb
sudo dpkg -i /tmp/ccache_3.7.7-1_amd64.deb
这时可以执行ccache -V查看版本,看到已经成功更新
4、成功编译
到这里我已经没有报错了,执行以下命令成功编译:
cd Firmware
sudo make px4_fmu-v5_default