NanoPi R5C 安装 Armbian Debian 13 并迁移到 eMMC 全记录

目标板:FriendlyElec NanoPi R5C(RK3568B2 / 4GB LPDDR4X / 32GB eMMC / 双 2.5G 网口 / M.2 Key E)
镜像:Armbian Debian 13 (trixie) Minimal (CLI),内核 6.18.56-current-rockchip64
方案:TF 卡启动 → armbian-install 写入 eMMC → 拔卡从 eMMC 启动
实际耗时:写卡约 4 分钟,首次启动约 1.5 分钟,写入 eMMC 1 分 22 秒,全程约 30 分钟


目录


1. 环境与目标

1.1 硬件事实(决定方案的关键点)

项目 规格 对安装的影响
SoC Rockchip RK3568B2,4×Cortex-A55 主线内核支持良好
内存 4GB LPDDR4X —
存储 32GB eMMC + microSD 引导只能放 eMMC 或 SD
网口 2×2.5GbE(PCIe 挂载) 接口名叫 enP1p17s0 / enP2p33s0(非 lan1/wan1)
M.2 Key E,仅 PCIe 2.1 ×1 + USB 2.0 只能插 WiFi/BT 模块,不能插 NVMe SSD
启动限制 BootROM 不能从 USB / M.2 引导 引导必须落在 eMMC 或 TF 卡
电源 USB-C 5V 输入,建议 ≥2A 劣质电源是最大玄学故障源
调试口 3Pin 2.54mm,1500000 8N1 不是常见的 115200
按键 MASK(eMMC 刷机)+ User MASK 用于进 Maskrom

1.2 为什么分两步(TF → eMMC)

1
2
3
4
5
6
7
TF 卡(临时引导)         eMMC(最终归宿)
┌──────────────┐ ┌──────────────────┐
│ idbloader │ │ idbloader │
│ u-boot.itb │ ────► │ u-boot.itb │
│ /boot │ rsync │ /boot │
│ / (rootfs) │ │ / (rootfs, 29G) │
└──────────────┘ └──────────────────┘

先让系统从 TF 卡跑起来,再用 armbian-install 把”引导 + 系统”整体搬到 eMMC,最后拔卡。这样全程可回退,TF 卡天然成为救援盘。


2. 准备清单

2.1 硬件

  • NanoPi R5C 主板(含 CNC 外壳)
  • USB-C 5V/≥2A 电源(必须能稳定输出 5V,避免 PD 诱骗不出电的快充头)
  • microSD 卡 8–32GB,Class10 / A1 以上,正品
  • USB 读卡器
  • 网线 ×1~2
  • 电脑(Windows)
  • USB-A 公对公数据线(仅救砖用,很多 A-A 线只有电源)
  • USB-TTL 串口线 3.3V(可选,强烈建议;波特率 1500000)
  • HDMI 线 + 显示器(可选)

2.2 软件(Windows)

工具 用途 备注
Armbian Imager 下载 + 校验 + 写卡一体 推荐,自动核对 SHA256
balenaEtcher 写卡 可直接吃 .img.xz
Rufus 写卡 必须选 DD 镜像模式
7-Zip 手动解压 不建议解压后再写,易损坏
RKDevTool + DriverAssistant 救砖 / Maskrom 从 FriendlyElec 网盘或 Radxa 文档获取
MobaXterm / PuTTY SSH 可选

⚠️ 用 Windows 自带解压 .xz 后用 Win32DiskImager 写卡,曾出现”解压损坏但工具不报错 → 烧完不启动”。要么交给 Etcher 直接吃 .xz,要么先核对哈希。


3. 镜像下载与校验

直链(约 336 MB,.img.xz):

1
https://dl.armbian.com/nanopi-r5c/Trixie_current_minimal

同目录提供 .sha 与 .asc:

1
2
https://dl.armbian.com/nanopi-r5c/Trixie_current_minimal.sha
https://dl.armbian.com/nanopi-r5c/Trixie_current_minimal.asc

Windows 校验:

