【玩玩】 Pixhawk原生固件Linux环境下编译
本帖最后由 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怎么安装系统,网上一大堆步骤,我可能过几天发一个安装的帖子。安装好之后,界面如下:恩,最基本的做好了。确保主机可以上网,虚拟机才可以上网。二. 根据官网搭建基础环境官网:http://dev.px4.io/starting-installing-linux.html
打开ubuntu系统的调试终端(Ctrl+Alt+T),输入以下命令,逐条输入
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
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操作系统: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 gcc-arm-none-eabi -y
三. 安装gcc这一步尤为重要,很多编译过不了这一关,当然还是安装官网推荐的版本4.8.4或者4.9.2,本人安装的前者,操作如下:pushd .
cd ~
//卸载当前版的gcc-arm-none-eabi
sudo apt-get remove gcc-arm-none-eabi
//下载需要的版本
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
//解压
tar -jxf gcc-arm-none-eabi-4_9-2014q4-20141203-linux.tar.bz2
//将解压后的gcc,移动到自己想要的文件夹下
sudo mv gcc-arm-none-eabi-4_9-2014q4 /opt
//添加路径
exportline="export PATH=/opt/gcc-arm-none-eabi-4_9-2014q4/bin:\$PATH"
//使路径生效
if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
. ~/.profile
popd注意:我使用的ubuntu是64位的,还要增加如下补丁 (32位的跳过),执行如下命令:sudo apt-get install lsb-core最后,检查gcc是否安装成功,命令:arm-none-eabi-g++ -v若出现如下界面,代表安装交叉编译环境成功,否则,继续执行如上步骤。四. 安装cmake此时可以查看自己目前系统的cmake版本是多少,命令:cmake --version
当然,我已经安装cmake 3.4.3,所以显示是这样,3版本的都可以,若是其他的版本的,则按照以下步骤安装:
第一种方法(一步步执行):第二种方法: 官网(https://cmake.org/download/)下载cmake,下图两个选择,自己根据方便选择,如果下载了第一个,则根据第一种方法去做,如果下载了第二个,则如下步骤:1.解压niu88@ubuntu:/opt/tar -zxvfcmake-3.4.3-Linux-x86_64.tar.gz2.然后 安装niu88@ubuntu:/opt/./bootstrap
niu88@ubuntu:/opt/make
niu88@ubuntu:/opt/make install3.安装完毕后查看是否安装成功:niu88@ubuntu:/opt/cmake --version cmake version 3.4.3 此时,cmake安装成功。五. 安装git可以使用apt-get方式安装,也可以下载源代码安装,我们这里使用apt-git安装。但由于直接使用 sudo apt-get install git 安装的版本较老,或者会出现安装错误,因此我们使用如下方法:sudoadd-apt-repository ppa:git-core/ppa
sudoapt-get update
sudoapt-get install git 安装完成后,检查是否安装成功git--version六. 下载原生固件
关于这个官网已经给的很清楚了,http://dev.px4.io/starting-building.htmlgit clone https://github.com/PX4/Firmware.git
cd Firmware
git submodule update --init --recursive 七. 编译原生固件更新完之后,在Firmware文件夹下:make px4fmu-v2_default此时还可能会出现如下问题:即could not find genromfs执行:sudoapt-get install genromfs还有如下问题:执行:sudoapt-get install python-empy 其他问题,暂时没发现,那么最后的编译结果为:终于看到了曙光,当然,步骤中还有其他没有涉及以及错的问题,以后再和众网友慢慢发现和弥补完善了。
本文转自:https://blog.csdn.net/niu_88/article/details/51752580 感谢分享!!
好东西 ,路过帮顶
感谢分享!! 目前是处于应用层次,还没上升到代码研究。
清枫城主 发表于 2018-4-15 13:26 static/image/common/back.gif
目前是处于应用层次,还没上升到代码研究。
我看过mwc的代码,可以说受益匪浅。pix只是用这个方法编译一下,熟悉一下Ubuntu而已http://www.moz8.com//mobcent//app/data/phiz/default/03.png
TwoOne 发表于 2018-4-15 14:51 static/image/common/back.gif
我看过mwc的代码,可以说受益匪浅。pix只是用这个方法编译一下,熟悉一下Ubuntu而已
...
嗯,pix代码要是能研究透,那离自己开发一款相似飞控就不远了。
ubuntu上搭载px4编译环境出现了问题,
`flash' overflowed by 28733 bytes
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
make: *** 错误 1
请求您的帮助。
yangjun 发表于 2018-4-16 10:10 static/image/common/back.gif
ubuntu上搭载px4编译环境出现了问题,
`flash' overflowed by 28733 bytes
collect2: error: ld returned...
具体在哪一步出错的?上一个报错截图呢
TwoOne 发表于 2018-4-16 10:50
具体在哪一步出错的?上一个报错截图呢
在执行make px4fmu-v2_default时出错的
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
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: *** 错误 1
是因为路径失效还是
TwoOne 发表于 2018-4-16 10:50
具体在哪一步出错的?上一个报错截图呢
楼主还在吗
yangjun 发表于 2018-4-17 08:45 static/image/common/back.gif
楼主还在吗
我这周重新试试,可能是地址出问题了。重装了系统虚拟机不在了。。。
谢谢楼主,我自己也找了找问题 目前怀疑是GCC版本过低我准备更新5.4再试试
我来看看学习一下 yangjun 发表于 2018-4-17 20:57
谢谢楼主,我自己也找了找问题 目前怀疑是GCC版本过低我准备更新5.4再试试
怎么样,问题解决了嘛?
页:
[1]