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

在本页
  • 支持的硬件
  • 不支持的硬件
  • 可以运行哪些软件?
  • 引导过程
  • 快速开始
  • 联网
  • 如何在 amd64 上交叉编译 FreeBSD 源码
  • Port 和修改后的软件包
  • 给 RockPRO64 用户的注意事项
在GitHub上编辑
导出为 PDF
  1. 2022-0304 ARM64 是一级架构

Pinebook Pro 上的 FreeBSD

上一页FreeBSD/ARM64 上的数据科学下一页嵌入式控制器的 ACPI 支持

最后更新于1个月前

  • 原文链接:

  • 作者:JESPER SCHMITZ MOURIDSEN

Pinebook Pro 是一款基于 Rockchip rk3399 的 ARM64 笔记本电脑。由于全球元件短缺(据 Pine64 称),目前它尚未开售。不过,你可能已经有了一台,却错过了在其上运行 FreeBSD 的机会。本文将介绍如何让 FreeBSD 在 Pinebook Pro 上作为实用的桌面系统运行。如果你没有 Pinebook Pro,我提供的测试镜像和构建步骤同样适用于 RockPRO64 开发板。(唯一例外的是 U-Boot,对于 RockPRO64 请使用 FreeBSD 自带的版本。)

正如我所说,它基于 rk3399,但它并不是一个装在 RockPRO64 外壳内的设备——它有自己专用的主板。因此,官方的 RockPRO64 构建方案并不适用于此。现在有一些正在审核的补丁能使 Pinebook Pro 成为一个实用的桌面系统,其中最引人注目的是 Emmanuel Vadot 的 drm 子树以及 Ruslan Bukin 早前关于 panfrost 的相关工作。此外,Alexander Tymoshenko 编写了实现声音功能的补丁。由 SleepWalker 在 forums.freebsd.org 上发起的 Pinebook Pro 讨论帖中,许多网友都为此贡献了大量工作。如果你想深入了解 FreeBSD 在 Pinebook Pro 上运行的开发历程,值得一读。

支持的硬件

  • 图形堆栈:通过 Ruslan Bukin 的 panfrost 驱动工作以及 Emmanuel Vadot 在 中的相关工作,实现了硬件加速图形支持。

  • 声音:由 Alexander Tymoshenko 实现了录音和播放功能。

  • eMMC 和 SD 卡:均得到全面支持。

  • SPI 闪存:已能被检测到,但可能仍受到 bug 的影响。

  • PCI 桥:支持搭配 SSD 使用,尽管在我的测试中,ufs 显示出一些异常表现。

  • CPU:所有 CPU 均受支持,但 FreeBSD 无法充分利用 big.LITTLE 架构,即较快的核心必须跟随较慢核心的频率。

  • USB 2.0 端口。

  • 触摸板和键盘:触摸板目前仅能作为简单鼠标使用。

  • 网络摄像头:通过 webcamd 驱动可正常工作。

不支持的硬件

  • WiFi 和蓝牙,以及通过 USB-C 的 DP(DisplayPort)功能。

  • Type-C 接口:如果通过 gpioctl 启用,Type-C 才能以 Type-C 模式工作。但如果你不完全确定设备树中正确的引脚设置及其配置方法,请不要尝试此操作。

可以运行哪些软件?

我已经测试了 sway 和 hikari / wayland 以及 X11 与几个桌面环境。在此过程中,我发现 openbox 与图形堆栈存在问题:它在窗口边框内并不能正确地渲染任何内容。幸运的是,xfwm4 没有这个问题。因此,LXQt 必须将默认的 openbox 替换为 xfwm4。LibreOffice 运行良好。Electron 相关的软件在 FreeBSD 上仅支持 amd64,所以你可能会错过一些基于 Electron 的应用,例如 vscode-oss。Sway 必须回退到 14.1 版本,否则会出现“Cannot use DRM dumb buffers with non-primary DRM FD.”错误。我怀疑这是因为系统中存在两个显卡条目,即 /dev/dri/card0 和 /dev/dri/card1,而只有 card1 拥有渲染设备,不过我并没有进一步深入研究。为此,我选择将 sway 和 wlroots 回退到在 Pinebook Pro 上最后一个已知可用的版本。

