2. 开发环境准备:Ubuntu 22.04 LTS 安装与基础工具链

做固件度量,环境是第一道坎。我见过太多人花了一周时间搭环境,结果发现编译器版本不对、依赖库冲突,最后连个 Hello World 都跑不起来。说白了,环境搞不定,后面全是白搭。

这一章,咱们就把地基打牢。我会带你从零开始,装好 Ubuntu 22.04 LTS,再把 gcc、make、cmake、git 这几个吃饭的家伙配齐。嗯,都是些基础活,但细节里全是坑。

2.1 为什么选 Ubuntu 22.04 LTS?

你可能要问:那么多 Linux 发行版,为什么偏偏选这个?

我个人习惯用 LTS 版本做开发。原因很简单——稳定。Ubuntu 22.04 的支持周期到 2027 年,这意味着你在这几年里不用频繁升级系统。对于固件度量这种需要长期维护的项目来说,这点太重要了。

另外,22.04 的软件源里默认带的 gcc 是 11.x 版本,对 C11/C17 标准支持很好。cmake 是 3.22.x,git 是 2.34.x。这些版本搭配起来,基本覆盖了市面上 90% 的嵌入式项目需求。

核心结论: Ubuntu 22.04 LTS = 长期支持 + 工具链版本适中 + 社区活跃。做固件开发,选它没错。

2.2 安装 Ubuntu 22.04 LTS

安装过程不复杂,但有几个关键点要注意。我按步骤来,你跟着走就行。

2.2.1 下载镜像

去 Ubuntu 官网下载 22.04 LTS 的桌面版 ISO。别下错了,要选 22.04.3 LTS 这个版本。文件名大概是 ubuntu-22.04.3-desktop-amd64.iso。

小提示: 下载完记得校验 SHA256。我遇到过镜像损坏导致安装到一半卡死的情况,校验一下能省很多麻烦。

2.2.2 制作启动盘

用 Rufus(Windows)或者 dd 命令(Linux/macOS)把 ISO 写入 U 盘。我个人推荐用 Rufus,操作简单,不容易出错。

Windows 下操作步骤:

  1. 插入 U 盘(至少 8GB)
  2. 打开 Rufus,选择 U 盘和 ISO 文件
  3. 分区类型选 GPT,目标系统选 UEFI
  4. 点击开始,等待完成

注意: 制作启动盘会格式化 U 盘,记得先备份数据。我曾经手滑选错了盘,把工作资料全清了……从那以后我每次都会再三确认盘符。

2.2.3 安装过程

从 U 盘启动后,你会看到安装界面。这里有几个关键选项:

选项 推荐设置 说明
语言 English 终端报错信息用英文更容易搜索
键盘布局 English (US) 编程常用布局,避免特殊符号错位
安装类型 最小安装 只装基础系统,后续按需添加
磁盘分区 手动分区 建议分 /boot 1GB、/ 50GB、/home 剩余空间

安装过程中会让你创建用户。用户名建议用全小写英文,不要带空格。我习惯用 fwdev 这种名字,简洁好记。

2.3 基础工具链安装

系统装好了,接下来就是装工具。这部分我建议你直接复制粘贴命令,别手打——容易打错。

2.3.1 更新系统

先更新软件源和已安装的包:

sudo apt update
sudo apt upgrade -y

这一步会花几分钟。更新完重启一下系统,确保内核是最新的。

2.3.2 安装 gcc 和 g++

gcc 是 C 编译器,g++ 是 C++ 编译器。固件开发主要用 C,但有些工具链依赖 C++,所以两个都装上:

sudo apt install build-essential -y

build-essential 是一个元包,它会自动安装 gcc、g++、make 以及一些必要的库文件。装完验证一下:

gcc --version
g++ --version

你应该能看到类似这样的输出:

gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.

经验之谈: 如果你做的是 ARM 嵌入式开发,还需要装交叉编译器。比如 gcc-arm-none-eabi。这个后面章节会细讲,这里先提一嘴。

2.3.3 安装 make

make 是构建自动化工具。刚才装 build-essential 时已经带了,但单独确认一下:

make --version

输出应该是:

GNU Make 4.3
Built for x86_64-pc-linux-gnu

make 本身很简单,就是读 Makefile 然后执行命令。但 Makefile 的写法有很多坑,后面我会专门讲。

2.3.4 安装 cmake

cmake 是更现代化的构建系统。它不直接编译代码,而是生成 Makefile 或 Ninja 文件。对于大型项目,cmake 比手写 Makefile 方便得多。

sudo apt install cmake -y

验证版本:

cmake --version

输出:

cmake version 3.22.1

3.22 版本够用了。如果你需要更新的版本,可以去 cmake 官网下载预编译包,但我建议先用系统自带的——稳定。

2.3.5 安装 git

git 是版本控制工具,固件开发离不开它。安装:

sudo apt install git -y

验证:

git --version

输出:

git version 2.34.1

装完 git 后,建议先配置一下用户信息:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

这个配置会写入 ~/.gitconfig 文件。每次提交代码时,git 会用这里的信息记录作者。我建议用真实姓名和邮箱,方便团队协作。

2.4 验证环境

工具都装好了,我们来写个简单的程序验证一下。创建一个测试目录:

mkdir ~/fw_test
cd ~/fw_test

写一个 C 文件:

// hello.c
#include <stdio.h>

int main() {
    printf("Firmware Measurement Environment OK!\n");
    return 0;
}

用 gcc 编译:

gcc hello.c -o hello
./hello

如果输出 Firmware Measurement Environment OK!,说明环境没问题。

再用 cmake 试一下。创建一个 CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(FwTest)

add_executable(hello hello.c)

然后:

mkdir build
cd build
cmake ..
make
./hello

同样应该看到输出。这一步验证了 cmake 和 make 的配合是否正常。

2.5 知识体系总览

下面这张图把本章的核心内容串起来了。你一看就明白各个工具之间的关系:

固件度量开发环境知识体系 Ubuntu 22.04 LTS 基础工具链 gcc/g++ make cmake git 版本控制 说明: gcc 负责编译代码,make 和 cmake 负责构建流程,git 负责版本管理。 四者配合,构成了固件度量的基础开发环境。

2.6 常见问题与避坑

环境搭建过程中,有几个问题我经常遇到。列出来给你参考:

问题 原因 解决方法
gcc: command not found build-essential 没装或没装全 重新执行 sudo apt install build-essential
cmake: command not found cmake 未安装 执行 sudo apt install cmake
git: command not found git 未安装 执行 sudo apt install git
cmake 版本太低 系统源里版本较旧 添加 Kitware 官方源或手动编译安装
编译时提示缺少头文件 缺少 linux-headers 或 libc6-dev 执行 sudo apt install linux-headers-$(uname -r)

重要提醒: 不要用 root 用户做日常开发。我曾经图省事一直用 root,结果一个 rm -rf 打错了路径,把系统文件删了一半……从那以后我老老实实开普通用户,需要权限时用 sudo。

2.7 小结

这一章我们做了三件事:装了 Ubuntu 22.04 LTS,装了 gcc、make、cmake、git,最后验证了环境。看起来简单,但每一步都有讲究。你想想看,如果编译器版本不对,后面编译固件时出现莫名其妙的错误,排查起来多头疼?