RK3588刷机救砖记录(晨芯时代)

前言

之前网上买了个rk3588板子,到手发现是拆机板,结果为了折腾把系统搞坏了,资料又没有,只知道原版使用的ophub维护的6.1.141内核,并且有保存这个板子之前运行的dtb

关于他的资料,在官网只能找到数据手册

下载rk官方的刷机软件和对应的驱动

资源下载汇总 | Radxa Docs

安装驱动

不做赘述

下载完整的镜像文件

ophub制作的基于debian12的armbian镜像,内核为6.1.141

https://github.com/ophub/amlogic-s9xxx-armbian/releases/download/Armbian_bookworm_arm64_server_2026.07/Armbian_26.08.0_rockchip_rock5b_bookworm_6.1.141_server_2026.07.16.img.gz

下载uboot相关

当前其实只用spl_loader就好了

https://github.com/ophub/u-boot/blob/main/u-boot/rockchip/rock5b/rk3588_spl_loader_v1.08.111.bin

解压

将解压后的镜像文件和spl_loader放到某个文件夹内

烧录

打开rkdevtool,板子的otg口接到电脑,然后按住recover按键,再给板子通电,然后会显示发现maskrom设备,将Loader行设为刚刚的spl_loader路径,第二行设置为下载的解压后的镜像路径,然后勾选强制执行,点击执行

启动

下载完后,板子重新上电,连接调试串口,发现内核启动失败,猜测是因为设备树原因

替换设备树

将镜像文件拷贝到ubuntu虚拟机

bash 复制代码
sudo apt install libguestfs-tools
mkdir change_dtb
cd change_dtb/
cp /mnt/hgfs/win_linux_share/Armbian_rock5b/Armbian_26.08.0_rockchip_rock5b_bookworm_6.1.141_server_2026.07.01.img ./
cp /mnt/hgfs/win_linux_share/Armbian_rock5b/rk3588-ad-c58.dtb ./

# 挂载镜像,拿到armbianEnv.txt
sudo guestfish -a ./Armbian_26.08.0_rockchip_rock5b_bookworm_6.1.141_server_2026.07.01.img <<EOF
run
mount /dev/sda1 /
download /armbianEnv.txt ./armbianEnv.tmp
EOF


# 修改armbianEnv.txt
sed -i 's/^fdtfile=.*/fdtfile=rockchip\/rk3588-ad-c58.dtb/' ./armbianEnv.tmp

# 更新到镜像
sudo guestfish -a ./Armbian_26.08.0_rockchip_rock5b_bookworm_6.1.141_server_2026.07.01.img <<EOF
run
mount /dev/sda1 /
copy-in ./rk3588-ad-c58.dtb /dtb/rockchip/
upload ./armbianEnv.tmp /armbianEnv.txt
EOF

再次启动

将修改后的镜像拷贝到windows,再次maskrom模式烧录,成功进入系统,但是帐号密码怎么输入都不对

原因 :ophub‑armbian第一次开机必须走完初始化向导(设置密码、新建普通用户),你直接 maskrom 烧写 eMMC,第一次初始化脚本被触发但没交互完成,账号密码状态错乱。

AI方案1

操作:U‑Boot 串口进入单用户模式重置 root 密码(直接复制粘贴)

  1. 板子重启,串口盯着输出,快速按空格 / 回车打断自动启动,进入 U‑Boot> 提示符
  2. 在 U‑Boot 输入下面这一整行,不要换行:

plaintext

复制代码
setenv bootargs "${bootargs} init=/bin/sh"
  1. 启动内核:

plaintext

复制代码
run distro_bootcmd

板子会启动,直接落到 # root shell(不需要密码)

  1. 现在根文件系统是只读,重新挂载为可读写:

bash

复制代码
mount -o remount,rw /
  1. 设置 root 新密码,比如 123456

bash

复制代码
passwd root

输入两遍新密码。

  1. 删除首次登录标记,避免下次开机又乱触发初始化:

bash

复制代码
rm -f /root/.not_logged_in_yet
rm -f /etc/firstrun
sync
  1. 重启:

bash

复制代码
exec /sbin/init

板子正常启动,现在用 root,密码填你刚刚设置的(123456)就可以登录。

AI方案2

问题根源

Ophub‑RK3588 的distro_bootcmdarmbianEnv.txt重新加载、覆盖你 U‑Boot 手动设置的bootargs ,所以你setenv bootargs init=/bin/sh写完,一跑distro_bootcmd直接被冲掉,依旧走到登录界面Armbian。

不能靠 U‑Boot 命令行临时加参数。有两条现实路径:

方案 1:修改镜像,把init=/bin/bash写进镜像内armbianEnv.txt的 extraargs(推荐)

回到你的虚拟机本地修改 img:

  1. download 镜像里armbianEnv.txt到本地

bash

复制代码
guestfish -a ./你的修改好.img <<EOF
run
mount /dev/sda1 /
download /armbianEnv.txt ./env.tmp
EOF
  1. 在虚拟机本地,给extraargs追加 init=/bin/bash

bash

复制代码
# 如果原来extraargs=rw rootwait
sed -i 's/^extraargs=.*/extraargs=rw rootwait init=\/bin\/bash/' env.tmp
  1. 写回镜像

