Ubnutu16.04 系统下编译PX4固件方法

  今天开始准备在Ubuntu16.04下搭建PX4的开发环境。早就听说源代码编译的过程中有很多坑,所以在编译源代码之前在网上搜索了很多教程,其中这个教程写的非常详细:

                https://blog.csdn.net/pix_csdn/article/details/81913610

  这篇博客是2018年8月的,想起自己曾经在2018年5月左右配置过相同的开发环境,踩坑踩到怀疑人生。编译安装过程中的很多问题在这边博客中都可以找到。但是由于我在编译的时候确实出现了跟那篇博文不同的问题,因此决定单独记一下笔记,一来防止自己忘记,二来如果各路大佬看到如果有错误的话也烦请纠正一下。

  首先,添加用户组,然后把Ubuntu自带的modemmanager管理器卸载掉。代码如下(执行完代码需要注销用户并重新登录):

sudo usermod -a -G dialout $USER
sudo usermod -a -G dialout $USER

  接下来就是安装各种前期的库文件,代码如下(可能不仅限于这些,如果后期发现缺哪些链接可以灵活补充):

sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update

sudo apt-get install python-argparse git-core wget zip -y
sudo apt-get install python-empy qtcreator cmake build-essential genromfs -y

sudo apt-get install openjdk-8-jre
sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8-jdk openjdk-8-jre clang-3.5 lldb-3.5 -y

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update

sudo apt-get install python-serial openocd -y
sudo apt-get install flex bison libncurses5-dev autoconf texinfo build-essential -y
sudo apt-get install libftdi-dev libtool zlib1g-dev python-empy -y

sudo apt-get install lsb-core

  可怕,是不是感觉装了好多好多东西。嗯,是的,就是这样。。。。还没有结束,在下载源码编译的过程中,还会出现一些错误,对应的错误信息为”缺少某些模块和某些库文件“,因此,我们可以在编译之前提前把这些缺少的东西提前装上,当然也不能保证100%没问题,如果编译过程中发现缺少某些模块,还是需要额外安装的。代码如下:

sudo apt-get install python-jinja2
sudo apt-get install python-pip
sudo pip install numpy toml

  现在还差一个最重要的模块没有安装,就是gcc-arm-none-eabi,这个是在Ubuntu编译ARM程序的必备工具。我们可以随意安装一个,直接使用sudo apt-get install 方式就可以,但是这样安装的默认版本一般都不能满足要求。在这里,如果各位想试错误的话,可以先暂时随意安装一个,代码如下:

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi -y

  安装之后,可以使用arm-none-eabi-gcc --version来查看我们安装的是哪个版本,我这里是4.9.3。

  至此,就可以下载PX4的源码,并且编译安装了。

  第一步:执行如下操作,如果期间提示失败之类的,就将src文件夹中的内容清空,然后重新git clone即可,有时候网速确实慢的可怕,可怕,真可怕。。。

mkdir -p ~/Pixhawk/src
cd ~/Pixhawk/src
git clone https://github.com/PX4/Firmware.git

  第二步:更新第一步下载好的内容,如果不更新,我们会发现缺了好多好多好多东西。。。

cd Firmware
git submodule update --init --recursive

  如果遇到相同的网速之类的问题,处理方法与第一步相同,即删除下载失败的模块文件夹,然后重新执行这个指令。下载完成之后,就可以进行编译。但是在这个时候,我们有两个地方需要注意:

  其一是gcc-arm-none-eabi的版本,我们上文提到过了,也是很多博客中提到的共同问题。

  其二是我们所使用的是哪款硬件,因为Pixhawk和Pixhawk2对应的固件是不一样的,这个问题我们可以访问PX4的Github源代码的网页GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software,下边有详细的说明,如下所示:

  如图可以看出,我们使用的是Pixhawk2,因此需要编译px4_fmu-v3_default这个版本。另外在这里也说明一下,这种ReadMe真的很有用,它有时会帮助我们解决很多问题。下边就可以编译源代码了:

make px4_fmu-v3_default

  不出所料,果然报错了,但是这种错误并不是提示缺少某些东西或者类似Flash内存不足之类的。而是类似于我们编写普通C++代码时出现的类似语法错误、函数调用错误或者文件包含错误等等。很明显,这种错误与我们的系统无关,与我们的开发环境无关,与人家的开源代码也无关。嗯是的,终极原因就是gcc-arm-none-eabi的版本问题!

  我先查看了github网页上的Issues部分,查看有没有类似问题,果然找到了一个(具体哪个问题编号我忘记了,sorry)。里面说他使用了一个"new version(7)"然后,他的编译就"done"了。这里给出gcc-arm-none-eabi的下载链接:

  https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

  我直接下载的当前最近版本:gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2,应该是version8。然后执行以下操作:

#将以前版本的卸载掉
sudo apt-get remove gcc-arm-none-eabi
#解压
tar -jxf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
#移动
sudo mv gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2 /opt


  然后进入~/.bashrc文件,在里面添加这样一句话:

export PATH=/opt/gcc-arm-none-eabi-8-2019-q3-update/bin:$PATH

  然后保存并关闭文件,在终端中执行:

source ~/.bashrc

  以上操作的作用是下载新版本(version8)的编译器,然后把他解压移动到/opt文件夹中,并同时添加系统环境变量,目的是为了让PX4能够找到它。现在已经使用最新版本的编译器了,然后同样make px4_fmu-v3_default,发现还是报错!错误是因为两个文件中的两个函数调用方法有问题,不用思考也知道:它是不可能会有问题的。

  同样地,去github的网页的Issues里面搜索相关的问题,发现一位国外小哥确实遇到了,他说"version8 is very strict"有的时候不允许一些”lazy function"的使用。因此,很显然,我们的gcc-arm-none-eabi版本太高了。。。因此,我又去官网下载了version7,然后像安装version8一样把version7安装完成了,注意环境变量的配置,记得把version8相关的环境变量删除掉。然后再执行make px4_fmu-v3_default,我的编译就可以了。

  如果哪里有错误,欢迎各位指正。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值