1
2
3
cd D:\HA
Get-FileHash .\Armbian_*nanopi-r5c*Trixie*.img.xz -Algorithm SHA256 | Format-List
Get-Content .\Armbian_*nanopi-r5c*Trixie*.img.xz.sha

两串 64 位十六进制必须完全一致。


4. 阶段一 写入 TF 卡

  • Armbian Imager → 选 NanoPi R5C → Debian 13 (trixie) Minimal (CLI) → Flash

或手动:

  • Etcher 选择 .img.xz → Flash(Etcher 自行解压)
  • 或 Rufus → DD 镜像模式

写完后 Windows 提示”需要格式化” → 点取消(那是 Linux 分区表,正常现象)。

安全弹出读卡器。


5. 阶段二 首次从 TF 卡启动

  • 断开 R5C 电源
  • 插入 TF 卡
  • 接网线到任一 2.5G 口(两个口默认都发 DHCP 请求)
  • 插入 USB-C 5V 电源
  • 等待 1–2 分钟(首启自动扩分区 + 生成 SSH 密钥)

启动成功的标志:

指示灯 状态
SYS(红) 由常亮转为慢闪
网口灯 亮起 / 闪烁

有串口线时:3Pin 调试口,1500000 8N1,可看到完整启动日志。


6. 阶段三 找到 IP 并登录

6.1 找 IP

1
2
3
4
5
# 方法 1:路由器后台 → DHCP 客户端列表 → 找新增设备
# 方法 2:ARP 表
arp -a | Select-String "192.168"
# 方法 3:nmap 扫描
nmap -sn 192.168.*.0/24

本次实测 IP:192.168.*.30

6.2 首次登录

1
ssh [email protected].*.30     # 默认密码:1234

首次登录必须一次完成三步(中断需重来):

  • 修改 root 密码(输入两遍)
  • 创建普通用户 + 密码(该用户拥有 sudo)
  • 确认时区(可先回车跳过,之后用 timedatectl 改)

键盘为 QWERTY 布局;密码避免中文与特殊符号。


7. 阶段四 写入前预检

这一步的核心目的:确认哪块盘是 eMMC。选错会抹掉正在运行的 SD 卡。

7.1 基础信息

1
2
3
4
5
6
7
findmnt -no SOURCE /                          # 当前根分区
lsblk -o NAME,SIZE,TYPE,TRAN,FSTYPE,MOUNTPOINTS
df -h /
free -h
ip -br a
cat /sys/class/thermal/thermal_zone0/temp # 温度 ÷1000,正常 45~65℃
ping -c2 223.5.5.5

7.2 精确区分 eMMC 与 SD 卡

1
2
3
4
5
for d in /dev/mmcblk[0-9]; do
printf '%-14s %-4s %s\n' "$d" \
"$(cat /sys/block/${d#/dev/}/device/type 2>/dev/null)" \
"$(lsblk -dno SIZE "$d")"
done

判定规则:device/type 输出 MMC = eMMC,输出 SD = 内存卡。

本次实测输出:

1
2
/dev/mmcblk0   SD   29.5G      ← 正在运行的 TF 卡,绝对不能碰
/dev/mmcblk1 MMC 28.9G ← 板载 eMMC,安装目标

7.3 官方探测器(最权威,自动排除运行中的盘)

1
sudo armbian-install --api detect

输出格式为 TSV:名字 角色 字节数 扇区 总线 旋转 型号。本次实测:

1
mmcblk1 mmc     31037849600     512     mmc     false   -

只列出 mmcblk1,说明 mmcblk0(SD)已被自动排除 —— 安装菜单里不会出现可误选的项。

7.4 如需备份 eMMC 内原厂数据

原厂 FriendlyWrt 在 eMMC 上有 9 个分区(p1–p9,p9 为根分区)。只读挂载拷出数据:

1
2
3
4
5
sudo mkdir -p /mnt/emmc_old
sudo mount -o ro /dev/mmcblk1p9 /mnt/emmc_old
sudo ls -la /mnt/emmc_old/root /mnt/emmc_old/etc
# 需要时:sudo cp -a /mnt/emmc_old/root/xxx ~/
sudo umount /mnt/emmc_old

