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模式烧录,重新启动,成功进入系统,无需密码

相关推荐
做一个AK梦6 小时前
测试驱动开发-TDD
驱动开发·tdd
恒锐丰-罗生1 天前
SS8103 芯片解析:45V 同步整流降压半桥恒流驱动控制器 大功率光源国产优选 告别低灰闪烁!
驱动开发·嵌入式硬件·硬件工程
小此方1 天前
Re:Linux系统篇(五十七)线程篇 · 十:基于环形缓冲的生产者消费者模型与信号量
linux·运维·驱动开发
芯片设计-曾工1 天前
YL1621在电池电量显示模块上的替代可行性评估
驱动开发·stm32·单片机·51单片机·硬件工程
木白CPP2 天前
Linux 驱动UART子系统源码分析
linux·运维·服务器·驱动开发·嵌入式硬件·开源软件
恒锐丰-罗生3 天前
小体积大驱动|LTK8833 双通道 H 桥电机驱动芯片,电池供电设备首选动力方案
驱动开发·嵌入式硬件·硬件工程
正点原子6 天前
【正点原子Linux连载】 第十章 pinctrl和gpio子系统实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
星马梦缘6 天前
“零一”智能硬件开发挑战赛 宣传稿
驱动开发·智能硬件·活动·培训·科协
小此方7 天前
Re:Linux系统篇(五十四)线程篇 · 七:互斥锁的底层实现原理:从硬件上下文、原子交换指令(Swap)到并发封装实战
linux·运维·驱动开发