既然都有 UEFI 了,那么安装 Arch Linux ARM 自然也不是难事。好在 Arch Linux ARM 官方提供了通用镜像,而且支持 EFISTUB,这使得安装异常简单。
注意!
这不是任何产品的官方文档、帮助或使用说明,仅代表博主个人的经验总结,难免会有疏漏和错误之处。请务必结合官方文档进行阅读,以作补充。
安装 Arch Linux ARM 和普通电脑的 Arch Linux 安装类似,不过这个 /
是装好的。其他的分区表、分区等都大同小异。在读本文之前,建议阅读上一篇, RPI 3 上的 UEFI。
根据上一篇所述,ESP 分区和系统分区可以无需在 SD 卡上,这为 USB 启动(使用 SD 卡作为 UEFI 固件)成为了可能。本文会探讨两种方式,均可以启动 Arch Linux ARM。
- 直接使用 SD 卡启动。这样做要求 SD 卡的分区表和引导分区类型。详情参考上一篇。
- 使用 SD 卡 + USB 启动。这样做 USB 的分区表可以使用 GPT,ESP 也可以使用 ESP 类型,不过有些麻烦和问题,这个后面会讲到。
已知问题 #
由于 Arch Linux ARM EFISTUB 中内核命令行是写死的,并且 Hard code 了 root 分区 (来源忘记),所以导致了 如果不修改内核参数,Root 必须位于 mmcblk0p2 ,也就是 SD 卡的第二个分区。 这使 USB 引导异常麻烦。具体的临时解决方案后面会讲到。 更新:已经找到了使用 Grub 的办法。可以轻松进行不依赖于固件的引导。请查看后文。
接下来,作为教程,我们直奔主题。如果你想用 SD 卡安装,请读下面。想用 USB 请跳过「使用 SD 卡安装」章节。
安装之前的准备工作 #
这里列举安装所需的内容:
- RPI3 / 3B
- 可读写的 SD 卡
- SD 卡读卡器
- 可读写的 U 盘(如果 USB 启动)
- Arch Linux ARM Arm8 Generic 镜像 https://archlinuxarm.org/platforms/armv8/generic
- 具有 Root 权限的 Linux 电脑
使用 SD 卡安装 #
首先,根据上一篇的要求,分区、格式化并写入 UEFI 固件。
注意!
建议将 SD 卡引导分区设置为 200M 及以上,因为 Arch Linux ARM 的
/boot
有近 100M。
其次,创建一个主分区,作为 Root。格式化 ext4
。
挂载主分区到 /mnt
,建立 /mnt/boot
,挂载引导分区到 /mnt/boot
:
MOUNTPOINT=/mnt
mount /dev/xxx2 $MOUNTPOINT # 需要 Root
mkdir -v $MOUNTPOINT/boot # 需要 Root
mount /dev/xxx1 $MOUNTPOINT/boot # 需要 Root
之后解压缩镜像:
bsdtar -xpf /path/to/your/ArchLinuxARM-aarch64-latest.tar.gz -C $MOUNTPOINT # 需要 Root
然后卸载。注意,在较慢的设备上卸载可能会花费较长时间(我这里约 5 分钟),请坐和放宽。
提示
boot/Image
是 EFISTUB 内核。可以考虑把它复制到boot/EFI/boot/bootaa64.efi
,这样就无需手动设置引导项了,因为这是 UEFI Spec 中指定的缺省值。
最后,重启,进入 Setup 并添加引导项即可(EFI App 为 Image
)。记得更改启动顺序(如果需要)。
使用 USB 安装 #
首先,如上一篇中所述,准备一个带有 UEFI 固件的 SD 卡。
其次,准备 U 盘:
创建 GPT 分区表(理论上均可)
创建一个 ESP 分区,200M(由于 Arch Linux ARM 的 /boot 比较大,几乎到 100M),类型 ESP
。
格式化 ESP 分区为 vfat
创建一个 Root 分区并格式化 ext4
,和其他分区(如果需要)。
挂载 Root 到 /mnt
,并挂载 ESP 到 /mnt/boot
(需要新建)。和日常安装 Arch 的步骤一致。
MOUNTPOINT=/mnt
mount /dev/xxx2 $MOUNTPOINT # 需要 Root
mkdir -v $MOUNTPOUNT/boot # 需要 Root
mount /dev/xxx1 $MOUNTPOINT/boot # 需要 Root
之后解压缩镜像:
bsdtar -xpf /path/to/your/ArchLinuxARM-aarch64-latest.tar.gz -C $MOUNTPOINT # 需要 Root
然后卸载。注意,在较慢的设备上卸载可能会花费较长时间(我这里约 5 分钟),请坐和放宽。
设置引导项,修复内核参数 #
刚才讲到,Arch Linux ARM 似乎写死了 mmcblk0p2
(这里不太清楚),所以导致无法 USB 启动。我们可以修改内核参数来修改,可能的做法如下,不过均有弊端:
- 自己安装 Bootloader。
systemd-boot
无法使用,rEFIND
和Clover
没有包。更新:Grub
没有测试。Grub
似乎是最好的解决方案。 请查看下一篇文章:在 Arch Linux ARM (UEFI) 上使用 Grub。 使用cmdline.txt
没有查到太多信息,估计不可行。每次启动都用 EFI Shell 手写。emmmmmmmm让 UEFI 固件传递参数。可以使用,但有长度限制,Arch Linux ARM 官方的 RPI3 cmdline 很长,所以一些东西只能省略掉了。同时,尚不清楚还原配置或升级 UEFI 固件是否会丢失引导项。
为了方便起见,这里使用第三种方式。
打开 Setup,新建引导项,选择文件(Image
),参数填:
root=/dev/sda2 rootwait
解释:root 参数设置 Root 分区。rootwait 是必须的,因为系统检测 USB 似乎会有延迟,所以如果不加 rootwait 则只能检测到 SD 卡,导致 Panic。
最后,记得修改启动顺序。
注意
这种做法仍有弊端,如无法加入很长的参数、可能的配置丢失等。如读者有更好的建议,请不吝赐教。
安装后配置 #
根据 官方文档,安装后需要执行:
pacman-key --init
pacman-key --populate archlinuxarm
其他配置可以自行探索。Fstab 默认是没有配置的,这里建议挂载启动分区(如果是 USB 启动则是 U 盘的而不是 SD 卡的)为 /boot
,方便滚包更新内核。