行业资讯
📅 2026/9/9 7:23:19
Ubuntu 20.04无人机开发环境搭建与Linux工程基础实战指南
上个月团队里来了个新同事负责飞控软件的移植。发给他的是预装好Ubuntu 20.04的笔记本结果他开机第一句话是问这系统能装个桌面助手吗 我说可以但接下来你会花两周时间适应它然后庆幸无人机这行没有选择Windows当主流开发平台。后来他确实踩了不少坑但也很快摸清了门道。这个Module 3的内容就是把我这些年带新人、自己搭环境时沉淀下来的Ubuntu 20.04 Linux工程基础围绕无人机软件开发环境重新捋了一遍。如果你正要入门无人机软件或者刚从Windows切到Linux这篇文章可以帮你少走很多弯路。1. 为什么无人机软件工程师要把Ubuntu 20.04当母语1.1 无人机软件栈的Linux基因很多人以为Linux只是服务器用的系统跟飞机不搭边。但真正走进无人机软件开发环境你会发现整个软件生态几乎是围着Linux转的。先说飞控。PX4和ArduPilot这两个最常见的开源飞控官方文档里的编译环境基本都是Linux优先PX4的构建脚本make px4_sitl_default在Ubuntu 20.04上直接跑虽然Windows Cygwin也能编译但USB透传、串口权限、实时日志这些环节Windows下会平白多出一堆兼容性问题。再说机载电脑。无人机除了飞控往往还要挂一块负责视觉、导航、目标检测的计算单元最常见的是Nvidia Jetson系列Xavier NX、Orin Nano或者树莓派。这些设备的官方系统镜像Ubuntu是绝对的主流。就算你用的是预装好的SDK镜像底层也还是Ubuntu 20.04或者22.04。这意味着你学的每一条Linux命令都能直接用在目标设备上。还有地面站和中间件。QGroundControl在Ubuntu下原生支持ROS/ROS2更不用说目前最主流的ROS2 Foxy Fitzroy官方支持的就是Ubuntu 20.04。如果你要做集群控制、室内定位、无人机编队ROS生态里的功能包绝大多数是在Ubuntu上开发和验证的。所以在这个行当里Ubuntu 20.04不是一个可选项而是整个无人机软件栈的最大公约数。1.2 从Windows思维转换到Linux思维从Windows切过来最难受的往往不是记命令而是思维模型的转变。在Windows里你习惯C盘、D盘这种盘符Linux里没有盘符整个文件系统从一个根目录/出发你的U盘、硬盘、机载电脑的SD卡全都挂载在某个目录下比如/media/username/disk。这个概念叫挂载理解了它你就理解了为什么ls /media下面偶尔会冒出来一串看不懂的目录名。第二个要转变的是命令行优先的习惯。Windows下你可以全程鼠标操作但在Linux服务器、嵌入式设备、Docker容器里很多时候没有图形界面你只能靠终端。你不需要背几百条命令但需要形成遇到问题先想命令的条件反射。第三个是权限。Windows的Administrator基本是默认状态Linux的root是一个需要反复强调安全的概念。日常操作用普通用户需要提权时用sudo而不是全程root跑。这一点在无人机开发里尤其重要因为后面你配置串口、安装工具链、操作设备节点时如果权限概念混乱很容易把系统搞坏。我常用的一个比喻是Ubuntu 20.04对无人机软件工程师来说就像木工的工作台。你不需要把工作台装修得多漂亮但你必须知道每一把工具放在哪、什么时候用哪把、怎么保养它。这篇文章讲的Linux工程基础本质就是给你这张工作台配齐工具并教会你使用规则。2. 环境选型双系统、虚拟机还是专用主机2.1 三种方案的真实对比很多人一开始纠结一个问题Ubuntu 20.04到底应该装在虚拟机里还是直接装成双系统我的建议是取决于你拿它做什么。方案适用场景优点缺点推荐度双系统要编译大型工程、要长时间跑仿真性能完全释放硬件访问最稳定切换系统要重启文件共享麻烦主力推荐虚拟机VMware/VirtualBox日常写代码、学命令、跑ROS仿真快照功能太香随时回滚可以和Windows共存USB串口透传偶尔抽风性能有损失新手入门首选独立Linux主机/服务器团队协作、远程编译多人共用环境统一需要额外的硬件和网络维护团队推荐我自己现在的组合是一台Windows笔记本做日常办公里面用VMware跑着Ubuntu 20.04做代码阅读和轻量编译另外一台装了纯Ubuntu 20.04的主机专门用来编译PetaLinux、连接飞控硬件和跑长时间仿真。原因是虚拟机在USB设备透传和磁盘IO上偶尔会给你使绊子。比如你插上飞控Windows弹窗提示设备无法识别或者VMware右下角USB图标变成灰色这种问题查起来特别耗时。而无人机开发恰恰需要频繁插拔USB转串口模块、数传、GPS模组所以我宁可在物理机上做硬件相关的工作。如果你刚开始学我建议先装虚拟机。因为虚拟机可以随便折腾装坏了、改坏了一个快照就还原。等你把常用命令练熟了再考虑在主力机上装双系统或者买一块独立SSD专门跑Ubuntu。2.2 虚拟机配置的参考值如果你选虚拟机路线资源配置可以参考下面这套CPU4核以上。编译PX4固件时make会并行编译核数越多越快。内存8GB起步16GB更稳。ROS仿真和打开多个终端时8GB有点紧张。虚拟磁盘建议60GB以上并且使用单个文件模式VMware里叫将虚拟磁盘存储为单个文件性能比拆分模式好一些。网络NAT模式足够日常用如果要在虚拟机里连接局域网里的机载电脑改成桥接模式更方便。系统装完后第一时间安装VMware Tools或者open-vm-tools命令行执行sudo apt install open-vm-tools-desktop否则虚拟机的剪贴板共享、窗口自适应分辨率、拖拽文件功能都不可用。这个小步骤很多人忽略结果用起来奇卡无比。2.3 独立的Ubuntu主机怎么选如果走物理机路线我强烈建议Ubuntu 20.04不要装在老的机械硬盘上至少要放在SATA SSD上有条件直接上NVMe。编译PetaLinux这种大型工程时CPU在算磁盘在写IO瓶颈会被放得很大。另外物理机装Ubuntu第一件事就是在BIOS里关掉Secure Boot。不然后面装Nvidia显卡驱动、加载内核模块时很容易因为签名验证失败而黑屏或者加载失败。这两个问题硬盘性能和Secure Boot是我见过物理机装Ubuntu翻车最多的两个原因。3. 装机后的第一轮系统初始化分区、换源、基础包3.1 给无人机工程留足空间的分区方案Ubuntu安装过程中的分区页面很多人直接选清除整个磁盘并安装Ubuntu图省事。但如果你的电脑打算长期用来开发我建议手动分区。我的习惯是分成三块/根分区80GB到120GB。系统、软件、依赖库都装在这里。/home剩下的空间全给/home。你的源代码、下载的固件、PetaLinux工程、数据集默认都会堆在这里。swap如果你的内存超过16GB可以设8GB如果内存只有8GBswap设成16GB避免内存不够时编译进程被内核直接杀掉。为什么单独强调给/home留大空间因为后面装PetaLinux的时候光一个工程动辄占20~50GB加上build缓存你很快会体会到什么叫磁盘空间不足。DFT磁盘满了的时候各种莫名其妙的编译错误都会出现我先帮你提前排雷。3.2 换软件源Ubuntu 20.04自带的是官方源在国内网络环境下更新速度可能比较感人。装完系统第一件事就是换源。这里说的换源是使用国内开源镜像站的软件源属于正常的系统配置。具体做法是编辑/etc/apt/sources.list把里面的archive.ubuntu.com和security.ubuntu.com替换成镜像站地址。以清华源为例执行sudo sed -i s//.*archive.ubuntu.com//mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo sed -i s//security.ubuntu.com//mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo apt update sudo apt upgrade -y换源后建议把update和upgrade日志看一遍如果出现公钥错误多半是密钥过期按镜像站文档重新拉取公钥即可。这一步做完后面安装软件包的体验会顺畅非常多。3.3 无人机开发的基础软件包换完源安装下面这一批基础包基本能覆盖80%的日常开发需求sudo apt install -y build-essential git cmake python3 python3-pip \ curl wget vim net-tools openssh-server htop tree bash-completion \ gcc g gdb make unzip zip p7zip-full net-tools说明一下每个包的作用build-essential包含了gcc、g、make等编译工具链C/C开发的地基。git版本控制后面拉取PX4、ArduPilot源码必备。cmake跨平台构建工具很多无人机相关项目包括ROS功能包都用CMake组织构建。python3-pipPython包管理地面站工具、算法脚本都靠它。openssh-server让这台机器可以被SSH远程登录方便你用笔记本连接办公室的编译服务器或者机载电脑。htop比top更好看的进程监控工具编译时看CPU占用很直观。这些包看着多其实一次性装完也就几分钟但能避免你后面每装一个工具就卡在依赖缺失上。4. 终端基本功无人机开发真正高频的Linux命令清单4.1 文件和目录操作是每天的肌肉记忆虽然网上有Linux常用命令大全但我觉得不需要背那么多。你只需要把下面这一组练成肌肉记忆然后在使用中按需扩展。# 查看目录和文件 ls -lh # 以易读方式列出文件及大小 ls -a # 显示隐藏文件.git、.bashrc 等 cd ~/uav_ws/src # 切换目录 pwd # 显示当前路径 # 复制、移动、删除 cp -r config config_backup # 递归复制目录 mv old_name new_name # 重命名/移动 rm -r build # 删除目录谨慎 rm -f log.txt # 强制删除文件 # 软链接相当于Windows的快捷方式 ln -s /dev/ttyUSB0 ~/serial_link这里想特别说一下rm -rf。它确实是开发中经常用到的因为清理编译缓存时你要删除整个build目录格式通常是rm -rf build。但也是我见过新手翻车最多的命令一个手滑变成rm -rf /或者rm -rf ~系统就废了。我的建议是永远不要在root用户下用rm -rf。重要的目录删之前先ls确认路径。可以考虑给rm加一个保护别名比如让rm默认进入回收站模式可用trash-cli工具实现防呆。4.2 权限管理决定你能不能操作设备无人机开发里你最常碰到的权限问题是插上USB转串口模块然后用ls /dev/ttyUSB0能看见设备但用串口工具连接时报Permission denied。这就是权限问题。Linux里串口设备属于dialout用户组。你需要把当前用户加入这个组sudo usermod -aG dialout $USER sudo usermod -aG plugdev $USER执行完这两条命令后一定要注销重新登录组权限才会生效。另外sudo和su的区别也值得理解。sudo是用自己的密码临时提权执行完回到普通身份适合日常单个命令su是切换到root用户之后所有命令都以root身份执行容易误操作。在开发机上我几乎只用sudo很少直接切root。4.3 系统资源与进程管理编译不卡死的秘诀无人机软件工程免不了编译大型项目看着终端刷屏是日常。编译过程中最常用的监控命令是htop可以直观看到CPU核数和占用率。如果发现编译时内存不足可以用free -h查看。如果CPU有8核16线程可以显式指定并行编译参数来加快速度make -j$(nproc) # 用全部核心编译 make -j4 # 用4个核心编译内存不够时更稳nproc命令会输出CPU核心数直接嵌在命令行里非常方便。进程管理方面你可能需要杀掉一个卡死的编译进程或者后台进程ps aux | grep make # 找到make进程的PID kill -9 PID # 强制结束 pkill make # 按名称批量结束4.4 网络与远程连接和机载电脑打交道的基本功无人机行业经常需要SSH登录到机载电脑比如Jetson或者用网线直连飞控调试。网络命令绕不开这几条ip addr # 查看IP地址新系统用这个ifconfig已逐渐弃用 ping 192.168.1.100 ssh user192.168.1.100 scp file user192.168.1.100:/home/user/ # 跨机器拷贝文件如果你在配置网络的时候碰到DNS问题比如ping域名报Temporary failure in name resolution多半是DNS解析没配好。Ubuntu 20.04默认用systemd-resolved管理DNS查询状态用systemd-resolve --status修改DNS可以通过编辑/etc/systemd/resolved.conf或者直接改网络管理器的连接配置# 修改 /etc/systemd/resolved.conf [Resolve] DNS223.5.5.5 119.29.29.29改完执行sudo systemctl restart systemd-resolved生效。这里给的是通用排障步骤具体以你的网络环境为准。4.5 压缩与解压的乱码处理从Windows传给Ubuntu的压缩包经常会出现文件名乱码这是编码不一致导致的。如果你碰到linux 解压文件乱码的问题用unzip时可以指定编码unzip -O CP936 file.zip # 用GBK编码解压Windows压缩包或者在安装p7zip-full后用7z处理兼容性更好。这个小技巧在拿到同事从Windows发来的固件包或参考资料时非常实用。5. 交叉编译与PetaLinux工具链嵌入式飞控的核心环节5.1 什么是交叉编译先讲个概念。你在PC上写代码代码要跑在飞控的ARM处理器上。你的PC通常是x86架构飞控可能是Cortex-A9Zynq-7000系列或者Cortex-M4STM32F4。x86的编译器和ARM的机器码不通用所以你需要一个在x86上运行、但能生成ARM机器码的编译器这个编译过程就叫交叉编译。我用一个类比你写了一本中文书要拿到英语国家出版需要找一个懂中文和英语的译者把书翻译成英文。交叉编译里的译者就是交叉编译工具链它读你的C/C源码输出目标处理器能直接执行的二进制。5.2 Ubuntu 20.04下安装常用交叉编译工具链无人机相关的主流工具链有三类工具链适用目标典型场景arm-none-eabi-ARM裸机/M4核STM32飞控、PX4固件底层arm-linux-gnueabihf-ARM32 Linux树莓派、Zynq-7000的Linux应用aarch64-linux-gnu-ARM64 LinuxJetson、RK3588等高端机载电脑Ubuntu 20.04安装这些非常方便sudo apt update sudo apt install -y gcc-arm-none-eabi gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu装完验证一下版本arm-none-eabi-gcc --version arm-linux-gnueabihf-gcc --version aarch64-linux-gnu-gcc --version验证能正常输出版本信息说明工具链工作正常。写一个最简单的hello_world.c用arm-linux-gnueabihf-gcc编译再用file命令查看输出文件你会看到类似ELF 32-bit LSB executable, ARM的字样说明交叉编译成功。5.3 PetaLinux 2021.2在Ubuntu 20.04上的安装要点如果你接触的是Zynq-7000平台很多无人机飞控主控、图传模块、视觉处理板都用这颗芯片那躲不开PetaLinux。PetaLinux是赛灵思Xilinx/AMD提供的一整套嵌入式Linux开发工具用来配置内核、设备树、文件系统并生成启动镜像。它本身依赖大量的库和工具在Ubuntu 20.04上安装有几个常见的坑。第一个坑是依赖包缺失。PetaLinux 2021.2要求在Ubuntu 20.04上安装一堆依赖我整理过一份能跑通的清单sudo apt install -y tofrodos iproute2 gawk xvfb gcc git make \ net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev \ flex bison libselinux1 gnupg wget diffstat chrpath socat \ xterm autoconf libtool tar unzip texinfo zlib1g-dev \ gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev \ screen pax gzip cpio python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping python3-git python3-jinja2 \ libegl1-mesa libsdl1.2-dev pylint3第二个坑是默认的/bin/sh指向dash而不是bashPetaLinux的某些脚本在dash下会报错。解决办法是重新配置dashsudo dpkg-reconfigure dash在弹出的界面里选择No让系统继续使用bash或者保持dash也可取决于你用的PetaLinux版本。实测中PetaLinux 2021.2要求sh指向bash否则在配置阶段会报sh is not bash错误。第三个坑是libtinfo5缺失。Ubuntu 20.04默认只带libtinfo6但PetaLinux的某些工具链需要libtinfo5。可以从Ubuntu 18.04的软件源里下载libtinfo5包来安装或者用apt直接搜索如果软件源里没有则手动下载deb包。装好后再次执行安装脚本一般就能顺利跑通。PetaLinux本身的安装流程不复杂把下载好的.run安装包解压出来然后执行sudo mkdir -p /opt/pkg/petalinux sudo chown $USER:$USER /opt/pkg/petalinux ./petalinux-v2021.2-final-installer.run /opt/pkg/petalinux安装完成后每次使用前需要source环境变量。建议在~/.bashrc里加一行source /opt/pkg/petalinux/settings.sh这样每次打开终端就自动加载PetaLinux环境不用每次手动source。5.4 Zynq-7000工程的交叉编译工作流用PetaLinux创建一个Zynq-7000工程基础的流程是# 创建工程 petalinux-create -t project --template zynq --name uav_fw # 进入工程目录 cd uav_fw # 硬件配置导入XSA硬件描述文件 petalinux-config --get-hw-description../hw/ # 编译 petalinux-build编译完成后生成的镜像在images/linux目录下。如果你需要单独的ARM交叉编译环境PetaLinux也支持生成SDKpetalinux-build --sdk生成的SDK里包含完整的交叉编译工具链和系统rootfs你可以用它来编译独立的应用程序然后部署到Zynq板子上。整个过程在纯命令行下完成所以前面花时间练的Linux命令基本功在这里会成倍回报你。6. 串口权限与设备管理连接飞控之前必须解决的问题6.1 设备节点的识别与权限USB转串口模块CH340、CP2102、FT232、飞控自带USB接口、数传模块这些设备插到Ubuntu上后内核会把它映射为一个设备节点常见的是/dev/ttyUSB0、/dev/ttyACM0或者/dev/ttyS0。插上设备后先用dmesg看重最新的内核日志dmesg | tail -20如果看到ch341-uart或者cp210x之类的字样说明驱动加载成功了设备节点已经生成。再用ls -l /dev/ttyUSB*确认权限。如果显示crw-rw----、所属组是dialout说明只要你的用户加入dialout组就能访问。组加好之后如果还是提示无权限或者设备节点不存在多半是驱动没加载可以手动加载sudo modprobe ch341 sudo modprobe cp210x这两个是USB转串口最常用的驱动。6.2 串口调试工具怎么选连接飞控的串口我用过几个工具最推荐的是picocom和screen因为默认就能用、配置少。# 安装 sudo apt install -y picocom minicom screen # 连接飞控串口波特率按设备文档填写 picocom -b 115200 /dev/ttyUSB0或者用screenscreen /dev/ttyACM0 115200退出方式要注意picocom按CtrlA然后CtrlX退出screen按CtrlA然后按K再按Y确认退出。很多人进去了不知道怎么退直接关终端会导致串口没有正常释放下次连接报Device or resource busy。6.3 用udev规则固定设备名一个很烦的问题是今天插了飞控设备是/dev/ttyUSB0明天插了个数传飞控又变成了/dev/ttyUSB1你的脚本和工具链全部要改。解决办法是用udev规则根据USB设备的ID或序列号给它固定一个别名。在/etc/udev/rules.d/下创建一个99-usb-serial.rules文件SUBSYSTEMtty, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, SYMLINKttyFCU其中idVendor和idProduct可以通过lsusb命令查到。比如CH340通常是1a86:7523。写好后执行sudo udevadm control --reload-rules sudo udevadm trigger之后你插上飞控就会多出一个/dev/ttyFCU节点无论它是物理插在哪个USB口设备名都稳定。这个习惯在做无人机地面站对接时特别重要因为QGroundControl或者你自己的程序里配置的是固定设备路径。7. 工程目录与版本管理团队的协作底线7.1 一套清晰的无人机工程目录结构环境搭好、命令练熟之后真正进入项目开发我强烈建议你先建立一套规范的目录结构不要什么都丢在~/Download或者/home/xxx/桌面下。我个人的参考结构是这样的~/uav_dev/ ├── src/ # 所有源代码 │ ├── firmware/ # 飞控固件PX4/ArduPilot │ ├── ros_ws/ # ROS工作空间 │ └── vcu/ # 视觉计算单元代码 ├── tools/ # 脚本和工具 ├── build/ # 编译输出不用进git ├── images/ # 固件镜像、系统镜像 ├── docs/ # 文档和参考资料 └── backup/ # 各种备份PetaLinux的工程我习惯单独放一个目录比如~/petalinux_workspace因为一个PetaLinux工程体积非常大如果塞在src里会让仓库和目录都很臃肿。7.2 Git不是可选项是日常命令版本管理这一块我遇到过的最大问题不是不会用Git而是不愿意用Git。刚开始单机开发时自己也图省事代码改完直接覆盖。直到有一次连续调试三天把一份能稳定运行的姿态解算代码改崩了git救了我一次之后我再也没有裸开发过。无人机软件项目最少最少要掌握这组Git命令git init # 初始化仓库 git clone repo_url # 拉取远程仓库 git status # 查看工作区状态 git add . # 添加所有改动 git commit -m feat: add attitude control # 提交 git push origin main # 推送到远程 git pull origin main # 拉取更新 git log --oneline # 查看提交历史 git branch feature/x # 创建分支 git checkout feature/x # 切换分支 git merge feature/x # 合并分支一个容易被忽略的文件是.gitignore。PX4这类大型工程都有自己的.gitignore规则你的项目里至少要把build/、*.o、*.bin、*.img这类编译产物排除掉否则仓库会越来越大clone一次等到怀疑人生。7.3 CMake快速上手最后聊一下构建工具。Linux下的C/C项目Makefile能写但不利于跨平台和大型项目管理CMake是目前最主流的选择。下面是一个最小示例cmake_minimum_required(VERSION 3.16) project(uav_utils) set(CMAKE_CXX_STANDARD 17) add_executable(imu_reader src/imu_reader.cpp) target_link_libraries(imu_reader pthread)构建时执行mkdir build cd build cmake .. make -j$(nproc)很多开源飞控、机载视觉库、ROS功能包都用CMake组织你不需要成为CMake专家但至少要能读懂CMakeLists.txt会改源文件列表和链接库这件事会在你移植代码时反复用到。8. 踩坑记录与验收自测清单8.1 我在这套环境里踩过的真实坑这部分是我最想分享的因为很多问题不是看文档能提前知道的必须花时间踩一遍才有体感。第一个坑是虚拟机识别不到USB设备。有次我准备在VMware的Ubuntu 20.04里连接飞控插上USB后Windows能识别虚拟机里怎么lsusb都看不到。折腾一圈发现是Windows的VMware USB Arbitration Service服务没启动。在Windows服务管理器里找到这个服务设为自动并启动虚拟机菜单里可移动设备才会出现新的USB设备。如果是VMware Workstation有时还需要重新安装一次VMware Tools。第二个坑是编译PetaLinux时磁盘空间不足。当时我只给虚拟机分配了40GB磁盘结果编译到中途直接报错日志里全是No space left on device。后来删了build缓存又给虚拟磁盘扩容才勉强跑完。现在我的规则很简单涉及到PetaLinux的机器磁盘至少100GB起步/home单独分区。第三个坑是串口工具占用导致的Device or resource busy。这个问题经常发生在串口工具异常退出之后你以为程序关了但串口资源没释放。解决办法是检查占用并杀掉对应进程sudo fuser -k /dev/ttyUSB0这个命令会强制释放串口非常实用。第四个坑是dash和bash的问题。除了PetaLinux有些编译脚本会用到source命令而source是bash内建命令如果在dash下执行会报错。所以遇到source not found这类问题先检查当前shell环境用echo $SHELL看一下必要时用bash script.sh显式运行。第五个坑是误删文件。我承认我删过build目录结果发现路径写错了把src删了半个好在有git最后全找回来了。从那以后我装机就装trash-cli把rm替换成trash-put重要文件误删后还能从回收站里捞。8.2 新环境能不能用来自测一遍环境搭建完毕我建议按下面的清单做一次开发环境自测通过之后基本可以放心开始项目开发测试项操作预期结果软件源sudo apt update正常更新无报错基础编译写一个hello.c用gcc编译运行输出hello交叉编译用aarch64-linux-gnu-gcc编译hello.cfile查看显示ARM aarch64 ELF串口权限插上USB转串口ls -l /dev/ttyUSB0用户属于dialout组PetaLinux环境终端内执行petalinux-util --help正常输出帮助信息SSHssh localhost能连接到本机SSH服务磁盘空间df -h /home剩余空间不小于40GB这些测试不需要一次全做完但至少保证能编译、能交叉编译、能连接串口、能远程登录这四项因为这是后续所有无人机开发任务的公共前提。我带过不少新同事观察下来觉得Linux的学习曲线其实不是陡而是散。你不需要背命令大全只需要每天在终端里完成真实任务两周后就会自然形成肌肉记忆。Ubuntu 20.04这套环境一旦你熬过最初的适应期后面搞PetaLinux、交叉编译、机载电脑部署都会顺畅得多。最后再分享一个小习惯我把所有环境配置过程都写成了Markdown笔记存在~/docs里包括踩过的坑和对应的解决方案每次重装系统只要照着笔记执行一遍就行。这个习惯帮我节省了无数次重复排障的时间你也可以试试。