24.5 在 Linux 上构建 FreeBSD

设备环境

  • Ubuntu 24.04 LTS

  • 内存建议不低于 12G

  • Swap 建议 16G

安装软件包

# apt update # 刷新软件源,部分用户可能需要换源
# apt install git build-essential libbz2-dev libarchive-dev libssl-dev flex # 安装构建所需软件包和库

禁用息屏

“设置” ——> “电源” ——> “节电选项”。然后将选项“息屏”设置为“从不”。

禁用 systemd-oomd

自 Ubuntu 22.04 LTS(Desktop)以降,系统默认启用了 systemd-oomd 这一服务,该服务会在系统达到某阈值时强制结束当前高占用的进程,导致构建失败。且这一动作不会有任何提示信息告知用户。

  • 禁用 systemd-oomd 自启,并立刻中止

# systemctl mask --now systemd-oomd systemd-oomd.socket
  • 检查 systemd-oomd 的运行状态

创建放置构建产物的目录

使用 git 拉取 FreeBSD 源代码

拉取完成后,源代码应位于 /home/ykla/freebsd-srcfreebsd-src 是 git 自动创建的)。

构建工具链与世界(用户空间)

注释:

项目
说明

MAKEOBJDIRPREFIX=/home/ykla/bsdobj

指定所有构建产物的输出的目录

tools/build/make.py

在非 FreeBSD 机器上启动构建流程的官方脚本所在

--bootstrap-toolchain

用源码树里的 LLVM/Clang/LLD 自举工具链,而非通过 apt 安装,使之更接近原生构建

-j16

启用 16 个并行任务编译。一般采用内核线程数,如 4 线程即 -j4

TARGET=arm64

目标平台设为 arm64

TARGET_ARCH=aarch64

目标 CPU 架构设为 aarch64

WITH_LLVM_TARGET_AARCH64=yes

启用 LLVM 的 AArch64 后端

WITH_LLVM_TARGET_ARM=yes

启用 LLVM 的 ARM 后端

WITHOUT_LIB32=yes

禁用 32 位兼容库和相关组件,因为笔者测试未通过

buildworld

构建 FreeBSD 用户空间(world)

验证:

构建内核工具链

除了末尾的 kernel-toolchain 有变化,其他选项参数均一致。

验证:

构建内核

除了末尾的 buildkernel 有变化,其他选项参数均一致。

验证:

附录:RISC-V 64

  • 内核工具链

验证:

  • 内核

验证:

故障排除与未竟事宜

基于 Archlinux 构建 FreeBSD

要在 Arch 上编译,需要设置临时环境变量:

否则会卡在 krb5。这是由于 glibc 同时支持 POSIX 以及 GNU 导致的。

除此外,你必须保证 hostname 命令有输出,且命令本身存在。还必须安装 time 等软件包。

32 位构建的问题

15.0 已经不再支持 32 位。

Ubuntu 原生的 LLVM 工具链

待测试

构建更多体系结构(如 amd64)

待解决

参考文献

最后更新于

这有帮助吗?