8. 阶段五 执行 armbian-install

当前 Armbian 中 armbian-install 已是 armbian-config 的 module_partitioner 模块的兼容入口,菜单文字与下面一致。

8.1 方式一:交互式(可看清每一屏)

1
2
sudo apt install -y tmux 2>/dev/null; tmux new -s inst   # 防 SSH 掉线打断
sudo armbian-install
屏幕 提示文字 选择
① What would you like to do? Install Armbian to a disk (SD / eMMC / NVMe / SATA / USB)
② Select the destination disk: mmcblk1 28.9GiB(eMMC,唯一一项)
③ Choose how /dev/mmcblk1 should boot: emmc — Full install to this device (boot + system)
④ Root filesystem for /dev/mmcblk1: ext4(Default, most compatible)
⑤ This will ERASE /dev/mmcblk1 and install Armbian (emmc, ext4). Proceed? Erase and install
⑥ Installing to /dev/mmcblk1 - please wait... 等待 1–8 分钟,勿断电
⑦ Installation to /dev/mmcblk1 finished successfully... 成功

操作键:方向键/Tab 移动,Enter 确认,Esc 取消(取消不会写盘)。
第 ③ 屏的另一个选项 sd 是”引导留在当前介质”,不要选。

8.2 方式二:一条命令(等价,避免点错)

1
sudo armbian-install --target /dev/mmcblk1 --boot emmc --fs ext4 --yes

参数说明:

参数 可选值 说明
--target /dev/mmcblkX 目标整盘设备,必须是块设备
--boot emmc sd mtd spi standalone uefi bios … emmc = 引导+系统都装到该盘
--fs ext4 btrfs f2fs 新手用 ext4;要快照可 btrfs
--yes — 不加会拒绝执行(安全设计)

8.3 安装过程实际做了什么

本次 /var/log/armbian-install.log 摘要:

1
2
3
4
5
6
7
8
9
10
[INFO] scenario: inheriting source partition table 'gpt' for emmc
[INFO] scenario: emmc on /dev/mmcblk1 (31037849600B, 512B sectors) fs=ext4
start=16
table=gpt
part=root:100%:ext4:boot
/dev/mmcblk1: calling ioctl to re-read partition table: Success
[INFO] apply_partitions: keeping Rockchip reserved sectors 7168-16383 on /dev/mmcblk1
7168+0 records in → 3670016 bytes (3.5 MiB) ← idbloader / TPL
4096+0 records in → 2097152 bytes (2.0 MiB) ← u-boot.itb
[INFO] scenario: emmc install to /dev/mmcblk1 completed

即:

  1. 沿用 GPT 分区表,新建单个 root 分区占满全盘
  2. 保留 Rockchip 裸扇区 7168–16383(u-boot 专用区,不能覆盖)
  3. 写入 3.5 MiB idbloader + 2.0 MiB u-boot.itb
  4. mkfs.ext4 + rsync 整个根文件系统
  5. 全程 1 分 22 秒

8.4 失败处理

1
sudo tail -n 80 /var/log/armbian-install.log

界面会显示 Installation FAILED (code N)。失败不影响 TF 卡系统,修好可重试。


9. 阶段六 写入后 UUID 校验

这是”装完起不来”最常见的原因:armbianEnv.txt 的 rootdev 与 /etc/fstab 的 UUID 不一致。

9.1 检查分区结果

1
sudo lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS /dev/mmcblk1

预期(原来的 9 个分区消失):

1
2
3
NAME         SIZE FSTYPE MOUNTPOINTS
mmcblk1 28.9G
└─mmcblk1p1 28.9G ext4

9.2 挂载 eMMC 并核对三处 UUID

1
2
3
4
5
6
7
8
9
sudo mkdir -p /mnt/ec
sudo mount /dev/mmcblk1p1 /mnt/ec

ls /mnt/ec/boot
cat /mnt/ec/boot/armbianEnv.txt
grep -v '^#' /mnt/ec/etc/fstab
sudo blkid -s UUID -o value /dev/mmcblk1p1

