Ubuntu环境下Pixhawk原生固件PX4的编译

Ubuntu下Pixhawk原生固件PX4的编译这个问题困扰了两天时间,可能是博主脑力不够,主要是环境搭建不起来,主要原因应该是路径的原因,最后在大师傅的帮助下还好成功将路径搭建好,成功编译。

下面就跟大家分享一下环境搭建的过程。

1.操作环境

每次写文章,环境一定要介绍的,不同的环境总会出现不同的问题

我的环境是Windows下面安装虚拟机,虚拟机跑Ubuntu

Windows:win10 64位

虚拟机:VMware Workstation 12 Pro  12.1.0 build-3272444

Ubuntu:Ubuntu15.10

2.编译环境搭建

(1)权限设置

官方提示:

Warning Never ever fix permission problems by using 'sudo'. It will create more permission problems in the process and require a system reinstallation to fix them.
意思是你会遇到权限问题,不要用sudo解决,那样会带来更多问题,但是我没听他的,我没用,最后也是实现了

官方提供指令


sudo usermod -a -G dialout $USER

然后注销,重新登录生效

(2)安装

更新包列表,安装下面编译PX4的依赖包。PX4主要支持的系列:

    NuttX based hardware: Pixhawk, Pixfalcon
    Snapdragon Flight hardware: Snapdragon
    Raspberry Pi hardware: Raspberry Pi 2
    Host simulation: jMAVSim SITL and Gazebo SITL

注意:安装Ninja Build System可以比make更快进行编译。如果安装了它就会自动选择使用它进行编译。
sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
sudo apt-get update
sudo apt-get install python-argparse git-core wget zip \
    python-empy qtcreator cmake build-essential genromfs -y
# simulation tools
sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-7-jdk openjdk-7-jre clang-3.5 lldb-3.5 -y
卸载模式管理器

sudo apt-get remove modemmanager

更新包列表和安装下面的依赖包。务必安装指定的版本的包

sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded -y
sudo apt-get update
sudo apt-get install python-serial openocd \
    flex bison libncurses5-dev autoconf texinfo build-essential \
    libftdi-dev libtool zlib1g-dev \
    python-empy <span style="color:#FF0000;">gcc-arm-none-eabi</span> -y


上面代码中红色部分大家需要一高警惕,gcc-arm-none-eabi版本导致PX4/Firmware编译错误,现在apt-get安装的gcc-arm-none-eabi基本上是4.9的版本,但是这个固件需要gcc-arm-none-eabi 4.8de 版本,所以最后安装好以后,查看你的gcc-arm-none-eabi版本,如果是4.9需要手动安装4.8的版本,安装gcc-arm-none-eabi 4.8的版本的方法如下:
sudo apt-get remove gcc-arm-none-eabi
<span id="transmark"></span>wget https://launchpadlibrarian.net/186124160/gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2
tar xjvf gcc-arm-none-eabi-4_8-2014q3-20140805-linux.tar.bz2
sudo mv gcc-arm-none-eabi-4_8-2014q3 /opt
#手动修改文件
sudo vim /etc/profile
#在最后添加路径
export PATH=/opt/gcc-arm-none-eabi-4_8-2014q3/bin:$PATH
#保存退出,为使添加的路径生效,执行指令
source /etc/profile

 
 
Warning】上面红色的路径一定要添加正确,不然问题很多,我第一次就输入错误,结果结果开不了机了,反复输入密码。博主装的是Ubuntu 64位系统,而上述arm-none-eabi是直接下载的编译好的32位,还需要安装一个东西
sudo apt-get install lsb-core
可以检查arm-none-eabi 4.8.4是否安装成功,输入以下指令:
~$ arm-none-eabi-g++ -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-g++
COLLECT_LTO_WRAPPER=/opt/gcc-arm-none-eabi-4_8-2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/lto-wrapper
Target: arm-none-eabi
Configured with: /home/build/work/GCC-4-8-build/src/gcc/configure --target=arm-none-eabi --prefix=/home/build/work/GCC-4-8-build/install-native --libexecdir=/home/build/work/GCC-4-8-build/install-native/lib --infodir=/home/build/work/GCC-4-8-build/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/home/build/work/GCC-4-8-build/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/home/build/work/GCC-4-8-build/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/home/build/work/GCC-4-8-build/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/home/build/work/GCC-4-8-build/install-native/arm-none-eabi --build=i686-linux-gnu --host=i686-linux-gnu --with-gmp=/home/build/work/GCC-4-8-build/build-native/host-libs/usr --with-mpfr=/home/build/work/GCC-4-8-build/build-native/host-libs/usr --with-mpc=/home/build/work/GCC-4-8-build/build-native/host-libs/usr --with-isl=/home/build/work/GCC-4-8-build/build-native/host-libs/usr --with-cloog=/home/build/work/GCC-4-8-build/build-native/host-libs/usr --with-libelf=/home/build/work/GCC-4-8-build/build-native/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' --with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r
Thread model: single
gcc version 4.8.4 20140725 (release) [ARM/embedded-4_8-branch revision 213147] (GNU Tools for ARM Embedded Processors) 
如果出现如上信息,交叉编译环境搭建就搭建成功了
(3)代码编译
根据PX4中文维基官网教程。
安装Git

