4. Linux 发行版选择与安装:Ubuntu LTS 版本选择、分区方案、软件源配置

做嵌入式驱动开发,第一件事就是选对 Linux 发行版。说实话,我见过不少新手在发行版上纠结很久——Ubuntu、Debian、Fedora、Arch 挨个试,最后发现时间全花在折腾系统上了。我的建议很直接:用 Ubuntu LTS,别犹豫。

4.1 为什么是 Ubuntu LTS?

LTS 是 Long Term Support 的缩写,也就是长期支持版。Ubuntu 每两年发布一个 LTS 版本,官方提供 5 年安全更新和维护。这对嵌入式开发来说太重要了——你想想看,一个驱动项目可能持续两三年,如果系统中途停止维护,那工具链、编译器、内核头文件都可能出兼容性问题。

我个人习惯用 Ubuntu 22.04 LTS(Jammy Jellyfish)。为什么是这个版本?

  • 内核版本 5.15:对主流 ARM 和 RISC-V 开发板支持已经很成熟
  • GCC 11.3:交叉编译工具链兼容性好,不会出现奇怪的链接错误
  • 社区资源丰富:遇到问题,Stack Overflow 上基本都有答案
  • 长期支持到 2027 年:一个项目周期内不用操心系统升级
避坑提醒:我曾经在 Ubuntu 20.04 上踩过一个坑——它的 GCC 9 对某些新出的 RISC-V 指令集支持不完整,导致编译出来的固件在开发板上跑不起来。后来升级到 22.04 才解决。所以,别用太老的 LTS 版本,至少选 20.04 以上。

4.2 分区方案:给驱动开发留足空间

很多人装 Linux 时直接「使用整个磁盘」一路下一步,结果用着用着就发现 /home 不够用了,或者 /boot 分区太小导致内核更新失败。做驱动开发,分区方案得提前规划好。

我推荐的分区方案是这样的(以 256GB SSD 为例):

分区 大小 文件系统 挂载点 说明
EFI 系统分区 512 MB FAT32 /boot/efi UEFI 启动必需
/boot 1 GB ext4 /boot 存放内核和 initrd,别太小
根分区 50 GB ext4 / 系统和软件安装
/home 剩余全部 ext4 /home 代码、工具链、SDK 都放这里
交换分区 8 GB swap — 内存不够时用,建议等于内存大小
我的经验:/home 分区一定要给够。驱动开发过程中,你会下载大量的 SDK、交叉编译工具链、内核源码,这些动辄几十 GB。我见过有人 /home 只有 20GB,结果装了个 Android AOSP 就爆了,还得重新分区,非常麻烦。

如果你用的是双系统(Windows + Ubuntu),记得先给 Windows 留足空间,然后在空闲区域创建这些分区。安装时选择「其他选项」,手动指定挂载点。

4.3 软件源配置:别让下载速度拖后腿

系统装好之后,第一件事就是换软件源。Ubuntu 默认的源服务器在国外,下载速度慢得让人抓狂。我记得第一次装 Ubuntu 时,apt update 跑了半小时还没完,后来才发现是源的问题。

换源的方法很简单:

  1. 备份原文件:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
  2. 编辑 sources.list:sudo vim /etc/apt/sources.list
  3. 把里面的 archive.ubuntu.com 替换成国内镜像源地址

常用的国内镜像源有:

镜像站 地址 特点
阿里云 mirrors.aliyun.com 速度快,更新及时
清华大学 mirrors.tuna.tsinghua.edu.cn 稳定,教育网友好
中科大 mirrors.ustc.edu.cn 老牌镜像站,可靠性高
华为云 mirrors.huaweicloud.com 企业级稳定性

以阿里云为例,22.04 的 sources.list 内容大致如下:

deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

换源后别忘了执行:

sudo apt update
sudo apt upgrade -y

这样才能让新源生效,并把系统更新到最新状态。

4.4 安装后的必备软件包

系统就绪后,我会立刻安装一组基础开发工具。这些是驱动开发的「标配」:

sudo apt install -y build-essential git vim curl wget \
  net-tools openssh-server tree htop \
  gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf \
  gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
  libncurses-dev flex bison libssl-dev \
  device-tree-compiler u-boot-tools

简单解释一下这些包的作用:

  • build-essential:编译必备,包含 GCC、make 等
  • git:版本管理,内核源码和驱动代码都靠它
  • arm-linux-gnueabihf:32 位 ARM 交叉编译器
  • aarch64-linux-gnu:64 位 ARM 交叉编译器
  • libncurses-dev:内核配置时 make menuconfig 需要
  • device-tree-compiler:编译设备树文件(.dts → .dtb)
  • u-boot-tools:制作 U-Boot 镜像的工具
注意:交叉编译器的版本要和目标开发板匹配。比如你的开发板是 ARM Cortex-A7,用 arm-linux-gnueabihf 没问题;如果是 Cortex-A53 64 位的,就得用 aarch64-linux-gnu。选错了,编译出来的程序在板子上跑不了。

4.5 本章知识体系

下面这张图帮你理清本章的核心逻辑:

Linux 发行版选择与安装 — 知识体系 发行版选择:Ubuntu 22.04 LTS 版本选择 分区方案 软件源配置 版本选择要点 • 内核 5.15,GCC 11.3 • 5 年长期支持到 2027 • 社区资源丰富,问题易解 分区方案建议 • /boot: 1GB,/home: 剩余 • 根分区: 50GB 以上 • 交换分区: 等于内存大小 软件源配置 • 阿里云/清华/中科大镜像 • 替换 archive.ubuntu.com • 执行 apt update & upgrade 最终目标:稳定的驱动开发环境 安装必备软件包:交叉编译器、Git、内核工具

说白了,这一章就三件事:选对版本、分好区、配好源。这三步做好了,后面搭建交叉编译环境、编译内核、编写驱动模块才能顺风顺水。别小看这些基础工作——我见过太多人因为分区不够或者源太慢,浪费了大把时间在环境问题上。

最后一个小建议:装好系统后,做个快照或者备份。万一后面折腾内核配置把系统搞崩了,直接恢复比重新安装快得多。我用的是 Timeshift,轻量又好用。