sudo umount /mnt/ec

本次实测结果(三处一致 ✅):

检查项 实际值
armbianEnv.txt → rootdev UUID=82de9fba-****-****-****-************
/etc/fstab → / UUID=82de9fba-****-****-****-************
blkid /dev/mmcblk1p1 82de9fba-****-****-****-************
/boot 内容 Image uInitrd boot.scr dtb/ armbianEnv.txt 等齐全
设备树 rockchip/rk3568-nanopi-r5c.dtb,overlay nanopi-r5c-leds

/boot/armbianEnv.txt 实际内容:

1
2
3
4
5
6
7
8
9
10
verbosity=1
bootlogo=false
console=both
extraargs=cma=256M
overlay_prefix=rockchip-rk3568
overlays=nanopi-r5c-leds
fdtfile=rockchip/rk3568-nanopi-r5c.dtb
rootdev=UUID=82de9fba-****-****-****-************
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

三处不一致时:同步修改 armbianEnv.txt 的 rootdev 与 /etc/fstab 的 UUID,再重启。


10. 阶段七 切换到 eMMC 启动

1
sudo poweroff
  • 等红灯完全熄灭(约 5 秒,别只等屏幕黑)
  • 拔掉 TF 卡(本板 SD 优先级高于 eMMC,不拔会继续从卡启动)
  • 插电源上电

预期:3–10 秒出内核日志,SYS 慢闪,网口灯亮,30–60 秒可 SSH。
IP 可能变化,需重新在路由器里查一次。


11. 阶段八 验收

1
2
3
4
5
6
7
8
findmnt -no SOURCE /
for d in /dev/mmcblk[0-9]; do printf '%s %s\n' "$d" "$(cat /sys/block/${d#/dev/}/device/type)"; done
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
df -h /
systemctl --failed
ip -br a
cat /etc/armbian-release
uname -r

本次实测:

检查项 实际输出 结论
findmnt -no SOURCE / /dev/mmcblk1p1 根在 eMMC ✅
mmcblk0 不存在(No such file or directory) SD 已拔出,系统里只剩一块盘 ✅
df -h / 29G,已用 1.6G,可用 26G 分区铺满 32GB eMMC ✅
systemctl --failed 0 loaded units listed 无失败单元 ✅
ip -br a enP1p17s0 UP 192.168.*.30/24
enP2p33s0 DOWN
wlp1s0 DOWN
网络正常,但接口未重命名 ⚠️

⚠️ 注意:eMMC 单独存在时在本板仍枚举为 mmcblk1,但不同内核/插卡组合下编号可能变。
判断是否为 eMMC 永远看 device/type(MMC / SD),不要依赖编号。


12. 阶段九 收尾配置

12.1 系统更新与时区

1
2
3
4
5
sudo apt update && sudo apt full-upgrade -y
sudo timedatectl set-timezone Asia/Shanghai
sudo apt install -y htop iperf3 lm-sensors ethtool mmc-utils
sensors
sudo mmc extcsd read /dev/mmcblk1 | grep -Ei 'life|pre_eol'

12.2 网口重命名(可选,软路由建议)

问题:Armbian 板级 udev 规则写的是旧内核 PCI 地址 0001:01:00.0 / 0002:01:00.0,
6.18 内核下实际为 0001:11:00.0(0x11=17)与 0002:21:00.0(0x21=33),规则未命中,
因此显示为 enP1p17s0 / enP2p33s0 而不是 lan1 / wan1。
功能不受影响,仅名字不同。

先确认物理口对应关系(把网线插到丝印 WAN 口,看哪个接口变 UP):

1
2
3
4
5
watch -n1 'ip -br a'
readlink -f /sys/class/net/enP1p17s0/device
readlink -f /sys/class/net/enP2p33s0/device
cat /sys/class/net/enP1p17s0/address
cat /sys/class/net/enP2p33s0/address

用 MAC 绑定重命名(比 PCI 地址更可靠):

