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

在本页
  • 回到 FreeBSD 启动加载程序
  • OpenZFS
  • 控制台
  • 字体
  • 图像
  • 缺点
  • 总结
在GitHub上编辑
导出为 PDF
  1. 2021-0304 FreeBSD 13.0

FreeBSD 13.0 中有新加载器吗?

上一页FreeBSD 13.0 工具链下一页TCP Cubic 准备起飞

最后更新于2个月前

  • 原文链接:

  • 作者:TOOMAS SOOME

简短的回答是“不是,仍然是那个老旧的加载程序。”但我们正在努力使它更友好并支持更多的功能。

我最初开始研究的启动加载程序并不是 FreeBSD 的,而是 illumos 的。那时,illumos 使用的是旧版 grub 0.96,只支持 BIOS 启动。UEFI 系统在那时已经出现,而 illumos 迫切需要支持 UEFI 系统。我的最初工作是研究更新版本的 grub。它功能丰富、广泛使用,但管理起来很复杂,而且当你需要支持如 zfs 之类的文件系统特定功能,或是添加操作系统特定功能时,它的许可协议并不友好。这促使我转向 FreeBSD 启动加载程序,并开始为其开发做出贡献。

当我开始将 FreeBSD 启动加载程序移植到 illumos 时,illumos 只支持串口控制台和 VGA 文本模式控制台。为了支持 UEFI,我必须为 illumos 内核实现对基于 UEFI 帧缓存的控制台的支持。实现后,下一步就是为加载程序添加相同的功能。当可以在 UEFI 帧缓存上绘制控制台时,重新使用相同的代码在 Vesa BIOS 扩展(VBE)线性帧缓存上绘制,就成为了开发中的另一个逻辑步骤。完成后,我们就得到了像这样的公开发布:

图 1 启动加载程序与 ASCII 图

图 2 启动加载程序与图像。

回到 FreeBSD 启动加载程序

说了这么多 illumos 的内容,让我们回到 FreeBSD,看看我们在这里做了什么。请注意,我所做的大部分工作涉及从 FreeBSD 到 illumos 或反向的迁移。

OpenZFS

由于 FreeBSD 13.0 现在使用 OpenZFS,我们支持大多数用于启动的 OpenZFS 特性。不过,加密数据集和 draid 仍然在待办事项清单上。

控制台

最显著的变化无疑是启动加载程序的图形控制台。虽然当前的实现还不完美,并且可以改进,但我希望大多数用户会喜欢更新后的外观。

加载程序的控制台终端模拟器是从内核树中提取的。在这里,我们有两个可以设置的第一个调优参数:

teken.fg_color
teken.bg_color

接受的值是 ANSI 颜色名称或数字值 0 – 7。

UEFI 启动加载程序默认使用帧缓冲控制台,除非配置了串行控制台。

BIOS 启动加载程序当前默认使用文本模式。对于 BIOS 启动加载程序,可以通过设置以下参数来控制控制台:

screen.textmode="0"

这将导致加载程序设置为使用 VBE 帧缓冲模式,并在有 EDID 信息时使用显示首选分辨率。默认的回退分辨率为 800x600。

UEFI 和 BIOS 启动加载程序都允许通过以下调优参数设置屏幕分辨率:

efi_max_resolution
vbe_max_resolution

设置 vbe_max_resolution 也会导致加载程序切换到使用 VBE 帧缓冲模式。

帧缓冲模式也可以通过平台特定的命令来设置、查询和列出支持的模式。

命令 gop 能让用户在 UEFI 加载程序中获取、设置和列出分辨率。命令 gop off 会将加载程序从绘制控制台切换到 UEFI 内建的终端输出方法——简单文本输出协议。

命令 vbe 能让用户在 BIOS 加载程序中获取、设置和列出分辨率。命令 vbe on 会将加载程序切换到使用 VBE 帧缓冲,而命令 vbe off 会将加载程序切换到使用 VGA 文本模式。

如果用户已将 BIOS 加载程序切换为使用 VBE 帧缓冲,但正在启动一个不提供 VT vbefb 驱动程序的旧内核,那么加载程序会在启动加载的内核之前将控制台切换为 VGA 文本模式。

字体

目前,我们提供了 Terminus 家族的控制台字体,安装在目录 /boot/fonts 中。加载程序内置了一个 8x16 字体,但为了节省空间,内置字体仅提供 ASCII 集。

在加载程序启动并初始化之后,它获得对磁盘的访问权限并确定了启动设备和启动文件系统,加载程序将搜索 /boot/fonts 目录和文件 INDEX.fonts 。如果存在,加载程序将获取可用字体的列表,并构建一个内部的、索引化的可用字体列表。使用 INDEX.fonts 文件是因为我们需要支持 tftp 文件传输,但 tftp 协议不支持读取目录列表。

若我们有了可用字体的列表,我们将根据控制台显示的分辨率加载首选字体。如果默认选择对用户不起作用,可以通过两种方法来更改默认设置:

首先,环境变量 screen.font 出现,并允许更改使用的字体。尝试使用无效值或取消该值将导致当前可用字体的列表在控制台上打印。

其次,命令 loadfont 允许用户加载自定义字体文件,例如 /boot/fonts/gallant.fnt。字体需要使用 vtfontcvt(8) 工具进行准备。

加载程序中的字体索引假定字体大小唯一。当已经注册了一个 8x16 字体文件时,尝试加载提供相同字体大小的不同字体文件将导致之前加载的文件被新文件替换。

加载程序当前使用的字体将传递给加载的内核。通过这种方式,我们保留了外观和感觉,并实现了从启动加载程序到正在运行的操作系统的一致过渡。

图 3 FreeBSD 13.0 启动加载程序

图像

为了构建更美观的屏幕,启动加载程序支持显示 PNG 格式的图像文件。目前,我们要求图像为带有 alpha 通道的 TrueColor,并且支持图像缩放。可以在 drawer.lua 和 gfx-orb.lua 文件中找到如何在启动加载程序菜单中使用图像作为徽标或品牌组件的示例。

缺点

某些系统在使用帧缓冲控制台时会遇到控制台变慢的情况。使用 VBE 帧缓冲时,一种可能的解决方法是使用较小的颜色深度——默认是 32 位颜色。对于 VBE 和 UEFI,可能可以使用较小的分辨率,并在 KMS 驱动程序运行后配置更好的分辨率。当然,在某些情况下,唯一合理的选项可能是使用文本控制台。

总结

所以,再次回答,FreeBSD 并没有新的启动加载程序,但我们正在努力确保它能完成应该做的事情——即支持加载和启动 FreeBSD 操作系统,提供人们可能需要的功能,并且看起来相当不错。


TOOMAS SOOME 出生于爱沙尼亚。Toomas 自 1993 年起一直从事 UNIX 管理工作,主要使用 Solaris。他还是一名基础架构架构师、illumos 开发者和 FreeBSD 源代码提交者。Toomas 不怕启动加载程序,并且能读写 Forth。

Is There a New Loader in FreeBSD 13.0?
https://omnios.org/setup/fb