FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • FreeBSD 中文期刊
  • 编辑日志
  • 2025-123 下游项目
    • FreeBSD 发布工程:新主管上任
    • GhostBSD:从易用到挣扎与重生
    • BSD Now 与将来
    • 字符设备驱动教程(第三部分)
    • 学会走路——连接 GPIO 系统
    • FreeBSD 中对 SYN 段的处理
    • FreeBSD 2024 年秋季峰会
  • 2024-1112 虚拟化
    • 字符设备驱动程序教程(第二部分)
    • 面向 Linux 和 Windows 用户的 bhyve
    • Xen 与 FreeBSD
    • Wifibox:一种嵌入式虚拟化无线路由器
    • 嵌入式 FreeBSD:Fabric——起步阶段
    • DGP:一种新的数据包控制方法
    • 会议报告:我在都柏林的 EuroBSDCon 体验
  • 2024-0910 内核开发
    • 字符设备驱动程序教程
    • VPP 移植到了 FreeBSD:基础用法
    • 利用 Kyua 的 Jail 功能提升 FreeBSD 测试套件的并行效率
    • FreeBSD 上的 Valgrind
    • 嵌入式 FreeBSD:探索 bhyve
    • TCP/IP 历险记:FreeBSD TCP 协议栈中的 Pacing
    • 实用软件:实现无纸化(Paperless)
  • 2024-0708 存储与文件系统
    • FreeBSD 中的 NVMe-oF
    • FreeBSD iSCSI 入门
    • 使用 ZFS 原生加密保护数据
    • 嵌入式 FreeBSD:打造自己的镜像
    • TCP LRO 简介
    • 基于 Samba 的时间机器备份
  • 2024-0506 配置管理对决
    • 基本系统中的 mfsBSD
    • rdist
    • Hashicorp Vault
    • 在 GitHub 上向 FreeBSD 提交 PR
    • 悼念 Mike Karels
    • 2024 年 5-6 月来信
    • 嵌入式 FreeBSD 面包板
    • TCP/IP 历险记:TCP BBLog
    • 实用软件:开发定制 Ansible 模块
  • 2024-0304 开发工作流与集成
    • FreeBSD 内核开发工作流程
    • FreeBSD 与 KDE 持续集成(CI)
    • 更现代的内核调试工具
    • 从零开始的 ZFS 镜像及 makefs -t zfs
    • 提升 Git 使用体验
  • 2024-0102 网络(十周年)
    • FreeBSD 中的 RACK 栈和替代 TCP 栈
    • FreeBSD 14 中有关 TCP 的更新
    • if_ovpn 还是 OpenVPN
    • SR-IOV 已成为 FreeBSD 的重要功能
    • FreeBSD 接口 API(IfAPI)
    • BATMAN:更优的可移动热点网络方式
    • 配置自己的 VPN——基于 FreeBSD、Wireguard、IPv6 和广告拦截
    • 实用软件:使用 Zabbix 监控主机
  • 2023-1112 FreeBSD 14.0
    • LinuxBoot:从 Linux 启动 FreeBSD
    • FreeBSD 容器镜像
    • 现在用 Webhook 触发我
    • 新的 Ports 提交者:oel Bodenmann (jbo@freebsd.org)
  • 2023-0910 Port 与软件包
    • 回忆录:与 Warner Losh(@imp)的访谈
    • 在你自己的仓库中定制 Poudriere 源
    • Wazuh 和 MITRE Caldera 在 FreeBSD Jail 中的使用
    • PEP 517
    • CCCamp 2023 旅行报告
  • 2023-0708 容器与云
    • 在 Firecracker 上的 FreeBSD
    • 使用 pot 和 nomad 管理 Jail
    • 会议报告:C 与 BSD 正如拉丁语与我们——一位神学家的旅程
    • 抒怀之旅:与 Doug Rabson 的访谈
    • 基于 Jail 的广告拦截教程
    • 我们收到的来信
  • 2023-0506 FreeBSD 三十周年纪念特刊
    • CheriBSD 近十多年的历程
    • AArch64:成为 FreeBSD 新的一级架构
    • 岁月如梭:我个人的时间线
    • 安装 FreeBSD 1.0:回顾 30 年前
    • ZFS 是如何进入 FreeBSD 的呢?
    • 我不是来自约克郡的,我保证!
    • 回忆录:采访 David Greenman Lawrence
    • FreeBSD 和早期的 Unix 社区
    • 早期的 FreeBSD 移植
    • FreeBSD 30 周年:成功的秘诀
    • FreeBSD 在日本:回忆之旅与今日之实
  • 2023-0304 嵌入式
    • CheriBSD port 和软件包
    • 让我们来试试 ChatGPT
    • GPU 直通
  • 2023-0102 构建 FreEBSD Web 服务器
    • ZFS 的原子 I/O 与 PostgreSQL
    • 虚拟实验室——BSD 编程研讨会
    • ZFS 简介
    • 会议报告:落基山庆祝女性计算机科学家
    • 进行中的工作/征求反馈:数据包批处理
    • 基金会与 FreeBSD 桌面
  • 2022-1112 可观测性和衡量标准
    • 在 FreeBSD 的 DDB 内核调试器中编写自定义命令
    • DTrace:老式跟踪系统的新扩展
    • 基于证书的 Icinga 监控
    • 活动监控脚本(activitymonitor.sh)
    • 实用 IPv6(第四部分)
    • EuroBSDCon 会议报道
    • 实用 Port:Prometheus 的安装与配置
    • 书评:《用火解决问题:管理老化的计算机系统(并为现代系统保驾护航)》Kill It with Fire: Manage Aging Computer Systems (and Future Proof Modern Ones)
  • 2022-0910 安全性
    • CARP 简介
    • 重构内核加密服务框架
    • PAM 小窍门
    • SSH 小窍门
    • 实用 IPv6(第三部分)
    • 书评:Understanding Software Dynamics(深入理解软件性能——一种动态视角)—— Richard L. Sites 著
    • 访谈:保障 FreeBSD 安全性
    • MCH 2022 会议报告
  • 2022-0708 科研、系统与 FreeBSD
    • 在 FreeBSD 上构建 Loom 框架
    • 教授本科生 Unix 课程
    • FreeBSD 入门研讨会
    • 实用 IPv6(第二部分)
    • 在 2022 年及以后推广 FreeBSD
    • 进行中的工作/征求反馈:Socket 缓冲区
    • FreeBSD 开发者峰会报告
    • 支持 Electromagnetic Field 2022
  • 2022-0506 灾难恢复
    • 使用 FreeBSD 构建高弹性的私有云
    • LLDB 14 —— FreeBSD 新调试器
    • 实用 IPv6(第一部分)
    • 利用 netdump(4) 进行事后内核调试
    • 进行中的工作/征求反馈:FreeBSD 启动性能
    • 实用 Port:在 OpenZFS 上设置 NFSv4 文件服务器
  • 2022-0304 ARM64 是一级架构
    • FreeBSD/ARM64 上的数据科学
    • Pinebook Pro 上的 FreeBSD
    • 嵌入式控制器的 ACPI 支持
    • 进行中的工作/征求反馈:Lumina 桌面征集开发人员
    • 实用 Port:如何设置 Apple 时间机器
  • 2022-0102 软件与系统管理
    • 为 FreeBSD Ports 做贡献
    • 使用 Git 贡献到 FreeBSD Ports
    • CBSD:第一部分——生产环境
    • 将 OpenBSD 的 pf syncookie 代码移植到 FreeBSD 的 pf
    • 进行中的工作/征求反馈:mkjail
    • 《编程智慧:编程鬼才的经验和思考》(The Kollected Kode Vicious)书评
    • 会议报告:EuroBSDCon 2021 我的第一次 EuroBSDCon:一位新组织者的视角
  • 2021-1112 存储
    • 开放通道 SSD
    • 构建 FreeBSD 社区
    • 与完美操作系统同行 27 年
    • 进行中的工作/征求反馈:OccamBSD
    • 通过 iSCSI 导入 ZFS ZIL——不要在工作中这样做——就像我做的那样
  • 2021-0910 FreeBSD 开发
    • FreeBSD 代码审查与 git-arc
    • 如何为 FreeBSD 实现简单的 USB 驱动程序
    • 内核开发技巧
    • 程序员编程杂谈
  • 2021-0708 桌面/无线网
    • 通往 FreeBSD 桌面的直线路径
    • FreeBSD 13 中的人机接口设备 (HID) 支持
    • Panfrost 驱动程序
    • 用 Git 更新 FreeBSD
    • FreeBSD 的新面孔
    • 想给你的桌面加点佐料?
  • 2021-0506 安全
    • 七种提升新安装 FreeBSD 安全性的方法
    • copyinout 框架
    • 使用 TLS 改善 NFS 安全性
    • Capsicum 案例研究:Got
    • 对 Jail 进行安全扫描
  • 2021-0304 FreeBSD 13.0
    • 展望未来
    • FreeBSD 13.0 工具链
    • FreeBSD 13.0 中有新加载器吗?
    • TCP Cubic 准备起飞
    • OpenZFS 中的 Zstandard 压缩
    • 会议报告:FreeBSD 供应商峰会
    • Git 不够吗?
  • 2021-0102 案例研究
    • Tarsnap 的 FreeBSD 集群
    • BALLY WULFF
    • Netflix Open Connect
    • FreeBSD 的新面孔
    • 写作学者的 FreeBSD
    • 在世界之巅
  • 2020-1112 工作流/持续集成(CI)
    • FreeBSD Git 快速入门
    • 使用 syzkaller 进行内核 Fuzzing
    • Mastering Vim Quickly 书评
    • 线上会议实用技巧
    • 在控制台上进行网络监控
  • 2020-0910 贡献与入门
    • 采访:Warner Losh,第 2 部分
    • 代码审查
    • 撰写良好的提交消息
    • 如何在不是程序员的情况下做出贡献——成为 FreeBSD 译者
    • 如何成为文档提交者
    • 谷歌编程之夏
    • 为 FreeBSD 期刊撰写文章
    • 你为什么使用 FreeBSD
    • FreeBSD 的新面孔
  • 2020-0708 基准测试/调优
    • FreeBSD Friday
    • 采访:Warner Losh,第 1 部分
    • 构建和运行开源社区
    • 在 FreeBSD 上轻松搭建我的世界(Minecraft)服务器
    • FreeBSD 的新面孔
  • 2020-0506 网络性能
    • 内核中的 TLS 卸载
    • 访谈:Michael W Lucas
    • FreeBSD 桌面发行版
    • 使用 Poudriere 进行 Port 批量管理
    • FreeBSD 的新面孔
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • 一级架构状态
  • 平台的起源
  • 工具链
  • Ports 和软件包
  • FreeBSD 团队的支持
  • 硬件生态系统
