Jesus fuck, Broadcom.

树莓派 4B 自去年以来,确确实实是涨价了。@Cyunrei 早些时候买的 rpi 4b (4GB RAM),大概还是 ¥500 不到,而现如今京东裸板的价格都要 ¥700 多。于是我选择了在淘宝购买,裸版价格 ¥500+,也没涨价太多。

买来之后,打算尝试一下学习 xmonad。这款 X11 窗口管理器之前被 @Icy-Thought 安利了多次,他最终调出来的桌面也很美观:Icy-Thought/Snowflake

另外,我还需要一个设备作为 4K 电视的机顶盒。家里的那台酷开电视十分拉垮,即使是 adb debug 下也无法安装 VLC for Android,自带的播放器又无法解码某些 mkv 视频的音轨,真是令人气愤。

一来二去,我便买入 rpi 4b 来玩。这期间也踩了不少坑,比如线材的选择和 NixOS 等方面。

首先是线材,rpi 4b 的显示输出接口为 MICRO HDMI (支持 2 x 4K 显示)。我的 AOC Q24N2 显示器上有 DP 和 HDMI 两个接口,其中 HDMI 接口已经被我的笔记本占用,故打算将树莓派接在 DP 上。

然而目前市面上的线材,似乎没有 MICRO HDMI -> DP 的,所以我先买了绿联 MICRO HDMI -> HDMI 的线,打算再购买 HDMI -> DP 的转接头,于是就踩到坑了。

市面上的 HDMI -> DP 转接头,竟然大多数都是 DP -> HDMI 的,这意味着无法反向使用。据 @Cyunrei 说此类转接头的原理类似漏斗,所以无法反向使用。这真是令人头痛,接下来的选择就只有 HDMI 切屏器了,然而我嫌弃它占用桌面空间,现在也不知道怎么办才好。

初步解决掉 rpi 显示输出的问题后,我自然是要装 NixOS 的。当然我也打算尝试其它发行版,比如 Plasma Bigscreen。结果由于硬件太新,又遇到了另一个问题。

在遵循 NixOS on ARM 时,使用通用的 images 系统无法启动(卡在 NixOS Stage 1,无法挂载根分区),具体表现可参考这个 issues:Raspberry Pi 4: Can’t mount SD card during boot.

看到这个 issues 前,我曾多次怀疑是 SD 卡的问题。我使用 nix.dev 上的这篇博客 Installing NixOS on a Raspberry Pi 中的 images 尝试启动,仍然得到了相同的错误结果。而我与该博客的硬件设备相同,甚至 firmware 也有更新过。

这之后我为了调试,甚至换了一张实验室监控中使用的 SD 卡,问题仍然依旧,但树莓派自己的 rpi OS 倒是可以正常启动。当时我为了控制变量,直接购入了 @NickCao 的同款 SD 卡 (Canvas Go! Plus),结果当天晚上就看到了上述 issues,快速尝试了一下发现问题解决。

根据上述 issues 的描述,问题出在较新批次 rpi 上的 BCM2711C0 芯片,而较早批次的产品采用 BCM2711 芯片,所以并无此问题。另外根据该 issues,rpi OS 与 NixOS 通用 ARM 镜像的主要区别是,rpi OS 使用的是树莓派基金会的 linux 分支,而 NixOS on ARM 采用主线内核。

另外说一下,在 NixOS 上进行交叉编译真的是非常方便。再结合 deploy-rs 工具使用,体验一定会很好。这里附上 @NickCao 在 Tunight 上的 Nix 介绍演讲:金枪鱼之夜:Nix - 从构建系统到配置管理,他真的很有人格魅力。