sudo apt-get install git-all
下载代码
mkdir -p ~/src
cd ~/src
git clone https://github.com/PX4/Firmware.git
初始化 
先进入Firmware文件夹,进而进行初始化、更新子模块操作,耐心的等待……

cd Firmware
git init
git submodule update --init --recursive
权限
编译时会遇到权限问题,执行指令
sudo chmod 777 -R *
-R 是对文件下面包含的子文件权限问题,* 是对所有文件的权限问题
编译

make px4fmu-v2_default
注意到“make”是一个字符命令编译工具,“px4fmu-v2”是硬件版本,“default”是默认配置,所有的PX4编译目标遵循这个规则。
最后附一张编译成功的代码,如果这样你还有问题,请给我留言。

-- nuttx-px4fmu-v2-default
-- The ASM compiler identification is GNU
-- Found assembler: /opt/gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-gcc
-- Found PythonInterp: /usr/bin/python (found version "2.7.10") 
-- Using C++03
-- Release build type: RelWithDebInfo
-- Adding UAVCAN STM32 platform driver
-- Configuring done
-- Generating done
-- Build files have been written to: /home/lihongwei/Documents/Firmware/build_px4fmu-v2_default
#+@Tools/check_submodules.sh
PX4 CONFIG: px4fmu-v2_default
Scanning dependencies of target git_mavlink
Scanning dependencies of target git_uavcan
Scanning dependencies of target git_gencpp
Scanning dependencies of target git_genmsg
[  0%] Generating git_init_mavlink_include_mavlink_v1.0.stamp
[  0%] Generating git_init_src_modules_uavcan_libuavcan.stamp
[  0%] Generating git_init_Tools_genmsg.stamp
[  0%] Generating git_init_Tools_gencpp.stamp
[  0%] Built target git_uavcan
[  0%] Built target git_mavlink
[  0%] Built target git_genmsg
[  0%] Built target git_gencpp
Scanning dependencies of target git_nuttx
Scanning dependencies of target git_matrix
Scanning dependencies of target mixer_gen
Scanning dependencies of target libuavcan_dsdlc
[  0%] Generating git_init_NuttX.stamp
[  1%] Generating git_init_src_lib_matrix.stamp
[  1%] Generating mixer_multirotor.generated.h
[  1%] Running dsdl compiler
[  1%] Built target git_matrix
[  1%] Built target git_nuttx
Scanning dependencies of target git_ecl
Scanning dependencies of target xml_gen
[  1%] Built target mixer_gen
[  1%] Generating git_init_src_lib_ecl.stamp
[  1%] Generating parameters.xml
[  1%] Built target git_ecl
Scanning dependencies of target msg_gen
Scanning dependencies of target nuttx_export_px4fmu-v2
[  2%] Generating uORB topic multi headers for nuttx
[  2%] Building NuttX for px4fmu-v2
[  2%] Generating uORB topic headers
[  2%] Built target libuavcan_dsdlc
Scanning dependencies of target nuttx_export_px4io-v2
[  2%] Building NuttX for px4io-v2
make[4]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
make[4]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
make[4]: warning: -jN forced in submake: disabling jobserver mode.
make[4]: warning: -jN forced in submake: disabling jobserver mode.
[  3%] Generating airframes.xml
[  3%] Built target xml_gen
[  3%] Built target msg_gen
[  4%] Generating nuttx_export_px4io-v2.stamp
[  4%] Built target nuttx_export_px4io-v2
Scanning dependencies of target io_prebuild_targets
[  4%] Built target io_prebuild_targets
Scanning dependencies of target px4io-v2
[  4%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/controls.c.obj
[  5%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/adc.c.obj
[  5%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/px4io.c.obj
[  5%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/registers.c.obj
[  6%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/safety.c.obj
[  6%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/systemlib/up_cxxinitialize.c.obj
[  6%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/systemlib/perf_counter.c.obj
[  6%] Building CXX object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/mixer.cpp.obj
[  6%] Building CXX object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/systemlib/mixer/mixer.cpp.obj
[  7%] Building CXX object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/systemlib/mixer/mixer_group.cpp.obj
[  7%] Building CXX object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/systemlib/mixer/mixer_multirotor.cpp.obj
[  7%] Building CXX object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/systemlib/mixer/mixer_simple.cpp.obj
[  7%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/systemlib/pwm_limit/pwm_limit.c.obj
[  8%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/__/lib/rc/st24.c.obj
[  8%] Building C object src/modules/px4iofirmware/CMakeFiles/px4io-v2.dir/__/__/lib/rc/sumd.c.obj
[  8%] Building C object src/modules/px4iofirmware/CMakeFiles/px
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值