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 分区结构示意图
下图展示了混合存储方案下的分区逻辑与数据流向:
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分区:
- 选择“手动分区”模式。
- 在空闲空间上创建“逻辑分区”或“主分区”。
- 设置大小为计算出的Swap值(例如24 GB)。
- 将“使用为”选项改为 “交换空间”。
- 确认分区表并继续安装。
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)。
- 规划并创建合理的磁盘分区布局,分离系统、编译数据与用户文件。
- 计算并配置合适的交换空间,避免编译过程中内存不足。
- 完成系统安装后的基础配置与性能验证。