文章参考:
PX环境搭建编译px4_fmu-v2_default相关问题的解决方法
pip3 使用问题小记
PX4安装与编译
ubuntu18.04配置px4编译环境
Ubuntu20.04或18.04下PX4(pixhawk)源码编译环境配置教程,及构建代码各种错误解决办法
知乎-PX4固件下载及环境搭建小记(Ubuntu 18.04)
PX4安装到Ubuntu出现内存溢出的解决办法
开始之前先确保系统安装了git,不确定的话可以直接安装
sudo apt install git
参考知乎教程的第二步,因为没有,所以先克隆PX4文件,换源,再克隆子项目
先执行
it config --global http.postBuffer 2000000000
这样克隆速度快些
1) 去掉recursive ,recursive会持续克隆一大堆子项目
git clone https://github.com/PX4/PX4-Autopilot.git
这样克隆的版本是最新的版本,如果想克隆某一版,例如我需要克隆1.8.2版本的代码,则执行
git clone --branch v1.8.2 https://github.com/PX4/PX4-Autopilot.git
2) 子模块的下载,我找到两种办法,有一块板子是换.gitmodules文件的源成功的,还有一块板子是在终端添加克隆前缀成功的。下面分别介绍
进入PX4-Autopilot文件夹,Ctrl+h 找到并打开.gitmodules文件
将文件中所有的https://github.com 改为 https://镜像源
其中,镜像源用到了镜像源参考博客,我采用的是hub.fastgit.xyz
注意:如果执行了3)中的–init指令,发现源不可用,再执行这一步换源,会没有用,可能是初始化定了,再只修改.gitmodules文件没用了,所以一定要确保源可用,可以打开源的网址看看是不是正常运行着的。如果真的用到了错误的源,只能重新克隆一遍源码了。
换源后,终端执行下面的指令
cd PX4-Autopilot
git submodule update --init --recursive
如果上述出现了部分下载失败,继续执行下面的命令,直到全部成功
git submodule update --recursive
git config --global url."https://gitclone.com/".insteadOf https://
git clone https://github.com/tendermint/tendermint.git
这样相当于执行完第一句,以后下载什么都可以直接执行克隆源码地址,他自动给加前缀。
取消的办法是:打开home界面,执行ctrl+h,打开隐藏文件.gitconfig,把instead那两句删除
==!!反正下载源码感觉是个玄学,最后一次配的时候,子模块老不成功,我直接全取消按源码地址克隆居然成功了……………………
可以考虑先跳过nuttx 等(官网提示)
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools
这里我老报错python2.7的问题,还有pyulog用python2.7下载老报格式错,所以我找了个最简单的python2.7切换为python3的办法(没有python3的先下载)
sudo apt-get install openssh-server
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
原理上,输入
sudo update-alternatives --config python
可以查看现在python2和python3的优先级
例如我的输出结果是:
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3 150 auto mode
1 /usr/bin/python2 100 manual mode
2 /usr/bin/python3 150 manual mode
Press <enter> to keep the current choice[*], or type selection number:
*是我选中的最优先的那个,现在选的是0,即python3,如果紧接着键入1,则切换为python2为默认了。如果不想变直接回车退出。
python
输出:Python 3.6.9 (default, Dec 8 2021, 21:08:43)
网络限制,建议单独下载安装GCC交叉编译器,这一步也可以在2.1节之前进行
关于交叉编译参考了一次搞定 Arm Linux 交叉编译、最新Linux系统下搭建PX4/Pixhawk原生固件编译环境!!!以及在Linux Ubnutu下安装arm-none-eabi-gcc及所必须的各种依赖包,大概了解了安装流程:
(1)下载的版本
下载网站为GNU Toolchain,我用的平台为64位的Xavier板子,配的是ubuntu系统,因此进入链接,仔细确认版本后选择的arm64位,工具链版本为:
(2)下载后参考博客在Linux Ubnutu下安装arm-none-eabi-gcc及所必须的各种依赖包进行安装即可。
完成后重启
不同版本的编译指令可能不同,例如我采用的是px4 v2版本,那我先在终端写make p,然后长按Tab键,会弹出一堆名称,如图所示
查找并选择适合我的v2版本(由飞控确定),执行:
make px4fmu-v2_default
执行后遇到了内存溢出的报错,即
[637/639] Linking CXX executable nuttx_px4fmu-v2_default.elf
FAILED: nuttx_px4fmu-v2_default.elf
...(此处省略n行代码)...
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: nuttx_px4fmu-v2_default.elf section `.data' will not fit in region `flash'
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: region `flash' overflowed by 652 bytes
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Makefile:154: recipe for target 'px4fmu-v2_default' failed
make: *** [px4fmu-v2_default] Error 1
解决办法:
打开编译后的文件 ./build/nuttx_px4fmu-v2_default/NuttX/nuttx/configs/px4fmu-v2/scripts/ld.script
将flash (rx) : ORIGIN = 0x08004000, LENGTH = 1008K
修改成flash (rx) : ORIGIN = 0x08004000, LENGTH = 1508K
保存后,在终端再次编译即可
若有硬件则需要上传到硬件,通过usb下载固件
make px4fmu-v2_default upload
在过程中踩的雷主要是:
1.下载了新版本,手动切换回旧版本,在编译过程中出现与nuttx相关的missing and no known rule to make it
的报错,原因是在那个目录下找不到相关文件,查找半天无果,所以直接重新下载了1.8.2版本的代码,就解决了。
2.下载源码遇到很多问题,比如克隆的时候,有的教程直接将子模块打包下载,即
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
除非科学上网,否则肯定下不下来,还尝试过换源下载,自己也找了很多源,也不好使,按照我现在写的办法能够比较快的解决这个下载问题
好不容易下载好了,l利用git checkout切换到自己想要的版本,编译也会报各种各样的错,不如直接克隆的时候就克隆好自己对应的版本。
3.bash过程中遇到了很多问题,没怎么记录,但主要问题感觉还是因为源码没整好,所以报了很多莫名其妙的错,在这之前一定先把代码解决好。还有一些错是包下不下来,或者用sudo apt-get install 或者用pip install总能解决。除了一个叫pyulog的,明明都在pip list的列表里了,每次执行bash还报错,我就没管它,继续后面的操作了。