在 arm64 平台上,Firefox 以及其他一些应用程序经常崩溃,除非通过 proccontrol -m aslr -s disable firefox 禁用 ASLR(地址空间布局随机化)后再启动。另外,为了在 Firefox 中测试 webgl,你可能需要在 about:config 中将 webgl.force-enabled 设置为 true。由于 webcamd 运行良好并支持内置摄像头,我在 Nextcloud Talk 中使用 Firefox 测试了一个 WebRTC 通话,效果也很不错。通话中的屏幕共享也能正常工作,不过一次只能共享一个窗口。Vlc 对 screen:/// 捕获的支持也不理想,所以全屏捕获目前存在一些问题。我还在 YouTube 上观看了全屏视频,未发现任何卡顿。需要注意的是,由于这项工作基于 14-CURRENT,默认的软件包仓库并非每季度构建一次——因此部分软件包可能偶尔构建失败,从而缺失。

引导过程

没有支持视频的 U-Boot 版本(即启动时屏幕上什么也不显示的版本)太旧,无法满足需求。此外,我在测试镜像中跳过了面板驱动,所以面板必须由 U-Boot 启动。背光功能显然也依赖于较新的 U-Boot。我使用过最成功的版本是 2021.7,该版本在本文撰写时正好存在于 FreeBSD ports 中。

NetBSD 注意到面板在软重启时会出现故障。他们提供了一个补丁,我强烈推荐使用,因为面板在温重启时似乎会以一种极其不正确——而且可能对面板非常不利——的状态启动。这个 NetBSD 补丁已被适配到 FreeBSD ports 树中,并包含在测试镜像里。

如果你使用 FreeBSD U-Boot 从 eMMC 启动,需要知道它默认不会从 SD 卡启动。在这种情况下,要从 SD 卡启动,你应当按任意键停止自动启动,然后输入 run bootcmd_mmc1。请注意,U-Boot 下的键盘支持不太完善,它可以输入,但最好慢慢敲击。你也可以完全禁用 eMMC,只从 SD 卡直接测试测试镜像。这样可以避免 U-Boot 版本问题,但使用笔记本内部 eMMC(较为脆弱)的断电开关会稍显不便。打开笔记本很容易——不过我认为那个开关的位置设置得很糟糕。因此,如果你使用的是原版 Manjaro 和 Debian 安装,可能需要以同时更新 U-Boot 的方式升级,或者将 FreeBSD 安装到 eMMC 上,亦或按上述方式使用其断电开关。

最后,切记,用于引导的 U-Boot 应当是打过补丁的版本。

快速开始

联网

网络连接当然是必需的,但目前内置 Wi-Fi 仍然不受支持。我选择了一个基于 rtwn_usb 芯片组的 Wi-Fi 网卡。你也可以在 M.2 插槽中安装一张 Wi-Fi 网卡(如果你有 PCI 桥扩展)。不过,我自己并没有尝试后者。此外,你的手机也可以通过 USB 共享网络,让 Pinebook Pro 联网。

如何在 amd64 上交叉编译 FreeBSD 源码

./release.sh -c arm64/PINEBOOKPRO.conf

但编译需要一段时间。(在一台 10 代 10 核 Intel CPU 上大约需要 1.5 到 2 小时。)

setenv TARGET arm64
setenv WORKSPACE /usr
setenv MAKEOBJDIRPREFIX $WORKSPACE/obj/
setenv ROOTFS $WORKSPACE/rootfs
setenv SRC /usr/src
setenv MAKESYSPATH $SRC/share/mk

使用:

make buildenv TARGET_ARCH=aarch64 BUILDENV_SHELL=/bin/sh

