# 3.13 基于 Apple M1 和 UTM 安装 FreeBSD

本节介绍在 Apple M1 设备上使用 UTM 安装 FreeBSD 的方法，为 macOS 用户提供 FreeBSD 系统的部署途径。

UTM 官方网站是 <https://getutm.app>。

UTM（Universal Turing Machine）是一款开源、基于 QEMU、面向 Apple 设备的虚拟机软件，支持 ARM 和 x86 架构虚拟机。读者需要注意，建议下载 aarch64（arm64）架构而非 amd64（x86-64），除非有特殊需求，否则建议下载 aarch64 版本，相同架构速度更快（M1 为 aarch64 架构），性能损失更小，系统运行更为流畅。

因开发成本问题（Apple 开发者需要每年缴纳一定的费用才能获取资格），UTM 在 App Store 中是收费的。但是可以在 [GitHub 项目，utmapp/UTM](https://github.com/utmapp/UTM/releases) 中免费获取 UTM，为用户提供了灵活的选择。

## 安装介绍

首先下载 FreeBSD 的安装镜像。

出于性能考虑，此处使用 aarch64 镜像进行展示。

![下载安装镜像](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-1177168c830b284fdfedd14d1da3bef87fb47895%2F0.png?alt=media)

接下来新建一个虚拟机，点击窗口上的加号 `+`。

![新建虚拟机](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-c1deaa9e739c084e9d3db41ea7041b8c18e65ee7%2F1.png?alt=media)

如果你下载的是 aarch64 的镜像，选择“虚拟化”；如果是 amd64 的镜像，选择“模拟”。

![选择虚拟化类型](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-378a4e2318422a8b2f4b918dc9e5014c5c82e9ec%2F2.png?alt=media)

操作系统选择“其他”。

![选择操作系统](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-575aa26c89eddfddfd925d0e67e600af4228f000%2F3.png?alt=media)

默认 4 GB 内存能适应大多数情况，初始状态下 FreeBSD 15 会占用大约 500 MB 内存，有需求可以自行增加或减少内存。CPU 核心按需设置，M1 芯片可以设置为 4。

![设置内存和处理器核心数量](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-a3b5f34d094f92267090cca564ecc8ce24e0e1ce%2F4.png?alt=media)

启动设备选择 CD/DVD 映像，点击“浏览”按钮选择你下载好的安装镜像。

![设置启动设备](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-451c727a179bbd9e6ba56a15c8e1a1adfb6f306d%2F5.png?alt=media)

存储空间默认 64 GB，初始状态 FreeBSD 会占用约 5 GB 空间，可根据需求调整。

![设置存储空间](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-a744b2f1fc63d16b81e5e1ce10ef103436193816%2F6.png?alt=media)

共享目录可以暂时跳过。

![跳过共享目录](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-ce5a31dec2773482e1de29a64e7f52b3237692e3%2F7.png?alt=media)

以上步骤设置完成后点击“存储”即可。如需进一步设置，可以勾选“打开虚拟机设置”，或者在保存后点击右上角的设置按钮打开配置界面。

![完成设置](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-afc1648b15d108073ccace98ee1f5b3b10f51526%2F8.png?alt=media)

点击播放按钮即可启动虚拟机。

![启动虚拟机](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-da63906ee9f86657162942efd0e9928d572a5392%2F9.png?alt=media)

![虚拟机启动界面](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-7695a6dd4be60134e8746cff86c8cd8e996f9959%2F10.png?alt=media)

启动 FreeBSD 安装镜像，按回车键可以跳过启动菜单等待时间。

![系统引导界面](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-5145d6eeac94e9d53c71c96cdf2f88c6db6569a3%2F11.png?alt=media)

进入安装程序，鼠标默认可用，可以按下 Control + Option 快捷键捕获鼠标光标，再次按下此快捷键即可释放鼠标。

![安装程序界面](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-496d333647691774c44decb4a94fab404dcc180c%2F12.png?alt=media)

基本系统安装完成，终端能正常运行，在虚拟机内执行 ifconfig 查看到 IP 地址后，可以在宿主机的终端模拟器中连接。

![终端](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-ac30a3e921b8b10880931c94dbc54428de7050b0%2F13.png?alt=media)

![SSH](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-c19802c4679452e2278922423c9b0ed41ac7ab20%2F14.png?alt=media)

## 故障排除与未竟事宜

### Xorg 不可用

直接启动 Xorg 默认的窗口管理器 TWM 会报错，输出内容如下：

```sh
voosk@BSDVM:~ $ startx
xauth:  file /home/voosk/.serverauth.3074 does not exist


X.Org X Server 1.21.1.20
X Protocol Version 11, Revision 0
Current Operating System: FreeBSD BSDVM 15.0-RELEASE FreeBSD 15.0-RELEASE releng/15.0-n280995-7aedc8de6446 GENERIC arm64

Current version of pixman: 0.46.2
	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Fri Feb 27 10:59:53 2026
(==) Using system config directory "/usr/local/share/X11/xorg.conf.d"
scfb trace: probe start
scfb trace: probe done
scfb: PreInit 0
scfb: PreInit done
scfb: ScfbScreenInit 0
	bitsPerPixel=32, depth=24, defaultVisual=TrueColor
	mask: ff0000,ff00,ff, offset: 16,8,0
mmap returns: addr 0x0 len 0x3e8000, fd 12, off 0
(EE)
Fatal server error:
(EE) AddScreen/ScreenInit failed for driver 0
(EE)
(EE)
Please consult the The X.Org Foundation support
	 at http://wiki.x.org
 for help.
(EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
(EE)
(EE) Server terminated with error (1). Closing log file.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
voosk@BSDVM:~ $
```

在 `/boot/loader.conf` 里面加入下面两行能成功启动 TWM，但是虚拟机就看不到画面了（ssh 仍然能连进去，说明只是显示问题）。

```sh
hint.virtio_gpu.0.disabled="1"
hint.vtgpu.0.disabled="1"
```

重启以后 startx 能够正常启动 TWM，输出如下：

```sh
voosk@BSDVM:~ $ startx
xauth:  file /home/voosk/.serverauth.3072 does not exist


X.Org X Server 1.21.1.20
X Protocol Version 11, Revision 0
Current Operating System: FreeBSD BSDVM 15.0-RELEASE FreeBSD 15.0-RELEASE releng/15.0-n280995-7aedc8de6446 GENERIC arm64

Current version of pixman: 0.46.2
	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Fri Feb 27 11:16:38 2026
(==) Using system config directory "/usr/local/share/X11/xorg.conf.d"
scfb trace: probe start
scfb trace: probe done
scfb: PreInit 0
scfb: PreInit done
scfb: ScfbScreenInit 0
	bitsPerPixel=32, depth=24, defaultVisual=TrueColor
	mask: ff0000,ff00,ff, offset: 16,8,0
mmap returns: addr 0xe4d20000 len 0x1d5000, fd 12, off 0
scfb: ScfbSave 0
scfb: ScfbSave done
scfb: ScfbScreenInit done
scfb: SaveScreen 0
scfb: SaveScreen done
twm: created fontset with 10 fonts (7 missing) for "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
twm: created fontset with 10 fonts (7 missing) for "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
twm: created fontset with 10 fonts (7 missing) for "-adobe-helvetica-bold-r-normal--*-100-*-*-*-*-*-*"
twm: created fontset with 10 fonts (7 missing) for "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"
twm: created fontset with 10 fonts (7 missing) for "-adobe-helvetica-bold-r-normal--*-100-*-*-*"
twm: created fontset with 2 fonts (15 missing) for "fixed"
```

虚拟机看不到画面，显示 Display output is not active.

![虚拟机看不到画面](https://338876981-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJR3FQGH1PkdRtOljuxb%2Fuploads%2Fgit-blob-7afb603d2ce2a8e4f147d422c78e301e0cc3c12b%2F15.png?alt=media)

## 课后习题

1. 研究 `virtio_gpu` 和 `vtgpu` 驱动在 FreeBSD ARM64 上的实现状态，分析为什么禁用它们可以让 Xorg 启动但失去画面输出，尝试寻找一个两全其美的配置。
2. 分析 UTM 与 QEMU 的关系，研究 UTM 如何封装 QEMU 并提供图形化界面，尝试直接使用 QEMU 命令行启动 FreeBSD 并对比差异。
3. 对比 UTM 在 App Store 收费版与 GitHub 免费版的功能差异。