在GitHub上编辑
导出为 PDF
  1. 2023-0506 FreeBSD 三十周年纪念特刊

AArch64:成为 FreeBSD 新的一级架构

上一页CheriBSD 近十多年的历程下一页岁月如梭:我个人的时间线

最后更新于1个月前

  • 原文:

  • 作者:ED MASTE

  • 译者:ykla【】为译者注

FreeBSD 起源于 386BSD,而且在最初仅支持一种 CPU 架构,即英特尔 80386。对第二种架构 DEC Alpha【是由迪吉多公司开发的 64 位 RISC 指令集架构微处理器】的支持在 FreeBSD 3.2 中被加入的,接着是对 64 位 x86(amd64)的支持。支持等级的概念尚未完全确定,但 amd64 在 2003 年被提升为一级支持状态。64 位的 ARM 架构 AArch64(也称为 arm64)在 2021 年获得了一级支持的地位。我们将探讨这意味着什么,以及我们是如何实现这一步的。

在 FreeBSD 中引入新的一级支持架构是份具有挑战性的任务,它需要大量的努力,以确保该架构得到充分支持、稳定、高性能,并且与现有的 FreeBSD 生态系统兼容。

FreeBSD 基金会看到了 64 位 ARM 架构的潜力,并了解到其他开发者对在该平台上进行 FreeBSD 移植感兴趣。