我编写了一个 Makefile 并修复了一些编译时错误,主要是添加函数原型和修正 printf 格式字符串。在 buildenv 中,将目录切换到 /usr/src/sys/dev/drm/panfrost,然后执行以下命令:

make
make DESTDIR=$ROOTFS install

然后,你就可以通过修改

-   if (1 == 1)
+   if (1 == 0)
           panfrost_alloc_pages_iommu(bo);
    else
           panfrost_alloc_pages_contig(bo);

Port 和修改后的软件包

这些软件包均已预编译,可直接下载。同时,如果你更倾向于从源码构建,我也提供了 ports 树的补丁。你可以利用 pkg lock 功能,防止 pkg 命令重新安装这些修改后的软件包。只需运行 pkg lock。在我的系统上,我锁定了以下软件包:

hikari-2.3.2
libdrm-2.4.109,1
mesa-dri-21.3.6
mesa-libs-21.3.6
sway-1.6.1_2
wlroots-0.14.1_2

给 RockPRO64 用户的注意事项

请不要忘记在测试镜像上重新安装来自 ports 的 RockPRO64 u-boot,另外请注意,音频尚未打入补丁。


JESPER SCHMITZ MOURIDSEN 是一名自学成才的系统管理员和开发者,目前担任系统管理员,主要从事 OpenStack 相关工作。他是 FreeBSD ports 的提交者,主要关注 LXQt,并且是 rtsx(4) 的合著者。工作之余,他喜欢骑自行车,是一名骑行爱好者。

稍后我会介绍如何从源码安装,但你可以直接从 获取测试镜像,以及后面提到的修改后软件包。

如果你已经禁用了 eMMC,或者已为 Pinebook Pro 安装了补丁版 U-Boot(你可以在找到),那么你就可以开始了。请注意,RELEASE(7) 默认创建了两个不安全的用户:root(密码:root)和 freebsd(密码:freebsd)。SSH 也是默认启用的。这样的默认设置适用于 ARM 开发板,但对于笔记本来说并不太合适。此外,别忘了将自己的用户添加到 video 组,否则图形堆栈将无法访问图形设备节点。

对于 Wi-Fi 网卡,你需要知道如何通过命令行连接。我建议你直接编辑 /etc/rc.conf 进行配置,具体请参考 FreeBSD 。如果使用手机共享网络,则只需运行 dhclient ue0 即可。

测试镜像基于 14-CURRENT,提交哈希为 c9e023541aef。要构建它,你可以使用我的 PINEBOOKPRO.conf 和 release.sh,它们可以在 找到。

在撰写本文时,Panfrost 仍处于开发阶段,因此我修改了 Ruslan Bukin 提交的最新 PR(针对 drm-subtree),以避免使用连续内存。因为在相对高负载(比如在 Firefox 中运行 的水族馆示例)时,Pinebook Pro 似乎很难保持足够的连续空闲内存。我将 Panfrost 构建为模块,因为如果将其编译为设备,系统在启动时会崩溃。要构建该模块,你可以 chroot 到 release.sh 的 scratchdir 目录,并在 /usr/src 目录下设置以下环境变量进行编译:

在 panfrost_gem.c 中进行了修改。它没有 sysctl 控制选项,而是直接修改了代码。详细信息请参考 drm-subtree 讨论,pull 。

如前所述,我将 sway、wlroots 和 hikari 还原到了较早的版本。同时,我对 libdrm 进行了修改,以便通过此检测 panfrost。Hikari 还需要一个小补丁来修复其参数解析。此外,mesa-dri 和 mesa-libs 也经过修改,以便编译 panfrost 驱动程序,并启用 gles1 和 gles2,即按照 Ruslan Bukin 在其文章中描述的方式进行编译。

FreeBSD on the Pinebook Pro
drm 子树
244146
GitHub
这里
手册
people.freebsd.org/~jsm/pbp
webglsamples.org
#13
补丁
问题