FriendlyArmsR2S

我真不应该买这种 Arm 小板子的,便宜不到哪去,配置起来还麻烦,远不如 x64 小盒子方便。然而我买了两个:P,只能折腾了。

1. OpenWrt

官方级别支持:https://openwrt.org/toh/friendlyarm/nanopi_r2s

开箱就用。但是我很不习惯 Openwrt,调通了一次 IPv6,重装一次然后再也通不了了,其它配置也不太会。

2. Armbian

社区级别支持:https://www.armbian.com/nanopi-r2s/

有点担心 `armbian-config` 会不会让这个系统的管理和原生 debian 不太一样。我猜不会,但是我有不好的预感,所以先跳过。

3. Archlinux Arm

DIY 级别的支持,但是有 前人经验前人二级经验

3.1. 其它参考

按前人经验,这个板子可以复用 https://archlinuxarm.org/platforms/armv8/rockchip/rock64 的 dtb,但是不能复用它的 uboot。

3.2. 清理 SD 卡分区

DEV=/dev/sdX
MOUNTPOINT=mountpoint
sudo dd if=/dev/zero of=$DEV bs=1M count=32
sudo parted -s $DEV 'mklabel msdos'
sudo parted -s $DEV 'mkpart primary ext4 32768s 100%'
sudo mkfs.ext4 ${DEV}1

3.3. 解压 Armbian 并安装其 uboot 到 SD 卡

xz -dk ~/Downloads/Armbian_community_25.11.0-trunk.302_Nanopi-r2s_trixie_current_6.12.51_minimal.img.xz
sudo dd if=~/Downloads/Armbian_community_25.11.0-trunk.302_Nanopi-r2s_trixie_current_6.12.51_minimal.img of=$DEV skip=31 seek=31 bs=512 count=32736

3.4. 解压 Archlinux Arm 镜像到 SD 卡

sudo bsdtar -xpf ~/Downloads/ArchLinuxARM-aarch64-latest.tar.gz -C $MOUNTPOINT

3.5. 安装内核

3.5.1. Armbian 内核

sudo mount -o offset=$((32768*512)) ~/Downloads/Armbian_community_25.11.0-trunk.302_Nanopi-r2s_trixie_current_6.12.51_minimal.img /mnt
sudo mv $MOUNTPOINT/boot{,.orig}
sudo cp -r /mnt/boot $MOUNTPOINT/
# 备份一个省得后面改坏
sudo cp -r $MOUNTPOINT/boot{,.armbian}
sudo umount /mnt

3.5.2. 切换到 ArchlinuxArm 内核

等配置完 pacman 后再操作。其实 pacman 更新系统的时候已经替换掉了 Armbian 的内核。

估计是 dtb 哪里有问题,或者内核哪里配置不对,lan 口的网卡灯一直不亮。

sudo chroot $MOUNTPOINT rm -rf /boot/{config*,dtb,dtb-*,initrd*,System.map*,uInitrd*,vmlinuz*}
# 这步 sudo pacman -Syu 里面包含了。
# sudo chroot $MOUNTPOINT pacman -S linux-aarch64
sudo chroot $MOUNTPOINT ln -sf /boot/dtbs /boot/dtb
sudo chroot $MOUNTPOINT sed -i 's@^\(fdtfile=\).*$@\1rockchip/rk3328-rock64.dtb@' /boot/armbianEnv.txt
sudo chroot $MOUNTPOINT pacman -S uboot-tools
sudo chroot $MOUNTPOINT mkimage -A arm64 -T ramdisk -n uInitrd -d /boot/initramfs-linux.img /boot/uInitrd-initramfs-linux.img
sudo chroot $MOUNTPOINT ln -sf /boot/uInitrd-initramfs-linux.img /boot/uInitrd

3.6. Bootloader/fstab 配置

eval $(sudo blkid -o export ${DEV}1)
sudo sed -i 's@^\(rootdev=UUID=\).*$@\1'$UUID@ $MOUNTPOINT/boot/armbianEnv.txt
cat <<EOF | sudo tee $MOUNTPOINT/etc/fstab
UUID=$UUID       /            ext4    defaults,relatime   0 1
tmpfs            /tmp         tmpfs   nodev,nosuid        0  0
EOF

3.7. 第一次启动

# ~/pylon/bootstrap/desktop-environments/local/bin/prepare_chroot.sh
prepare_chroot.sh $MOUNTPOINT
# Would be fixed after bootup anyway.
sudo rm $MOUNTPOINT/etc/resolv.conf
sudo cp /etc/resolv.conf $MOUNTPOINT/etc/resolv.conf
cat <<'EOF' | sudo tee $MOUNTPOINT/etc/pacman.d/mirrorlist
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/$arch/$repo
Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo
Server = https://mirrors.bfsu.edu.cn/archlinuxarm/$arch/$repo
EOF
sudo chroot $MOUNTPOINT pacman-key --init
sudo chroot $MOUNTPOINT pacman-key --populate archlinuxarm
sudo chroot $MOUNTPOINT pacman -Syu

sudo chroot $MOUNTPOINT pacman -S dhcpcd netctl openresolv ppp python sudo vim
sudo chroot $MOUNTPOINT systemctl disable systemd-networkd
sudo chroot $MOUNTPOINT systemctl disable systemd-networkd.socket
sudo chroot $MOUNTPOINT systemctl disable systemd-resolved
sudo chroot $MOUNTPOINT visudo
sudo chroot $MOUNTPOINT passwd -l root
# Copy network configs

Updated: 2025-12-04 Thu 02:42