2. 搭建Linux编译主机:Ubuntu/Debian系统安装、磁盘分区建议、交换空间配置

Android内核模块的独立编译环境需要一个稳定、纯净的Linux主机。Ubuntu LTS(长期支持版)和Debian稳定版是业界最广泛使用的选择。本章将指导你完成从系统安装到磁盘规划的全过程,确保编译环境的高效与可靠。

推荐版本:Ubuntu 22.04 LTS 或 Debian 12 (Bookworm)。这两个版本对交叉编译工具链的支持最完善,且社区资源丰富。

2.1 发行版选择与对比

Ubuntu和Debian同属Debian系,包管理工具均为apt,但在软件包新鲜度、驱动支持和系统稳定性上存在差异。下表从内核编译角度进行对比:

对比维度 Ubuntu 22.04 LTS Debian 12 (Bookworm)
内核版本 5.15 LTS(HWE可选更新至6.x) 6.1 LTS
交叉编译工具链 gcc-arm-linux-gnueabihf 等预编译包齐全 需额外启用 bookworm-backports 源
驱动兼容性 对笔记本/桌面硬件支持更友好 更注重稳定,驱动更新较慢
社区文档 教程丰富,问题排查快 官方Wiki严谨,但中文资料略少
适用场景 个人开发机、快速原型验证 服务器、CI/CD编译节点、长期维护项目
选择建议:如果你是初学者或需要快速上手,优先选择 Ubuntu 22.04 LTS。如果你追求极致稳定或搭建团队编译服务器,选择 Debian 12。

2.2 磁盘分区方案

内核编译涉及大量小文件读写(源码、中间对象文件、最终镜像),磁盘布局直接影响编译速度和磁盘寿命。以下是针对编译主机的分区建议:

2.2.1 分区布局原则

  • 分离系统与数据:将 /(根分区)与 /home 或 /workspace 分开,避免系统更新影响编译数据。
  • 独立 /tmp 分区:编译过程中临时文件频繁写入,独立分区可防止 / 被写满。
  • 使用SSD作为编译盘:NVMe SSD 随机读写性能远优于机械硬盘,能显著缩短编译时间。

2.2.2 推荐分区表(500GB SSD + 1TB HDD 混合方案)

挂载点 大小 文件系统 说明
/boot 1 GB ext4 存放内核与引导加载器,无需过大
/ 50 GB ext4 系统与应用程序,Ubuntu/Debian 默认安装约占用 8-15 GB
/tmp 20 GB ext4 编译临时文件,建议使用SSD
/workspace 剩余 SSD 空间 ext4 存放AOSP源码、内核源码、编译输出(SSD加速)
/home HDD 全部空间 ext4 用户数据、下载缓存、个人文件(HDD大容量)
注意:如果只有一块SSD,建议将 /workspace 和 / 合并,但务必为 /tmp 单独划分至少 15 GB 空间。编译过程中 /tmp 空间不足会导致“磁盘空间不足”错误。

2.2.3 分区结构示意图

下图展示了混合存储方案下的分区逻辑与数据流向:

编译主机磁盘分区结构图 编译主机磁盘分区结构(SSD + HDD 混合方案) NVMe SSD (500 GB) /boot (1 GB) — 内核与引导 / (50 GB) — 系统与应用程序 /tmp (20 GB) — 编译临时文件 /workspace (剩余 ~429 GB) AOSP源码、内核源码、编译输出 HDD (1 TB) /home (1 TB) 用户数据、下载缓存 个人文档、备份 高速读写 系统调用 💡 编译核心数据放在SSD,用户存档放在HDD,兼顾速度与容量

2.3 交换空间配置

内核编译是内存密集型任务。当物理内存不足时,交换空间(Swap)充当内存的溢出区。配置不当会导致编译进程被OOM Killer杀死。

2.3.1 交换空间大小计算

推荐公式:Swap = 物理内存大小 × 系数。系数根据内存容量调整:

物理内存 推荐Swap大小 说明
≤ 8 GB 物理内存 × 2 内存严重不足,Swap需较大
8 GB – 16 GB 物理内存 × 1.5 常见开发机配置,平衡性能
16 GB – 32 GB 物理内存 × 1 内存充足,Swap主要用于休眠
> 32 GB 16 GB – 32 GB 大内存机器,Swap可适当减小
实战建议:对于16 GB内存的编译主机,配置 24 GB Swap。如果使用SSD作为Swap设备,务必启用 discard 选项以延长SSD寿命。

2.3.2 创建Swap分区(安装时)

在Ubuntu/Debian安装程序的“磁盘分区”步骤中,手动创建Swap分区:

  1. 选择“手动分区”模式。
  2. 在空闲空间上创建“逻辑分区”或“主分区”。
  3. 设置大小为计算出的Swap值(例如24 GB)。
  4. 将“使用为”选项改为 “交换空间”。
  5. 确认分区表并继续安装。

2.3.3 创建Swap文件(系统已安装后)

如果安装时未配置Swap,或需要动态调整大小,可以使用Swap文件:

# 创建24 GB的Swap文件(bs=1M, count=24576)
sudo dd if=/dev/zero of=/swapfile bs=1M count=24576 status=progress

# 设置正确权限
sudo chmod 600 /swapfile

# 格式化为Swap
sudo mkswap /swapfile

# 启用Swap文件
sudo swapon /swapfile

# 永久生效:写入 /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 验证
sudo swapon --show
free -h
避坑提示:Swap文件不要放在 /tmp 或 /workspace 分区上,因为这些分区可能在编译过程中被写满。推荐放在 / 根分区下。

2.4 系统安装后基础配置

完成系统安装后,执行以下步骤确保编译环境就绪:

2.4.1 更新软件源与系统

sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y

2.4.2 安装基础编译工具

sudo apt install -y build-essential git curl wget \
  libncurses-dev flex bison openssl libssl-dev \
  dkms libelf-dev libudev-dev libpci-dev \
  libiberty-dev autoconf llvm lzop

2.4.3 配置Swap优先级(多Swap设备时)

如果同时存在Swap分区和Swap文件,可以通过 /etc/fstab 中的 pri 参数设置优先级:

# 优先级越高(数值越大),越优先使用
/dev/sda5 none swap sw,pri=10 0 0
/swapfile none swap sw,pri=5 0 0

2.5 磁盘与Swap性能验证

配置完成后,使用以下命令验证磁盘和Swap是否正常工作:

验证项 命令 预期结果
分区挂载 df -h 所有分区正确挂载,使用率正常
Swap状态 swapon --show 显示Swap设备/文件及大小
内存与Swap总量 free -h 显示物理内存和Swap总量及使用量
磁盘读写速度 sudo hdparm -t /dev/nvme0n1 SSD读取速度 > 2000 MB/s 为佳
小技巧:编译前执行 free -h 确认Swap可用空间。如果Swap使用率超过50%,建议增加Swap大小或物理内存。

2.6 本章小结

通过本章的学习,你应能独立完成以下任务:

  • 根据硬件配置选择合适的Linux发行版(Ubuntu LTS / Debian Stable)。
  • 规划并创建合理的磁盘分区布局,分离系统、编译数据与用户文件。
  • 计算并配置合适的交换空间,避免编译过程中内存不足。
  • 完成系统安装后的基础配置与性能验证。