一级架构状态

在 FreeBSD 项目中,一级架构(Tier-1)状态是指完全支持的架构,二级架构是开发或小众架构,三级架构是实验性架构。在 FreeBSD 项目网站 上有关支持等级的文件记录了这三个等级。

一级架构状态主要涉及 FreeBSD 项目对该架构的保证,包括生成 RELEASE 版本的软件包、提供预构建软件包、由安全团队提供支持,并在更新中保持向后兼容性目标。

一级架构还意味着该平台正在积极维护,定期进行测试,并及时修复错误和提供安全更新。预期 一级架构平台完全融入 FreeBSD 构建系统,以使工具链的所有组件都能正常工作,开发人员可以轻松地在该平台上构建、安装和维护操作系统。

一级架构状态还涉及些隐含特征,例如硬件可用性。FreeBSD 并未明确要求 一级架构平台必须广泛可用或受欢迎,但在实际应用中,一级架构状态要求多样化的硬件平台存在,并且以合理的成本可用。这是因为 FreeBSD 依赖于社区支持和厂商贡献来维护和改进对不同硬件平台的支持,并构建和测试第三方软件以适应该架构。

一级架构平台还应该是自举的,也就是说,在该平台上可以构建新版本的内核、C 运行时、用户空间工具和其他基本系统的 FreeBSD。

