模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

3701查看 | 16回复

【玩玩】 Pixhawk原生固件Linux环境下编译

[复制链接]
发表于 2018-4-14 16:37:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 TwoOne 于 2018-4-14 16:39 编辑

Pixhawk原生固件在Linux下编译的资料网上很多,官网(http://dev.px4.io/starting-installing-linux.html)也有其具体流程,本文只是针对自己从安装ubuntu14.04.1操作系统到编译成功Pixhawk原声代码写了一个简单的文档,当然由于自己不是特别熟悉Linux环境及其命令,其中不乏一些多余的步骤,也希望大家指正出来,互相学习。


一.    安装vmware和ubuntu14.04.1操作系统

我使用的是Vmware 10,当前还可以使用更高级版本的,看自己需求,http://www.xiazaiba.com/html/24456.html


    操作系统ubuntu的话,众网友推荐14版本的,其他版本的可能编译出问题,所以自己直接安装的ubuntu14.04.1,下载地址为http://drivers.mydrivers.com/drivers/484_193760.htm

    当然现在最新的系统是16.04版本了,我有不少项目都是在这个环境下开发的,稳定性也很不错!

    官网地址贴上:https://www.ubuntu.com/download

          具体利用vmware怎么安装系统,网上一大堆步骤,我可能过几天发一个安装的帖子。安装好之后,界面如下:

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 3602

恩,最基本的做好了。确保主机可以上网,虚拟机才可以上网。

二.    根据官网搭建基础环境

官网:http://dev.px4.io/starting-installing-linux.html


打开ubuntu系统的调试终端(Ctrl+Alt+T),输入以下命令,逐条输入


  1. sudo add-apt-repository ppa:george-edison55/cmake-3.x -y  
  2. sudo apt-get update  
  3. sudo apt-get install python-argparse git-core wget zip \  
  4.     python-empy qtcreator cmake build-essential genromfs -y  
  5. sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-7-jdk openjdk-7-jre clang-3.5 lldb-3.5 -y  
复制代码

安装好上述之后,再安装基于硬件的Nuttx操作系统:

  1. sudo apt-get remove modemmanager  
  2. sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded -y  
  3. sudo apt-get update  
  4. sudo apt-get install python-serial openocd \  
  5.     flex bison libncurses5-dev autoconf texinfo build-essential \  
  6.     libftdi-dev libtool zlib1g-dev \  
  7.     python-empy gcc-arm-none-eabi -y  
复制代码

三.    安装gcc

这一步尤为重要,很多编译过不了这一关,当然还是安装官网推荐的版本4.8.4或者4.9.2,本人安装的前者,操作如下:

  1. pushd .  
  2.   
  3. cd ~  
  4. //卸载当前版的gcc-arm-none-eabi  
  5. sudo apt-get remove gcc-arm-none-eabi  
  6. //下载需要的版本  
  7. wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2014-q4-major/+download/gcc-arm-none-eabi-4_9-2014q4-20141203-linux.tar.bz2  
  8. //解压  
  9. tar -jxf gcc-arm-none-eabi-4_9-2014q4-20141203-linux.tar.bz2  
  10. //将解压后的gcc,移动到自己想要的文件夹下  
  11. sudo mv gcc-arm-none-eabi-4_9-2014q4 /opt  
  12. //添加路径  
  13. exportline="export PATH=/opt/gcc-arm-none-eabi-4_9-2014q4/bin:\$PATH"  
  14. //使路径生效  
  15. if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi  
  16.   
  17. . ~/.profile  
  18.   
  19. popd  
复制代码

注意:我使用的ubuntu是64位的,还要增加如下补丁 (32位的跳过),执行如下命令:

  1. sudo apt-get install lsb-core  
复制代码

最后,检查gcc是否安装成功,命令:

  1. arm-none-eabi-g++ -v
复制代码

若出现如下界面,代表安装交叉编译环境成功,否则,继续执行如上步骤。

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 4907

四.    安装cmake

此时可以查看自己目前系统的cmake版本是多少,命令:

  1. cmake --version  
复制代码

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 4070

当然,我已经安装cmake 3.4.3,所以显示是这样,3版本的都可以,若是其他的版本的,则按照以下步骤安装:


第一种方法(一步步执行):

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 1520

第二种方法:

       官网(https://cmake.org/download/)下载cmake,下图两个选择,自己根据方便选择,如果下载了第一个,则根据第一种方法去做,如果下载了第二个,则如下步骤:

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 3901

1.解压

  1. niu88@ubuntu:/opt/tar -zxvf  cmake-3.4.3-Linux-x86_64.tar.gz  
复制代码

2.然后 安装

  1. niu88@ubuntu:/opt/./bootstrap     
  2. niu88@ubuntu:/opt/make   
  3. niu88@ubuntu:/opt/make install  
复制代码

3.安装完毕后查看是否安装成功:

  1. niu88@ubuntu:/opt/cmake --version   
复制代码

cmake version 3.4.3

       此时,cmake安装成功。  

五.    安装git

可以使用apt-get方式安装,也可以下载源代码安装,我们这里使用apt-git安装。但由于直接使用 sudo apt-get install git 安装的版本较老,或者会出现安装错误,因此我

们使用如下方法:

  1. sudoadd-apt-repository ppa:git-core/ppa  
  2. sudoapt-get update  
  3. sudoapt-get install git
复制代码

安装完成后,检查是否安装成功

  1. git--version  
复制代码

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 7963

六.    下载原生固件


关于这个官网已经给的很清楚了,http://dev.px4.io/starting-building.html

  1. git clone https://github.com/PX4/Firmware.git  
  2. cd Firmware  
  3. git submodule update --init --recursive
复制代码

七.    编译原生固件

更新完之后,在Firmware文件夹下:

  1. make px4fmu-v2_default  
复制代码

此时还可能会出现如下问题:即could not find genromfs

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 4756

执行:

  1. sudoapt-get install genromfs  
复制代码

还有如下问题:

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 8012

执行:

  1. sudoapt-get install python-empy
复制代码

其他问题,暂时没发现,那么最后的编译结果为:

【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 992

终于看到了曙光,当然,步骤中还有其他没有涉及以及错的问题,以后再和众网友慢慢发现和弥补完善了。


本文转自:https://blog.csdn.net/niu_88/article/details/51752580
发表于 2018-4-14 17:02:10 | 显示全部楼层
感谢分享!!
回复 支持 反对

使用道具 举报

发表于 2018-4-14 19:05:54 | 显示全部楼层
好东西 ,路过帮顶
回复 支持 反对

使用道具 举报

发表于 2018-4-14 22:32:03 | 显示全部楼层
感谢分享!!                           
回复 支持 反对

使用道具 举报

发表于 2018-4-15 13:26:50 | 显示全部楼层
目前是处于应用层次,还没上升到代码研究。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-15 14:51:08 | 显示全部楼层
清枫城主 发表于 2018-4-15 13:26 【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 7338
目前是处于应用层次,还没上升到代码研究。

我看过mwc的代码,可以说受益匪浅。pix只是用这个方法编译一下,熟悉一下Ubuntu而已【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 2495
回复 支持 反对

使用道具 举报

发表于 2018-4-15 15:12:44 | 显示全部楼层
TwoOne 发表于 2018-4-15 14:51 【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:清枫城主 3349
我看过mwc的代码,可以说受益匪浅。pix只是用这个方法编译一下,熟悉一下Ubuntu而已
...

嗯,pix代码要是能研究透,那离自己开发一款相似飞控就不远了。
回复 支持 反对

使用道具 举报

发表于 2018-4-16 10:10:02 | 显示全部楼层
ubuntu上搭载px4编译环境出现了问题,
`flash' overflowed by 28733 bytes
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
make: *** [px4fmu-v2_default] 错误 1
请求您的帮助。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-16 10:50:08 | 显示全部楼层
yangjun 发表于 2018-4-16 10:10 【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 3160
ubuntu上搭载px4编译环境出现了问题,
`flash' overflowed by 28733 bytes
collect2: error: ld returned  ...

具体在哪一步出错的?上一个报错截图呢
回复 支持 反对

使用道具 举报

发表于 2018-4-16 11:27:53 | 显示全部楼层
TwoOne 发表于 2018-4-16 10:50
具体在哪一步出错的?上一个报错截图呢

在执行make px4fmu-v2_default  时出错的
回复 支持 反对

使用道具 举报

发表于 2018-4-16 11:31:14 | 显示全部楼层
yangjun 发表于 2018-4-16 11:27
在执行make px4fmu-v2_default  时出错的

错误截图,bishe@ubuntu:~/src/Firmware$  git submodule update --init --recursive
bishe@ubuntu:~/src/Firmware$ make px4fmu-v2_default
[1/3] Linking CXX executable nuttx_px4fmu-v2_default.elf
FAILED: : && /usr/bin/arm-none-eabi-g++  -fno-common -ffunction-sections -fdata-sections -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fno-common -ffunction-sections -fdata-sections -g -fno-exceptions -fno-rtti -std=gnu++11 -fno-threadsafe-statics -DCONFIG_WCHAR_BUILTIN -D__CUSTOM_FILE_IO__ -fcheck-new -Wall -Warray-bounds -Wdisabled-optimization -Werror -Wextra -Wfatal-errors -Wfloat-equal -Wformat-security -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-field-initializers -Wpointer-arith -Wshadow -Wuninitialized -Wunknown-pragmas -Wunused-variable -Wno-implicit-fallthrough -Wno-unused-parameter -Wunused-but-set-variable -Wformat=1 -Wdouble-promotion -Wno-missing-field-initializers -Wno-overloaded-virtual -Wreorder -fvisibility=hidden -include visibility.h -fno-strict-aliasing -fomit-frame-pointer -funsafe-math-optimizations -ffunction-sections -fdata-sections -fno-strength-reduce -fno-builtin-printf -Os -DNDEBUG  -mcpu=cortex-m4 -mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nodefaultlibs -nostdlib -Wl,--warn-common,--gc-sections platforms/nuttx/CMakeFiles/nuttx_px4fmu-v2_default.elf.dir/__/__/src/platforms/empty.c.obj  -o nuttx_px4fmu-v2_default.elf -L/home/bishe/src/Firmware/build/px4fmu-v2_default/external/Install/lib -Wl,--script=/home/bishe/src/Firmware/build/px4fmu-v2_default/NuttX/nuttx/configs/px4fmu-v2/scripts/ld.script -Wl,-Map=nuttx_px4fmu-v2_default.map -Wl,--warn-common,--gc-sections -Wl,--start-group msg/libuorb_msgs.a src/platforms/common/libplatforms__common.a src/drivers/differential_pressure/ets/libdrivers__ets_airspeed.a src/drivers/differential_pressure/ms4525/libdrivers__ms4525_airspeed.a src/drivers/differential_pressure/ms5525/libdrivers__ms5525_airspeed.a src/drivers/differential_pressure/sdp3x/libdrivers__sdp3x_airspeed.a src/drivers/airspeed/libdrivers__airspeed.a src/drivers/barometer/ms5611/libdrivers__ms5611.a src/drivers/boards/common/libboards_common.a src/drivers/boards/common/stm32/libboard_stm32.a src/drivers/boards/px4fmu-v2/libdrivers_board.a src/drivers/camera_trigger/libdrivers__camera_trigger.a src/drivers/device/libdrivers__device.a src/drivers/gps/libdrivers__gps.a src/drivers/imu/l3gd20/libdrivers__l3gd20.a src/drivers/led/libdrivers__led.a src/drivers/imu/lsm303d/libdrivers__lsm303d.a src/drivers/magnetometer/hmc5883/libdrivers__hmc5883.a src/drivers/magnetometer/lis3mdl/libdrivers__lis3mdl.a src/drivers/imu/mpu6000/libdrivers__mpu6000.a src/drivers/imu/mpu9250/libdrivers__mpu9250.a src/drivers/pwm_input/libdrivers__pwm_input.a src/drivers/px4flow/libdrivers__px4flow.a src/drivers/px4fmu/libdrivers__px4fmu.a src/drivers/px4io/libdrivers__px4io.a src/drivers/rgbled/libdrivers__rgbled.a src/drivers/stm32/libdrivers__stm32.a src/drivers/stm32/adc/libdrivers__stm32__adc.a src/drivers/stm32/tone_alarm/libdrivers__stm32__tone_alarm.a src/drivers/vmount/libdrivers__vmount.a src/drivers/distance_sensor/ll40ls/libdrivers__ll40ls.a src/drivers/distance_sensor/mb12xx/libdrivers__mb12xx.a src/drivers/distance_sensor/sf0x/libdrivers__sf0x.a src/drivers/distance_sensor/sf1xx/libdrivers__sf1xx.a src/drivers/distance_sensor/srf02/libdrivers__srf02.a src/drivers/distance_sensor/srf02_i2c/libdrivers__srf02_i2c.a src/drivers/distance_sensor/teraranger/libdrivers__teraranger.a src/drivers/distance_sensor/tfmini/libdrivers__tfmini.a src/modules/sensors/libmodules__sensors.a src/systemcmds/hardfault_log/libsystemcmds__hardfault_log.a src/systemcmds/mixer/libsystemcmds__mixer.a src/systemcmds/mtd/libsystemcmds__mtd.a src/systemcmds/param/libsystemcmds__param.a src/systemcmds/perf/libsystemcmds__perf.a src/systemcmds/pwm/libsystemcmds__pwm.a src/systemcmds/reboot/libsystemcmds__reboot.a src/systemcmds/top/libsystemcmds__top.a src/systemcmds/tune_control/libsystemcmds__tune_control.a src/systemcmds/ver/libsystemcmds__ver.a src/modules/camera_feedback/libmodules__camera_feedback.a src/modules/commander/libmodules__commander.a src/modules/events/libmodules__events.a src/modules/land_detector/libmodules__land_detector.a src/modules/load_mon/libmodules__load_mon.a src/modules/mavlink/libmodules__mavlink.a src/modules/navigator/libmodules__navigator.a src/modules/ekf2/libmodules__ekf2.a src/modules/fw_att_control/libmodules__fw_att_control.a src/modules/fw_pos_control_l1/launchdetection/liblaunchdetection.a src/modules/fw_pos_control_l1/runway_takeoff/librunway_takeoff.a src/modules/fw_pos_control_l1/libmodules__fw_pos_control_l1.a src/modules/mc_att_control/libmodules__mc_att_control.a src/modules/mc_pos_control/libmodules__mc_pos_control.a src/modules/vtol_att_control/libmodules__vtol_att_control.a src/modules/logger/libmodules__logger.a src/modules/dataman/libmodules__dataman.a src/modules/systemlib/libmodules__systemlib.a src/modules/systemlib/param/libmodules__systemlib__param.a src/modules/uORB/libmodules__uORB.a src/lib/controllib/liblib__controllib.a src/lib/conversion/liblib__conversion.a src/lib/DriverFramework/framework/liblib__DriverFramework__framework.a src/lib/ecl/libecl.a src/lib/led/liblib__led.a src/lib/mathlib/liblib__mathlib.a src/lib/mixer/liblib__mixer.a src/lib/tunes/liblib__tunes.a src/lib/version/liblib__version.a src/lib/FlightTasks/liblib__flight_tasks.a platforms/nuttx/src/px4_layer/libplatform_px4_layer.a NuttX/apps/libapps.a NuttX/nuttx/arch/arm/src/libarch.a NuttX/nuttx/binfmt/libbinfmt.a NuttX/nuttx/binfmt/libbinfmt.a NuttX/nuttx/libc/libc.a NuttX/nuttx/configs/libconfigs.a NuttX/nuttx/libxx/libcxx.a NuttX/nuttx/drivers/libdrivers.a NuttX/nuttx/fs/libfs.a NuttX/nuttx/mm/libmm.a NuttX/nuttx/sched/libsched.a -Wl,--end-group -lm -lgcc ROMFS/libromfs.a src/lib/DriverFramework/framework/src/libdf_driver_framework.a && :
/usr/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: nuttx_px4fmu-v2_default.elf section `.text' will not fit in region `flash'
/usr/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: address 0x810627c of nuttx_px4fmu-v2_default.elf section `__param' is not within region `flash'
/usr/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: address 0x810627c of nuttx_px4fmu-v2_default.elf section `__param' is not within region `flash'
/usr/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: address 0x810627c of nuttx_px4fmu-v2_default.elf section `__param' is not within region `flash'
/usr/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: region `flash' overflowed by 28733 bytes
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
make: *** [px4fmu-v2_default] 错误 1




【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:yangjun 7230
回复 支持 反对

使用道具 举报

发表于 2018-4-16 11:42:51 | 显示全部楼层
是因为路径失效还是
回复 支持 反对

使用道具 举报

发表于 2018-4-17 08:45:48 | 显示全部楼层
TwoOne 发表于 2018-4-16 10:50
具体在哪一步出错的?上一个报错截图呢

楼主还在吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-17 10:50:21 | 显示全部楼层
yangjun 发表于 2018-4-17 08:45 【玩玩】 Pixhawk原生固件Linux环境下编译 固件,vmware 作者:TwoOne 6224
楼主还在吗

我这周重新试试,可能是地址出问题了。重装了系统虚拟机不在了。。。
回复 支持 反对

使用道具 举报

发表于 2018-4-17 20:57:11 | 显示全部楼层
谢谢楼主,我自己也找了找问题 目前怀疑是GCC版本过低我准备更新5.4再试试
回复 支持 反对

使用道具 举报

发表于 2018-4-27 20:34:40 | 显示全部楼层

我来看看学习一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 20:12:30 | 显示全部楼层
yangjun 发表于 2018-4-17 20:57
谢谢楼主,我自己也找了找问题 目前怀疑是GCC版本过低我准备更新5.4再试试

怎么样,问题解决了嘛?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!