2. Linux基础环境准备:Ubuntu虚拟机安装、SSH配置、基础工具链安装

做OTA升级包开发,第一件事就是把Linux环境搭好。我见过不少新手在Windows上硬搞,结果编译脚本跑不通、路径分隔符搞混、权限问题一堆——说白了,Linux才是嵌入式开发的天然土壤。这一章我们就从零开始,把Ubuntu虚拟机装好,配通SSH,再把基础工具链一把梭到位。

本章核心目标:在一台Windows/Mac宿主机上,通过VirtualBox搭建Ubuntu 22.04 LTS虚拟机,配置SSH远程访问,安装编译OTA升级包所需的全部基础工具。

2.1 为什么选Ubuntu 22.04 LTS?

你可能要问:Ubuntu版本那么多,为什么偏选22.04?我个人习惯是:做嵌入式开发,LTS版本永远是首选。22.04的支持周期到2027年,这意味着你的开发环境在几年内不会因为系统EOL而被迫迁移。

特性 Ubuntu 22.04 LTS 其他版本(如20.04/24.04)
GCC版本 11.2(兼容ARM交叉编译链) 20.04自带GCC 9,对C++17支持不完整
Python版本 3.10(OTA脚本常用) 20.04是3.8,部分新库已放弃支持
支持周期 2027年4月 24.04刚出,生态兼容性待验证
软件包数量 最丰富,apt源稳定 20.04部分包已进入oldstable

我在项目中踩过一个坑:用20.04编译某款ARM交叉工具链,结果GCC 9对C++17的std::filesystem支持有bug,折腾了两天才发现是编译器版本问题。换到22.04后一次通过。所以,别在环境版本上省事。

2.2 安装VirtualBox与创建Ubuntu虚拟机

VirtualBox是Oracle家的免费虚拟化软件,稳定、轻量、跨平台。我们用它来跑Ubuntu。

2.2.1 下载与安装VirtualBox

  1. 访问 VirtualBox官网,下载对应你宿主机的版本(Windows/macOS/Linux)。
  2. 安装时一路默认即可。Windows用户注意:安装过程中会提示安装网络驱动,一定要同意,否则后面NAT网络用不了。
  3. 下载Ubuntu 22.04 LTS桌面版ISO镜像(建议从清华镜像站或中科大镜像站下载,速度快)。

我的习惯:ISO镜像下载后先校验SHA256,别问我为什么——有一次我下载的镜像损坏,装到一半报错,重下才解决。命令:sha256sum ubuntu-22.04.3-desktop-amd64.iso

2.2.2 创建虚拟机

打开VirtualBox,点击「新建」,按以下参数配置:

配置项 推荐值 说明
名称 OTA-Dev-Env 见名知意
类型 Linux —
版本 Ubuntu (64-bit) 必须选64位
内存大小 4096 MB(至少2048) OTA编译吃内存,别省
硬盘 40 GB(动态分配) 实际占用按需增长
CPU核心 2核(至少1核) 编译时多核加速明显

创建完成后,在「设置 → 存储」中挂载Ubuntu ISO镜像,然后启动虚拟机,按界面提示安装系统。安装时建议勾选「为图形或无线硬件安装第三方软件」,省得后面装驱动麻烦。

注意:安装过程中创建的用户名和密码请牢记。我建议用户名用全小写英文,不要用中文或特殊字符,否则后面SSH和脚本路径处理容易出幺蛾子。

2.3 配置SSH远程访问

虚拟机装好后,你当然可以直接在VirtualBox的窗口里操作。但说实话,那个体验很差——复制粘贴不方便、窗口缩放卡顿、还不能多终端并行。所以,我强烈建议配通SSH,用你习惯的终端工具(如Windows Terminal、iTerm2)远程连进去操作。

2.3.1 在Ubuntu虚拟机中安装并启动SSH服务

# 更新包索引
sudo apt update

# 安装OpenSSH服务器
sudo apt install -y openssh-server

# 检查SSH服务状态
sudo systemctl status ssh

# 如果没启动,手动启动
sudo systemctl enable ssh
sudo systemctl start ssh

安装完成后,用ip a查看虚拟机的IP地址。如果你用的是NAT网络模式,默认IP通常是10.0.2.15。但注意:这个IP在宿主机上直接访问不了,需要配置端口转发。

2.3.2 配置VirtualBox端口转发

在VirtualBox主界面,选中你的虚拟机 → 「设置 → 网络 → 高级 → 端口转发」。添加一条规则:

名称 协议 主机IP 主机端口 子系统IP 子系统端口
SSH TCP 127.0.0.1 2222 10.0.2.15 22

这样配置后,你在宿主机上执行ssh -p 2222 用户名@127.0.0.1就能连进虚拟机了。

避坑指南:我曾经把主机端口设成了22,结果和宿主机本地的SSH服务冲突,连了半天连不上。端口转发的主机端口建议用1024以上的高位端口,比如2222、22222都行。

2.3.3 配置SSH免密登录(可选但推荐)

每次输密码挺烦的,尤其是后面要频繁scp传文件。配置免密登录只需三步:

# 在宿主机上生成SSH密钥(如果已有则跳过)
ssh-keygen -t rsa -b 4096

# 将公钥复制到虚拟机
ssh-copy-id -p 2222 用户名@127.0.0.1

# 测试免密登录
ssh -p 2222 用户名@127.0.0.1

第一次连的时候会提示确认主机指纹,输入yes即可。之后就能直接登录,不用再输密码了。

2.4 安装基础工具链

环境搭好了,SSH也通了,接下来就是装工具。这些工具是后面编译OTA升级包的基石,缺一个都可能让脚本跑不起来。

2.4.1 一键安装核心工具包

sudo apt update
sudo apt install -y \
    build-essential \
    cmake \
    git \
    curl \
    wget \
    vim \
    tree \
    htop \
    net-tools \
    unzip \
    p7zip-full \
    python3 \
    python3-pip \
    python3-venv \
    openssl \
    libssl-dev \
    libcurl4-openssl-dev \
    libjson-c-dev \
    libyaml-dev

我来解释一下这些工具是干什么的:

工具 用途 为什么需要
build-essential GCC/G++编译器套件 编译C/C++代码,OTA包中的签名工具、压缩库都需要
cmake 跨平台构建系统 很多嵌入式项目用CMake管理构建
git 版本控制 管理OTA升级包的源码和脚本
python3-pip Python包管理器 安装OTA脚本依赖的Python库
libssl-dev OpenSSL开发库 OTA包签名、加密、校验的核心依赖
libjson-c-dev JSON解析库 解析OTA升级包的元数据描述文件

2.4.2 验证安装是否成功

装完后,快速验证一下关键工具是否可用:

gcc --version
cmake --version
git --version
python3 --version
openssl version

如果每个命令都能正常输出版本号,说明环境已经就绪。

注意:如果gcc --version报错,大概率是build-essential没装全。可以单独执行sudo apt install --reinstall build-essential重装一次。我遇到过因为网络波动导致包下载不完整的情况,重装就能解决。

2.5 本章知识体系总览

下面这张SVG图把本章的核心流程串起来了,你可以对照着检查自己有没有遗漏步骤。

Linux基础环境搭建流程 Linux基础环境搭建流程 ① 宿主机准备 • 下载VirtualBox • 下载Ubuntu 22.04 ISO • 校验镜像SHA256 ② 虚拟机创建 • 配置CPU/内存/硬盘 • 挂载ISO镜像 • 安装Ubuntu系统 ③ SSH配置 • 安装openssh-server • 配置端口转发 • 免密登录配置 ④ 基础工具链安装 • build-essential / cmake / git • python3-pip / openssl • libssl-dev / libjson-c-dev • 验证各工具版本 ✅ 开发环境就绪,可进行OTA包制作 💡 关键提醒 端口转发用高位端口

2.6 常见问题与排查

环境搭建过程中,你可能会遇到一些问题。我把常见的列出来,省得你到处搜。

问题 可能原因 解决方法
SSH连接被拒绝 SSH服务未启动 / 端口转发未配置 sudo systemctl status ssh检查服务状态;检查VirtualBox端口转发规则
apt update报错 网络问题 / 镜像源不可用 更换国内镜像源(清华/阿里/中科大)
gcc命令找不到 build-essential未安装成功 sudo apt install --reinstall build-essential
虚拟机启动黑屏 VT-x/AMD-V未开启 进入BIOS开启虚拟化技术
scp传输文件慢 NAT模式带宽限制 改用桥接网络模式,或使用rsync替代scp

我的经验:如果你在公司内网环境下搭建,apt源建议换成内网镜像,速度能快10倍。换源方法:编辑/etc/apt/sources.list,把archive.ubuntu.com替换成你的内网镜像地址。

好了,到这里你的Linux基础环境就全部就绪了。虚拟机跑着、SSH连着、工具链装齐了——接下来就可以正式开始OTA升级包的制作了。记住,环境是地基,地基稳了,后面才不慌。