ubuntu 系统
权限设置
把用户添加到用户组 “dialout”
1 | $ sudo usermod -a -G dialout $USER |
然后注销后,重新登录,因为重新登录后所做的改变才会有效。
安装-基于NuttX的硬件
Ubuntu配备了一系列代理管理,这会严重干扰任何机器人相关的串口(或usb串口),卸载掉它也不会有什么影响:
1 | sudo apt-get remove modemmanager |
更新包列表和安装下面的依赖包。务必安装指定的版本的包.
1 | sudo apt-get install python-serial openocd \ |
在添加arm-none-eabi工具链之前,请确保删除残余,如果需要变更工具链也需要删除先前版本。
1 | sudo apt-get remove gcc-arm-none-eabi gdb-arm-none-eabi binutils-arm-none-eabi gcc-arm-embedded |
如果gcc-arm-none-eabi版本导致PX4/Firmware编译错误,
安装arm-none-eabi工具链
要求gcc版本>=4.9 cmake 版本大于3.2,Ubuntu系统gcc为4.8,cmake 为3.2,所以需要重新安装新的版本
gcc-arm-none-eabi GCC 5.4版本
1 | cd ~ |
gcc-arm-none-eabi GCC 4.9 版本
1 | cd ~ |
也可通过源库安装,不过安装的是4.9版本
1 | sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa |
安装32位支持库(如果已经是运行在32位,那么可能会失败,并且此步骤可以跳过):
1 | sudo dpkg --add-architecture i386 |
arm-none-dabi-gcc测试
1 | arm-none-eabi-gcc --version #查看输出对否有如下输出 |
或
1 | $arm #再按下tab键是否有如下输出 |
cmake 安装:
1 | cd cmake-3.9.0 |
编译px4
1 | cd ~ |
编译的二进制程序就会通过USB上传到飞控硬件:
1 | make px4fmu-v2_default upload |
错误分析
- error:ld returned 1 exit status
不能直接对源代码进行编译,直接编译可能会出现内存溢出的错误error:ld returned 1 exit status,原因是arm-none-eabi 4.7.4版本不对,需要重新安装arm-none-eabi直接编译失败的结果显示如下:
1 | collect2.exe:error:ld returned 1 exit status |
提示cmake 错误
如果出现了类似错误,是由于cmake版本过低造成的,使用apt-get安装的cmake版本为3.2.2,而在3.3版本以下就会报这个错误,如果出现无法进入文件夹的错误也是这个问题:
1
2
3CMake Error at platforms/nuttx/NuttX/CMakeLists.txt:113 (add_dependencies):
add_dependencies Cannot add target-level dependencies to INTERFACE library
target "nuttx_build".内存溢出
解决方案:移除不是必要的模块. 配置在这里. 为了移除一个模块, 可以直接注释掉它:
对于FMUv2(Pixhawk1)或者FMUv3(Pixhawk 2)硬件,找到Firmware/cmake/configs/nuttx_px4fmu-v2_default.cmake
修改为注释掉不要的driver 如#drivers/trone
或者使用v3
版本make px4fmu-v3_default
1 | ..regin 'falsh ' overflowby 34234 bytes |