樹莓派控制無人機實現定點降落(三)——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