Raspberry Pi 5
硬件
- Raspberry Pi 5 8G
- Mcuzone MPS2280P 的 NVME SSD 转接板
- Samsung 980 NVME SSD
- Raspberry Pi 5 官方电源
我也尝试过 ZhiTai Ti 600 NVME SSD ,只能使用而 PCIe Gen 3 并且还会出现掉盘问题
宿主机
准备分区
替换 sdX
为 fdisk -l
显示的你需要格式化的
# fdisk /dev/sdX
创建两个分区,一个 boot
(500 MB 即可) 一个 root
(剩下的)
n
用于创建新的分区,d
删除老分区,p
展示现在的设置, q
不保存退出,w
保存退出
# mkfs.vfat -F 32 -n bootfs /dev/sdX1 # mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -L rootfs -F /dev/sdX2
格式化就好
挂载
替换 mnt
为你的挂载点,这里因为 archlinux 的打包习惯,设置 chroot 后的 /boot
为 boot 分区是合适的,而非 /boot/firmware
# mount /dev/sdX2 mnt --mkdir # mount /dev/sdX1 mnt/boot --mkdir
准备 bootstrap 包
下载 bootstrap 包 ArchLinuxARM-rpi-aarch64-latest.tar.gz 或者可以选择镜像里的 rpi-aarcxh64-latest.tar.gz 包
$ curl -JLO http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz
解压到挂载点 mnt
# bsdtar -xpf ArchLinuxARM-rpi-aarch64-latest.tar.gz -C mnt
配置
根据 archwiki 配置下面的文件
# ln -sf mnt/usr/share/zoneinfo/Asia/Shanghai mnt/etc/localtime # vim mnt/etc/locale.gen # vim mnt/etc/locale.conf # vim mnt/etc/hostname # vim mnt/etc/hosts # vim mnt/etc/pacman.d/mirrorlist
编辑分区
# vim mnt/etc/fstab
如果你的 p1
分区是 boot ,p2
是 root 并且是 NVME SSD 那么就可以这样写 fstab
# Static information about the filesystems. # See fstab(5) for details. # <file system> <dir> <type> <options> <dump> <pass> /dev/nvme0n1p1 /boot vfat defaults 0 2 /dev/nvme0n1p2 / ext4 defaults 0 1
准备 qemu chroot
# pacman -S --no-confirm qemu-user-static qemu-user-static-binfmt arch-install-scripts # systemctl restart systemd-binfmt.service # arch-chroot mnt
内部
宿主机配置后续
# locale-gen
keyring
初始化并且更新 keyring
# pacman-key --init # pacman-key --populate archlinuxarm # pacman -Sy archlinux-keyring archlinuxarm-keyring
安装必要的软件
启动所需要的内核 firmware 以及 bootloader 等
# pacman -S --no-confirm linux-rpi linux-rpi-headers firmware-raspberrypi raspberrypi-bootloader rpi5-eeprom
文本编辑软件,我更倾向于安装 vim
作为文件编辑
# pacman -S --no-confirm vim
网路管理工具
# pacman -S --no-confirm networkmanager iwd wireless-regdb
一般 boot
编辑 boot 命令
# vim /boot/cmdline.txt
内容是,如果 p2
是 root 并且是 NVME SSD
root=/dev/nvme0n1p2 rw rootwait console=serial0,115200 console=tty1 fsck.repair=yes
SSD boot
编辑 config.txt 可以选择启用或者不启用 PCIe gen 3,默认是 gen 2
# vim /boot/config.txt
文本最后写入 [all]
后面的内容
[all] dtparam=pciex1 #dtparam=pciex1_gen=3
EEPROM
更新 eeprom
# rpi-eeprom-update -a
查看当前配置
# rpi-eeprom-config /boot/pieeprom.upd
修改当前配置
# EDITOR=vim rpi-eeprom-config -e
我的配置
[all] BOOT_UART=1 POWER_OFF_ON_HALT=0 BOOT_ORDER=0xf416
如果 POWER_OFF_ON_HALT=1
则会降低功耗,但是也可能会导致问题
Kernel 修复
删除 HOOKS
里的 kms
能修复 ==> WARNING: errors were encountered during the build. The image may not be complete.
报错
# vim /etc/mkinitcpio.conf
修改后如下
HOOKS=(base udev autodetect modconf keyboard keymap consolefont block filesystems fsck)
然后运行
# mkinitcpio -P
网络
创建 /etc/NetworkManager/system-connections/<wifi_name>.nmconnection
可以参考你宿主机器的配置,下面不一定标准
[connection] id=<wifi_name> type=wifi interface-name=wlan0 [wifi] mode=infrastructure ssid=<ssid> [wifi-security] key-mgmt=wpa-psk psk=<password> [ipv4] method=auto [ipv6] addr-gen-mode=default method=auto [proxy]
编辑/etc/networkmanager/conf.d/powersave.conf
启用省电模式,避免 nvme 掉盘报错
[connection] wifi.powersave = 2
取消掉所在国家的注释,避免brcmfmac: brcmf_set_channel: set chanspec fail
# vim /etc/conf.d/wireless-regdom # set-wireless-regdom
准备自启动
# systemctl enable NetworkManager
省电/休眠配置
# systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
用户配置
删除 alarm
用户
# userdel alarm # rm -rf /home/alarm
创建新用户
# useradd -m -G wheel <your_user> # passwd <your_user> # EDITOR=vim visudo
修改密码
# passwd root # passwd <your_user>
SSH
对于每个用户都要有这个文件才能自动登陆
$ mkdir -p ~/.ssh $ vim ~/.ssh/authorized_keys
写入宿主机器的 ~/.ssh/<ssh_key>.pub
的内容
使用
连接
同一个网路下
$ ssh <user>@<hostname>.local
GPIO
可以安装 python-gpiozero
和 python-rpi-gpio
来使用 pinout
测速
# hdparm -t /dev/nvme0n1
已知问题
nvme
如果硬盘不兼容,很有可能出现
nvme nvme0: controller is down; will reset: CSTS=0xffffffff, PCI_STATUS=0x10 nvme nvme0: Does your device have a faulty power saving mode enabled? nvme nvme0: Try "nvme_core.default_ps_max_latency_us=0 pcie_aspm=off" and report a bug nvme0n1: I/O Cmd(0x2) @ LBA 34489736, 512 blocks, I/O Error (sct 0x3 / sc 0x71) I/O error, dev nvme0n1, sector 34489736 op 0x0:(READ) flags 0x80700 phys_seg 59 prio class 2 nvme 0000:01:00.0: enabling device (0000 -> 0002) nvme nvme0: Shutdown timeout set to 8 seconds nvme nvme0: 4/0/0 default/read/poll queues
然后出现
brcmfmac: brcmf_set_channel: set chanspec 0xd0<两个字符> fail, reason -52
当然,这可能出现任何硬盘上面,并且一般是是和 NetworkManager / iwd / netcl 一类的网路管理器启动与否相关,可能二次启动网路管理器就会出现这种问题
错误教程
一些错误的教程,比如 kiljan 和 ikuyo 或许是已经过时,其中的删除 ArchLinuxARM-rpi-aarch64-latest.tar.gz 解压出来后的 boot 文件夹内的所有文件是完全错误的,因为正常的 树莓派5 的 boot 是由多个包掌握的,如果粗暴删除掉 bootstrap 压缩包的 boot
会导致 bootloader 也被删除,而不仅仅是删除内核。
# pacman -Qo /boot /boot/ is owned by filesystem 2024.01.19-1 /boot/ is owned by linux-rpi 6.6.22-2 /boot/ is owned by raspberrypi-bootloader 20240320-1