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 下操作步骤:
- 插入 U 盘(至少 8GB)
- 打开 Rufus,选择 U 盘和 ISO 文件
- 分区类型选 GPT,目标系统选 UEFI
- 点击开始,等待完成
注意: 制作启动盘会格式化 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 知识体系总览
下面这张图把本章的核心内容串起来了。你一看就明白各个工具之间的关系:
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,最后验证了环境。看起来简单,但每一步都有讲究。你想想看,如果编译器版本不对,后面编译固件时出现莫名其妙的错误,排查起来多头疼?