平台的起源

和其他几个平台一样,FreeBSD/arm64 起源于一位积极开发者的兴趣。Andrew Turner 是位长期从事 FreeBSD/arm 开发的开发者,在 Arm 宣布 AArch64 架构后不久就开始研究。FreeBSD 基金会看到了 64 位 Arm 的潜力,并了解到其他实体对在该平台上进行 FreeBSD 移植感兴趣。基金会组建了一个项目,协调并赞助了 Andrew Turner 和工程公司 Semihalf 的工作,同时得到了 Arm 和 CPU 供应商 Cavium 的支持。

在 FreeBSD 中最早与 arm64 相关的提交是为 kernel-toolchain 构建目标添加构建基础设施。顾名思义,该目标用于构建工具链(编译器、链接器等),然后用于编译、链接和转换内核。在当时,FreeBSD 的基本系统中包含了 Clang,所以编译器支持相对简单。然而,当时 FreeBSD 仍包含旧版本的 GNU ld 链接器,不支持 AArch64。因此,早期的构建支持依赖于安装了 aarch64-binutils port 或软件包,并自动使用提供的链接器。第一个针对 arm64 的内核修改是:

commit 412042e2aeb666395b3996808aff3a8e2273438f
Author: Andrew Turner <andrew@FreeBSD.org>
Date: Mon Mar 23 11:54:56 2015 +0000
Add the start of the arm64 machine headers. This is the subset
needed to start getting userland libraries building.
Reviewed by: imp
Sponsored by: The FreeBSD Foundation

经过几年的开发,FreeBSD 拥有了一个基本但功能齐全的自举的 FreeBSD/arm64 移植版本,提供了一些 port 和软件包。虽然仍需要大量的开发工作、调试、性能优化、文档编写和其他工作,但 FreeBSD 已经在将另一种架构添加到支持列表的道路上。FreeBSD 11.0 成为第一个包含 arm64 支持和可安装软件的版本,作为 二级架构平台。

工具链

对 arm64/AArch64 支持的开始:

commit 8daa81674ed800f568b87f5e4b8881d028c92aea
Author: Andrew Turner <andrew@FreeBSD.org>
Date: Thu Mar 19 13:53:47 2015 +0000
Start to import support for the AArch64 architecture from ARM. This
change only adds support for kernel-toolchain, however it is expected
further changes to add kernel and userland support will be committed
as they are reviewed.
As our copy of binutils is too old the devel/aarch64-binutils port needs
to be installed to pull in a linker.
To build either TARGET needs to be set to arm64, or TARGET_ARCH
set to aarch64. The latter is set so uname -p will return aarch64 as
existing third party software expects this.
Differential Revision: https://reviews.freebsd.org/D2005
Relnotes: Yes
Sponsored by: The FreeBSD Foundation

一级架构平台的首要要求之一是具备完全支持且融合的工具链。在构建 FreeBSD 时,Clang 是主要的编译器,并且来自几家大型公司的 AArch64 开发工作一直在进行,因此整个平台的编译器支持一直非常良好。

其他工具链组件,如链接器、调试器和各种二进制实用工具,需要更多的工作。在最初的 FreeBSD/arm64 移植工作接近完成时,FreeBSD 仍然使用 GNU binutils 链接器("BFD 链接器"),由于许可证问题,已经有一段时间没有更新过链接器的版本。因此,基本系统中包含的链接器不支持 AArch64,最初的支持依赖于安装 port/软件包 binutils。我们尽可能地为最终用户提供了便利,但这并不符合 一级架构架构的要求。

幸运的是,LLVM 社区的 LLD 链接器也在迅速取得进展。LLD 提供了更短的链接时间,支持不同于 BFD 链接器的优化,并拥有更广泛的架构支持。到了 2016 年底,我们在 FreeBSD/arm64 上成功切换到 LLD 作为系统链接器。事实上,这是 FreeBSD 上首个采用 LLD 链接器的架构。

FreeBSD 使用 ELF Tool Chain 项目来提供一些杂项二进制实用工具,如 strings 和 strip。这些工具有一些与机器相关的功能(例如重定位类型列表),但添加 arm64 支持的工作相对较轻松。

最后一个需要大量开发工作的工具链组件是 LLDB,即 LLVM 家族的调试器。幸运的是,LLDB 的开发工作也在为其他操作系统提供支持,因此只需要逐步增加对 FreeBSD 的支持。我们成功地将这些工具链工作合并到 FreeBSD 11 的稳定分支中,而 FreeBSD 11.1 成为了第一个避免使用变通方法并包含功能性链接器的版本。