1
2
3
4
5
6
7
sudo tee /etc/udev/rules.d/70-persistent-net.rules >/dev/null <<'EOF'
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<WAN口MAC>", NAME="wan1"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<LAN口MAC>", NAME="lan1"
EOF
sudo udevadm control --reload
sudo udevadm trigger --subsystem-match=net
sudo reboot

重命名后 NetworkManager 连接会按新名字重建,重启后需重新确认 IP:

1
nmcli device status

12.3 固定 IP

1
2
3
4
5
6
nmcli device status
sudo nmcli con mod "<连接名>" ipv4.method manual \
ipv4.addresses 192.168.*.30/24 \
ipv4.gateway 192.168.*.1 \
ipv4.dns "223.5.5.5 119.29.29.29"
sudo nmcli con up "<连接名>"

12.4 iperf3 是否开机自启(armbian-config 对话框)

armbian-config 安装 iperf3 时会问:

Choose this option if Iperf3 should start automatically as a daemon, now and at boot time.
Start Iperf3 as a daemon automatically?

选 No / Cancel。

  • iperf3 是临时测速工具,默认监听 5201 且无认证,常驻等于平白多一个暴露面
  • 选 No 不影响安装,iperf3 命令照常可用

手动测速:

1
2
# 板子上当服务端(-D 为临时后台,重启不复活)
iperf3 -s -D
1
2
3
4
# Windows 端(下载 iperf3 二进制后在该目录执行)
iperf3.exe -c 192.168.*.30 -t 30
iperf3.exe -c 192.168.*.30 -t 30 -P 4 # 多流压满 2.5G
iperf3.exe -c 192.168.*.30 -t 30 -P 4 -R # 反向测下行

判读:2.5G 口理论 2.35 Gbit/s,实测 2.0–2.3 Gbit/s 为优秀;只有 ~940 Mbps 说明链路卡在千兆(网线或对端口)。

万一需要自启:

1
2
sudo systemctl enable --now iperf3
sudo systemctl disable --now iperf3

12.5 eMMC 寿命优化

  • /var/log 已挂 zram1(Armbian 默认日志内存化),无需额外操作
  • 大量写日志的服务,建议把数据目录放到 USB 硬盘
  • 定期查看寿命:sudo mmc extcsd read /dev/mmcblk1 | grep -i life

12.6 保留 TF 卡

不要格式化那张 TF 卡 —— 它就是救援盘:eMMC 系统起不来时插上照样能启动。


13. 故障对照表

现象 原因 解决
上电红灯常亮、不闪、无网络 电源不足 / 卡没插好 / 镜像写坏 换 5V/3A 好电源;重写卡并核对哈希
插卡后进的仍是原厂 FriendlyWrt eMMC 引导优先 Maskrom EraseAll 擦 eMMC
--api detect 目标为空 eMMC 未识别 重启一次;换卡排除;仍空则查硬件
armbian-install 命令不存在 缺 armbian-config sudo apt install -y armbian-config
Installation FAILED (code N) 设备/传输/工具错误 sudo tail -100 /var/log/armbian-install.log
装完拔卡黑屏/不启动 bootloader 未写成功 / 误选 sd 模式 插回 TF 卡 → sudo armbian-install bootloader --target /dev/mmcblk1 --yes
拔卡后还是老系统 未完全断电就插拔 完全断电 10 秒再上电
网口没拿到 IP 接口未重命名 / 线序 nmcli device status;换口试;sudo dhclient enP1p17s0
温度 80℃+ 被动散热、通风差 检查外壳装配;可加 5V 小风扇
SSH 提示 host key 变更 重装后密钥变化 ssh-keygen -R <IP>
armbianEnv.txt 与 fstab UUID 不一致 安装异常 手动同步两处 UUID

14. 救砖流程 Maskrom