bash

复制代码
guestfish -a ./你的修改好.img <<EOF
run
mount /dev/sda1 /
upload ./env.tmp /armbianEnv.txt
EOF

开机直接落到# root shell,不需要密码。

执行:

bash

复制代码
mount -o remount,rw /
passwd root
rm -f /root/.not_logged_in_yet
sync
# 非常关键:删掉init参数,不然下次开机还进shell!
sed -i 's/ init=\/bin\/bash//' /boot/armbianEnv.txt
exec /sbin/init

AI方案3

U‑Boot 里面先看有哪些 mmc 控制器

plaintext

复制代码
mmc list

输出类似:

plaintext

复制代码
mmc@fe2c0000: 1  (SD卡)
mmc@fe2e0000: 0  (eMMC板载)

eMMC 是 dev 0,不是 dev1。

手动拉起内核完整命令(复制粘贴,不要 run distro_bootcmd)

plaintext

复制代码
mmc dev 0
fatload mmc 0:1 0x08080000 Image
fatload mmc 0:1 0x0a000000 dtb/rk3588-ad-c58.dtb
setenv bootargs "root=UUID=1f1630d2-2c28-4de4-9c13-236e7b80a2ca rootfstype=ext4 rootwait console=ttyFIQ0,1500000n8 init=/bin/bash"
booti 0x08080000 - 0x0a000000

mmc 0:1:mmc0 (eMMC) 的第 1 分区就是 boot (FAT) 分区。

执行booti之后,直接进入# root shell,不需要密码。

shell 里面全套操作

bash

复制代码
mount -o remount,rw /
passwd root
rm -f /root/.not_logged_in_yet
rm -f /etc/firstrun
sync
exec /sbin/init

之后系统正常启动,root 用你刚设置的密码登录。

全部困境汇总

  1. 板子无 SD 卡插槽,只有 eMMC
  2. maskrom 烧完整 raw‑img,可以走到 ttyFIQ0 登录,但密码失效(首次初始化没跑完)。
  3. U‑Boot:run distro_bootcmd会加载 boot.scr,内部读取armbianEnv.txt直接覆盖 U‑Boot 命令行 setenv 的 bootargs ,所以 U‑Boot 临时设置init=/bin/bash完全无效。
  4. U‑Boot 手动fatload mmc 0:1 ...Unrecognized filesystem type(GPT 分区表导致 U‑Boot FAT 驱动解析失败,手动读文件不可用)。
  5. ❌不能在armbianEnv.txtextraargsinit=/bin/bash → bookworm 内核直接 panic,起不来。
  6. boot 分区没有 extlinux.conf;boot.scr 是二进制,不能直接改。

现在:不能从引导层注入 init=/bin/bash。只能去修改 rootfs 根文件系统里面的 shadow 密码文件。

最终有效方案

bash 复制代码
# 挂载镜像,从rootfs分区获取shadow文件
sudo guestfish -a Armbian_26.08.0_rockchip_rock5b_bookworm_6.1.141_server_2026.07.01.img <<EOF
run
mount /dev/sda2 /
download /etc/shadow ./shadow.tmp
EOF

# 修改
chmod 777 ./shadow.tmp
vim shadow.tmp // 删除加密字段
chmod 644 ./shadow.tmp

# 写入镜像
sudo guestfish -a Armbian_26.08.0_rockchip_rock5b_bookworm_6.1.141_server_2026.07.01.img <<EOF
run
mount /dev/sda2 /
upload ./shadow.tmp /etc/shadow
EOF

删掉这部分,就表示不要密码

将改后的镜像传到windows,重新使用maskrom模式烧录,重新启动,成功进入系统,无需密码

相关推荐
HRTOS20 小时前
HRTOS 4.0 驱动库:06_Storage 存储设备驱动——24C02 EEPROM与I²C驱动开发
c语言·驱动开发·嵌入式硬件·51单片机
KFCgrandpahhh1 天前
rk3576点灯
linux·驱动开发
HRTOS1 天前
HRTOS 4.0 正式发布:Driver Library 基础外设驱动模块介绍
驱动开发·单片机·嵌入式硬件·51单片机
HRTOS1 天前
HRTOS 4.0 Driver Library:03_Sensor 传感器驱动
驱动开发·单片机·嵌入式硬件·51单片机
Rsingstarzengjx1 天前
第二十六章 Linux 蜂鸣器实验笔记
linux·驱动开发·笔记·stm32·嵌入式硬件·stm32mp157
程序员无隅2 天前
从 Vibe Coding 到可控交付:用 Spec-Driven Development 驾驭 AI 编程 Agent
人工智能·驱动开发
小小工匠2 天前
半年之后,规格驱动开发(SDD)框架格局重排:从 +863% 到 +18% 的分化
驱动开发
kruptos2 天前
嵌入式 Linux 驱动开发:第一个内核模块怎么写?
linux·运维·驱动开发·嵌入式硬件
飞多学堂3 天前
每日开源硬件精选简报 2026-09-04
驱动开发·开源硬件·硬件开源·电子制作
lincats4 天前
大白话讲解Addy Osmani 的循环工程Loop Engineering工作流
人工智能·驱动开发·架构·prompt·状态模式·知识图谱