Ports 和软件包

FreeBSD 提供了 30,000 多款第三方软件包在其 ports 中,并且其中许多软件包具有与架构相关的特性。机器相关的基础设施(例如,对于给定 port 在给定架构上进行编译的控制)是 ports 的基本部分。FreeBSD/arm64 作为 二级架构架构可用,FreeBSD 社区成员进行了实验并发现了无法构建的 port。这些问题要么被修复,要么在适当情况下从 aarch64 架构上排除。

将 FreeBSD/arm64 带入 一级架构阶段的目标带来了 ports 的一些额外要求。ports 没有官方的层次结构或 port 的分级分类,但有一些关键的 port。这些关键 port 提供工具链组件或其他依赖项,这些依赖项对于构建整个 ports 中的大型 port 是必需的。我们必须确保这些关键 port 在 arm64 上工作正常,并满足 一级架构的要求。确保这些软件包在 FreeBSD/arm64 上可用且可以持续构建是必要的。我们还需要及时为 一级架构架构构建软件包,这需要具备能力的服务器硬件。FreeBSD 基金会从 Ampere Computing 购买了服务器,并且该项目还收到了 Ampere 捐赠的额外服务器。这些硬件使得 arm64 软件包可以按照 x86 架构的每周频率进行构建。

FreeBSD 团队的支持

将新的架构提升到 一级架构状态需要得到 FreeBSD 项目内的几个团队的支持和同意。

将新的架构带入 一级架构状态需要得到 FreeBSD 项目内几个团队的支持和认可。这包括如上所述的 ports 管理和软件包管理团队,以及安全团队、发布工程团队和核心团队。

发布工程团队负责构建和测试发布制品,包括 ISO 和 USB 存储设备镜像,以及云计算目标。这些制品可以从其他架构进行交叉构建,因此发布工程团队并不绝对需要 arm64 构建主机,但是需要测试和 QA 硬件。

成为 一级架构架构需要安全团队提供安全问题和勘误的源代码更新,以及通过 freebsd-update 提供二进制更新。

最后,核心团队的支持是必要的,以便与其他团队、社区协调,并正式宣布该平台为官方的一级架构。

硬件生态系统

硬件生态系统是成为 一级架构平台的一个隐含要求,正如前面提到的。硬件在许多不同的价格/性能组合下需要提供支持:

  • 高端服务器用于构建软件包,

  • 中档的服务器级硬件用于开发者工作站、远程访问进行移植和测试等,

  • 低端嵌入式平台用于广泛的测试和开发者使用,

  • 云资源用于开发、测试和生产的不同层次。

AArch64 最初在可用硬件方面存在一些明显的缺口,特别是与中端(和中等价格)的开发者和移植工作相关的平台。在 2010 年代末期,可选项非常有限。SoftIron OverDrive 1000 是一款价格合理、性能良好的系统,采用 AMD A1100 处理器,并且采用便捷的开发者形式因子。不幸的是,A1100 和 OverDrive 1000 在推出后不久即停产。

随着硬件可用性的不断提高,平台选择也在增加,例如树莓派 4 和 Pine A64-LTS 等低端平台,苹果设备和微软的 AArch64 开发者平台等中端平台,以及基于 Ampere Altra 的高端服务器系统。主要云服务提供商也提供 AArch64 虚拟机,其中使用 Ampere 平台或定制的 CPU 设计(如 AWS 的 Graviton)。

将 FreeBSD/arm64 带入 一级架构状态需要大量的时间和资源投入。64 位 Arm 生态系统在服务器市场上占据了重要的份额,并且没有放缓的迹象。FreeBSD 将通过这个 一级架构平台从服务器市场中获益。

AWS Graviton

Ampere “Mount Jade”

树莓派 4

微软 Arm 开发套件

Pine A64 LTS


ED MASTE 是 FreeBSD 基金会的高级技术总监,负责管理基金会的技术路线图、开发团队和赞助项目。他还是当期选举产生的 FreeBSD 核心团队成员。除了 FreeBSD,他还为许多其他开源项目做出了贡献,包括 LLVM、ELF Tool Chain、QEMU 和 Open vSwitch。他与妻子 Anna 和孩子们一起生活在加拿大的基奇纳 - 滑铁卢地区。

image
image
image
image
image
AArch64: Bringing a New FreeBSD Architecture to Tier-1
https://docs.freebsd.org/en/articles/committers-guide/#archs