适用:完全无法启动、--api detect 看不到 eMMC、需要彻底清空存储。

  1. 安装 DriverAssistant 驱动
  2. 板子断电
  3. 按住 MASK 键不放,插上电源,状态灯亮约 3 秒后松开
  4. 用 USB-A 公对公数据线连接电脑与靠 TF 卡那一侧的 USB 口
  5. 打开 RKDevTool,应显示 Found One MASKROM Device
  6. Advanced Function → Boot 选 MiniLoaderAll.bin(RK3568 版)→ 点 Download
  7. 勾选 EMMC → Switch Storage(板子有 SPI Flash 时必须先切存储)
  8. 点 EraseAll 清空 eMMC
  9. 之后插 TF 卡引导,或重新烧写镜像

原厂固件可从 FriendlyElec 网盘 获取(-eflasher- / -usb- 后缀版本)。


15. 附录 A 命令速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# ── 识别设备 ──────────────────────────────────────────
findmnt -no SOURCE / # 当前根设备
lsblk -o NAME,SIZE,TYPE,TRAN,FSTYPE,MOUNTPOINTS # 块设备总览
for d in /dev/mmcblk[0-9]; do printf '%s %s\n' "$d" \
"$(cat /sys/block/${d#/dev/}/device/type)"; done # MMC=emmc / SD=卡
sudo armbian-install --api detect # 官方安装目标探测

# ── 安装到 eMMC ───────────────────────────────────────
sudo armbian-install # 交互式 TUI
sudo armbian-install --target /dev/mmcblk1 --boot emmc --fs ext4 --yes
sudo armbian-install --help # 查看全部参数

# ── 只补写引导(不重装系统)────────────────────────────
sudo armbian-install bootloader --target /dev/mmcblk1 --yes

# ── 安装日志 ──────────────────────────────────────────
sudo tail -n 100 /var/log/armbian-install.log

# ── 校验引导配置 ──────────────────────────────────────
cat /boot/armbianEnv.txt
grep -v '^#' /etc/fstab
sudo blkid -s UUID -o value /dev/mmcblk1p1

# ── 硬件状态 ──────────────────────────────────────────
cat /sys/class/thermal/thermal_zone0/temp # 温度 ×1000
sensors
sudo mmc extcsd read /dev/mmcblk1 | grep -Ei 'life|pre_eol'
ip -br a
nmcli device status

16. 附录 B 本次实测数据

项目 值
镜像 Armbian Debian 13 trixie Minimal (CLI)
内核 6.18.56-current-rockchip64
U-Boot v2026.01(nanopi-r5c-rk3568_defconfig)
分区表 GPT,单 root 分区 100% ext4
安装前 TF 卡 /dev/mmcblk0,type=SD,29.5G,根分区 mmcblk0p1 29.2G
安装前 eMMC /dev/mmcblk1,type=MMC,28.9G,9 个分区(原厂 FriendlyWrt)
eMMC 原始容量 31037849600 字节(512B 扇区)
新根分区 UUID 82de9fba-****-****-****-************
安装耗时 21:34:11 → 21:35:33,1 分 22 秒
安装后根分区 /dev/mmcblk1p1,29G,已用 1.6G
网卡命名 enP1p17s0(UP,192.168.*.30)、enP2p33s0(DOWN)、wlp1s0(DOWN)
日志内存化 /var/log → zram1(50M),/var/log.hdd 在根分区
交换 zram0 1.9G

17. 参考链接

内容 链接
Armbian R5C 镜像页 https://armbian.com/boards/nanopi-r5c
安装到内部存储 https://docs.armbian.com/getting-started/install-to-internal-storage/
首次启动与登录 https://docs.armbian.com/getting-started/first-boot-and-login/
写入镜像 https://docs.armbian.com/getting-started/writing-the-image/
Armbian Imager https://imager.armbian.com
R5C 官方 Wiki(Maskrom / eMMC 烧写) https://wiki.friendlyelec.com/wiki/index.php/NanoPi_R5C
FriendlyElec 固件网盘 http://download.friendlyelec.com/NanoPiR5C
板级配置源码 https://github.com/armbian/build/blob/main/config/boards/nanopi-r5c.csc

记录日期:2026-10-17
设备:NanoPi R5C(RK3568B2 / 4GB / 32GB eMMC)
结果:✅ 系统已成功运行在 eMMC,单分区 29G,无失败服务单元