PX4固件源码编译中的坑

我这里是使用的我自己的电脑,安装的是ubuntu16.04系统,装有ROS Kinetic,包括gazebo之类的软件已经有了,这些安装方法网上也有很多,这里不多说。
1、创建仿真环境,第一步是源码编译PX4固件:
我的飞控是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 --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
发布了11 篇原创文章 · 获赞 1 · 访问量 365

猜你喜欢

转载自blog.csdn.net/qq_43414059/article/details/104077070