
RK3568 这颗片子这两年是真的火从工控板、边缘计算盒子到各种定制终端到处都能看到它的身影。原厂和板卡厂商默认给的固件基本都是 Buildroot 构建的极简系统跑个单一应用没问题可一旦你想在上面装个包、跑个 Docker、搭个开发环境Buildroot 那套只读根文件系统加 BusyBox 的组合就开始处处掣肘了。把系统换成 Debian等于给这块板子解锁了完整的 apt 生态想装什么装什么开发调试的体验直接上一个台阶。但刷完 Debian 之后很多人会撞上第二个坑每次重启之前手动配的静态 IP 就没了又变回 DHCP 或者干脆没网。这篇就围绕 RK3568 从 Buildroot 换到 Debian 的完整刷机流程以及怎么把重启丢 IP这个毛病一次性根治把踩过的坑和验证过的配置都摊开讲清楚。1. 为什么值得从 Buildroot 换到 Debian1.1 Buildroot 的定位和它的天花板Buildroot 本质上是一个帮你从源码交叉编译出一整套根文件系统的构建框架它的设计哲学是精简、可控、体积小。板卡厂商用它做出来的固件通常只有几十兆启动快、占用少适合那种功能固定、不需要用户登录折腾的嵌入式产品。你拿到手的 RK3568 开发板出厂固件十有八九就是这套东西一个只读的 squashfs 或者 ext4 根分区加上 BusyBox 提供的基础命令再塞一个厂商自己的应用进去。问题就出在这个只读和精简上。Buildroot 默认的包管理能力几乎为零你想装个 Python 的第三方库、想用 apt 装个 nginx、想跑个容器基本都得回到宿主机上重新配置、重新编译、重新烧录。对于做产品定型的团队这没问题但对于需要频繁调试、需要灵活装软件的开发场景这套流程的迭代成本高得让人抓狂。我见过太多人为了在 Buildroot 上装一个 certbot 折腾一下午最后发现依赖链根本凑不齐。1.2 Debian 带来的完整包管理生态换成 Debian 之后最直观的变化就是apt能用了。apt update apt install这两条命令背后是 Debian 官方仓库里几万个已经编译好的软件包覆盖了从开发工具链到网络服务到桌面环境的几乎所有需求。你要装 certbot 申请证书、要装 Docker 跑容器、要装 Samba 做文件共享都是一条命令的事依赖关系 apt 自动帮你解决。更关键的是Debian 的软件包是持续维护的安全更新能通过apt upgrade直接拉取不用你自己去追上游源码。对于需要长期运行的设备来说这个维护成本的优势非常明显。RK3568 是四核 Cortex-A55 加 Mali-G52 的配置跑一个精简的 Debian 系统绰绰有余性能上完全撑得住。1.3 换系统前必须想清楚的三件事第一存储空间。Debian 最小化安装也要 1GB 以上加上你后续装的软件建议 eMMC 或者 SD 卡至少留 8GB。RK3568 板子一般有 eMMC 和 TF 卡两种启动介质刷之前确认好你打算刷到哪个上面。第二启动方式。RK3568 支持从 eMMC、SD 卡、USB 等多种介质启动具体走哪条路由板子上的启动模式跳线或者 eFuse 决定。刷机前一定要确认当前板子的启动顺序否则你刷完了发现根本没从新系统启动白忙活。第三网络配置方式。这就是本文要重点解决的重启丢 IP问题的根源。Debian 默认用 DHCP 自动获取地址如果你手动用ip addr add或者ifconfig配了静态地址这些配置只存在于内存里重启就没了。要持久化必须写进网络管理工具的配置文件里具体用哪个工具取决于你装的 Debian 镜像里带的是 systemd-networkd、NetworkManager 还是传统的 ifupdown。2. 刷机前的准备工作与镜像选择2.1 确认板子的启动介质和烧录模式RK3568 进入烧录模式的标准操作是按住板子上的 RECOVERY 或者 MASKROM 按键然后上电或者复位。MASKROM 模式是芯片内部固化的优先级最高任何情况下都能进LOADER 模式则需要板子上已经有一个可用的引导程序。实操中我建议直接用 MASKROM 模式最稳不会因为旧固件损坏而进不去。判断是否成功进入烧录模式最直接的办法是在 Linux 宿主机上跑lsusb看到2207:350a或者类似的 Rockchip 厂商 ID 就说明识别到了。Windows 下则是在设备管理器里看有没有出现 Rockusb Device。如果没识别到先换一根质量好的 USB 数据线很多莫名其妙的识别失败都是线材问题。2.2 Debian 镜像的获取与格式选择RK3568 的 Debian 镜像一般有两种来源板卡厂商提供的适配镜像或者社区维护的通用镜像。厂商镜像的好处是驱动适配到位尤其是 GPU、VPU 这些需要闭源固件的部分社区镜像的好处是更新及时、包更全。选择时优先看镜像的发布日期和内核版本内核太老的镜像在新板子上可能跑不起来。镜像格式上常见的有.img和.img.gz两种。.img是可直接烧录的原始镜像.img.gz是压缩过的烧录工具一般都能自动解压。如果你拿到的是.qcow2格式那是给虚拟机用的需要先转换成.img才能烧到板子上转换命令是qemu-img convert -f qcow2 -O raw input.qcow2 output.img。这一步很多人会忽略直接拿 qcow2 去烧工具报错还找不到原因。2.3 烧录工具的选型与驱动安装Linux 下推荐用rkdeveloptool这个开源命令行工具配合upgrade_tool使用。安装方式因发行版而异Ubuntu 下可以直接从源码编译也可以找现成的 deb 包。Windows 下则是瑞芯微官方的 RKDevTool图形界面对新手友好但要注意版本太老的版本可能不认新的 loader。驱动这块Linux 一般内核自带 rockusb 驱动插上就能识别Windows 需要手动装 Rockusb 驱动装完之后设备管理器里应该能看到 Rockusb Device。如果装完还是黄色感叹号试试禁用驱动签名强制或者换一个 USB 口前置面板的 USB 口供电不稳尽量插主板后置的。提示刷机前把板子上所有外设拔掉只留电源和 USB 数据线。外设干扰导致烧录失败的情况我遇到过不止一次尤其是接了串口调试线的时候。3. 从 Buildroot 到 Debian 的完整刷机流程3.1 备份原固件别嫌麻烦这一步能救命刷机之前强烈建议先把原厂的 Buildroot 固件完整备份出来。RK3568 的 eMMC 一般有 8GB 到 32GB全盘备份出来虽然大但万一新系统有问题你能一键刷回去不至于把板子变砖。用rkdeveloptool备份的命令大致是这样# 读取 eMMC 的全部内容到 backup.img sudo rkdeveloptool rl 0 0xFFFFFFFF backup.imgrl是 read LBA 的缩写第一个参数是起始扇区第二个是扇区数量0xFFFFFFFF表示读到末尾。备份出来的镜像大小等于 eMMC 容量8GB 的 eMMC 就是 8GB 的文件确保宿主机磁盘空间够。Windows 下用 RKDevTool 的话在高级功能里有读取 Flash的选项操作更直观但速度比命令行慢一些。3.2 擦除与分区理解 RK3568 的存储布局RK3568 的 eMMC 布局一般是这样的最前面是 GPT 分区表然后是 uboot、trust、misc、boot、rootfs 等分区。刷 Debian 镜像的时候镜像本身通常已经包含了完整的分区表和所有分区内容所以直接整盘写入即可不需要手动分区。但如果你是从 Buildroot 换过来有时候会遇到分区表不兼容的问题表现为刷完之后启动卡在 uboot 或者直接进不去。这时候需要先擦除整个 eMMC再写入新镜像。擦除命令# 擦除整个 eMMC sudo rkdeveloptool efef是 erase flash 的缩写执行完 eMMC 就变成全空状态然后重新进入 MASKROM 模式再写入 Debian 镜像。3.3 写入 Debian 镜像并验证写入镜像的命令# 写入镜像到 eMMC sudo rkdeveloptool wl 0 debian-rk3568.imgwl是 write LBA从扇区 0 开始写。写入完成后执行sudo rkdeveloptool rd复位设备板子就会从新写入的系统启动。第一次启动 Debian 会比较慢因为要做文件系统检查和初始化。如果串口有输出能看到内核启动日志一路刷过去最后停在登录提示。默认的登录账号密码一般是root/root或者debian/debian具体看镜像提供方的说明。如果串口没输出先检查波特率RK3568 的调试串口通常是 1500000不是常见的 115200这个坑很多人踩。3.4 首次启动后的基础配置登录进去之后先做几件事更新软件源、设置时区、改默认密码。软件源建议换成国内镜像速度会快很多。Debian 12Bookworm的源配置在/etc/apt/sources.list把它改成清华或者中科大的镜像地址# 备份原配置 cp /etc/apt/sources.list /etc/apt/sources.list.bak # 替换为清华源 sed -i s|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list # 更新索引 apt update时区设置用dpkg-reconfigure tzdata选 Asia/Shanghai。默认密码一定要改passwd root走一遍别让设备裸奔在网络上。4. 根治重启丢 IP网络配置持久化4.1 先搞清楚你的 Debian 用的是哪套网络管理这是解决问题的第一步也是最容易被跳过的一步。Debian 上可能同时存在多套网络管理机制你得先确认当前生效的是哪一套否则配置写错地方重启照样丢。判断方法很简单看这几个服务的状态# 看 systemd-networkd 是否在跑 systemctl status systemd-networkd # 看 NetworkManager 是否在跑 systemctl status NetworkManager # 看 networking 服务是否在跑 systemctl status networking哪个是active (running)基本就是它在管网络。RK3568 的 Debian 镜像如果是精简版大概率用的是 systemd-networkd如果带了桌面环境可能是 NetworkManager。两者配置文件的位置和格式完全不同混用会导致配置不生效。4.2 systemd-networkd 下的静态 IP 配置如果确认是 systemd-networkd 在管配置文件放在/etc/systemd/network/目录下文件名一般以.network结尾。假设你的网卡叫eth0创建一个10-eth0.network[Match] Nameeth0 [Network] Address192.168.1.100/24 Gateway192.168.1.1 DNS223.5.5.5 DNS8.8.8.8这里有几个细节要注意。Address后面的/24是子网掩码的 CIDR 写法不能省省了会按 /32 处理导致同网段都 ping 不通。Gateway只能有一个多个网关会导致路由表混乱。DNS可以写多个按顺序查询。写完配置后重启服务生效systemctl restart systemd-networkd验证是否生效用ip addr show eth0看地址用ip route看默认路由用ping测外网连通性。三个都对了再reboot一次确认重启后配置还在。4.3 NetworkManager 下的静态 IP 配置如果是 NetworkManager 在管用nmcli命令配置最方便它会自动把配置持久化到/etc/NetworkManager/system-connections/下# 查看连接名称 nmcli connection show # 修改指定连接的 IP 配置 nmcli connection modify Wired connection 1 \ ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 223.5.5.5,8.8.8.8 # 重新激活连接 nmcli connection up Wired connection 1ipv4.method manual是关键它告诉 NetworkManager 不要用 DHCP用你指定的静态配置。如果漏了这一句即使写了地址NetworkManager 还是可能优先走 DHCP。4.4 传统 ifupdown 的配置方式有些精简 Debian 镜像还在用传统的 ifupdown配置文件是/etc/network/interfaces。这种配置方式最老但也最稳定auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 223.5.5.5 8.8.8.8注意dns-nameservers这一行它需要resolvconf包的支持才能生效如果没装这个包DNS 配置不会写进/etc/resolv.conf表现为能 ping 通 IP 但域名解析不了。装一下apt install resolvconf就行。4.5 三套配置方式的对比与选择建议配置方式配置文件位置适用场景持久化可靠性systemd-networkd/etc/systemd/network/*.network无桌面精简系统高NetworkManager/etc/NetworkManager/system-connections/带桌面环境高ifupdown/etc/network/interfaces老式精简系统中依赖 resolvconf选择原则很简单系统里哪套在跑就用哪套不要为了用某个工具去装另一套多套网络管理共存是 IP 配置混乱的头号原因。我见过有人 systemd-networkd 和 NetworkManager 同时开着结果 IP 地址一会儿一个样排查了半天才发现是两个服务在抢网卡控制权。注意配置静态 IP 之前先确认这个 IP 没有被网络里其他设备占用。用arping -I eth0 192.168.1.100探测一下有回应说明被占了换一个。IP 冲突导致的网络时通时断排查起来非常折磨人。5. 刷机后常见问题与排查思路5.1 启动卡在 uboot 或者黑屏无输出这种情况八成是分区表或者引导程序不匹配。先确认镜像是不是完整写入的用rkdeveloptool rl把写入的内容读回来和原镜像做 md5 对比不一致说明写入过程有问题重新擦除再写。如果镜像没问题检查串口输出。RK3568 的调试串口参数是 1500000 波特率、8 数据位、无校验、1 停止位。串口工具里波特率设错看到的就是一堆乱码或者什么都没有。确认串口线接的是板子上标注的 debug uart不是普通的 uart。5.2 系统起来了但网卡不识别先ip link看有没有 eth0 这个接口。如果没有说明内核没加载对应的网卡驱动。RK3568 的千兆网卡一般是 RTL8211 或者类似的 PHY驱动应该在标准内核里就有。检查设备树里网卡节点有没有被正确使能/proc/device-tree下面找对应的节点看看 status 是不是 okay。如果接口有但起不来dmesg | grep eth看内核日志常见的是 PHY 协商失败或者时钟配置不对。这种情况多半是设备树的问题需要对照板子的原理图确认 PHY 地址和复位引脚配置。5.3 apt 更新报错或速度极慢先确认网络通不通ping mirrors.tuna.tsinghua.edu.cn看能不能解析和连通。如果 DNS 有问题检查/etc/resolv.conf里有没有有效的 nameserver。如果网络通但 apt 还是报错看具体错误信息。常见的有 GPG 密钥过期、源地址写错、依赖冲突。GPG 问题用apt-key adv或者更新/etc/apt/trusted.gpg.d/下的密钥文件解决。源地址写错的话注意 Debian 12 的源里main contrib non-free后面要加non-free-firmware这是 Bookworm 的新变化不加的话有些固件包找不到。5.4 重启后 IP 又变回 DHCP 的排查链路这个问题我在不同板子上遇到过好几次排查思路可以固定下来第一步确认配置文件写对了地方。systemctl status看哪个网络服务在跑配置文件就写到对应的目录。第二步确认配置文件语法正确。systemd-networkd 的配置可以用systemd-analyze verify检查NetworkManager 的配置可以用nmcli connection show看是否被正确加载。第三步确认没有其他服务在抢控制权。systemctl list-units | grep -E network|Network把所有网络相关的服务列出来把不用的 disable 掉。第四步看启动日志。journalctl -u systemd-networkd -b看本次启动的网络服务日志里面会明确告诉你它加载了哪些配置、为什么没生效。按这个链路走一遍基本都能定位到问题。我遇到最多的情况是配置文件放错了目录或者文件名不符合规范systemd-networkd 要求文件名以数字开头比如10-eth0.network纯eth0.network有时候不生效。5.5 串口登录和 SSH 登录的配置刷完 Debian 后串口登录一般默认就开着但 SSH 可能需要手动装和开。apt install openssh-server装完systemctl enable --now ssh启动并设置开机自启。然后确认防火墙没挡 22 端口Debian 默认没装防火墙但如果你自己装了 ufw 或者 iptables 规则记得放行。SSH 登录不上的话先ss -tlnp | grep 22看 sshd 有没有在监听。没监听就是服务没起来看journalctl -u ssh的日志。监听了但连不上检查网络连通性和防火墙规则。6. 一些让系统更好用的收尾配置6.1 换国内源并处理 Bookworm 的源格式变化前面提过Debian 12 的源里多了non-free-firmware这个组件完整的源配置应该是这样deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware少写non-free-firmware的话像无线网卡固件、GPU 固件这些包就装不上表现为硬件识别不了或者功能不全。6.2 装 certbot 申请证书的注意事项在 RK3568 这种 ARM 设备上跑 certbot用apt install certbot装的是系统包版本可能比较老。如果要用 DNS 验证方式申请泛域名证书还需要装对应的插件比如阿里云 DNS 的插件。申请命令大致是certbot certonly --manual --preferred-challenges dns -d example.com -d *.example.com手动 DNS 验证需要你在域名解析里加一条 TXT 记录certbot 会提示你加什么内容。加完等生效再回车继续。证书默认放在/etc/letsencrypt/live/example.com/下续期用certbot renew可以配个 cron 或者 systemd timer 自动跑。6.3 桌面环境按需安装如果板子要接显示器当轻量桌面用可以装个轻量桌面环境。Xfce 或者 LXQt 在 RK3568 上跑起来比较流畅GNOME 和 KDE 就有点吃力了。装 Xfce 的命令apt install xfce4 xfce4-goodies lightdm装完systemctl set-default graphical.target设置默认进图形界面。中文输入法的话装 fcitx5 加拼音输入法配置一下环境变量GTK_IM_MODULE、QT_IM_MODULE、XMODIFIERS不然输入法在部分应用里调不出来。6.4 系统备份刷好之后立刻做一次系统配置好之后强烈建议立刻做一次全盘备份。方法和刷机前备份原固件一样用rkdeveloptool rl把整个 eMMC 读出来存好。这样以后系统玩坏了直接刷回去不用从头再配一遍。这个习惯能帮你省下大量重复劳动的时间。备份出来的镜像可以压缩一下gzip或者zstd都行8GB 的镜像压缩完可能就 2GB 左右存起来不占地方。7. 关于 IP 纯净度和网络环境的一点经验最后聊一个容易被忽略的点。设备接入网络后如果要做对外服务或者跑一些需要公网访问的应用IP 的纯净度会影响可用性。所谓 IP 纯净度简单说就是这个 IP 有没有被标记过异常行为、有没有进过各种黑名单。共享出口或者动态分配的公网 IP纯净度往往不理想表现为某些服务访问受限或者被要求额外验证。排查 IP 状态可以用一些公开的 IP 信誉查询服务输入 IP 看有没有被列入黑名单。如果发现 IP 有问题联系网络管理员换一个或者用固定的、信誉良好的出口。对于 RK3568 这种做边缘节点的设备网络环境的稳定性直接决定了它能不能长期可靠运行值得在部署前花点时间确认。另外局域网内做静态 IP 规划的时候建议把地址段划分清楚DHCP 池用一个段静态设备用一个段网关和服务器用一个段互不重叠。这样以后加设备、排查冲突都方便。我一般会把静态设备的地址记在一个表格里IP、MAC、设备名、用途都写上时间长了也不会乱。整套流程走下来RK3568 从 Buildroot 换到 Debian 大概需要半小时到一小时主要时间花在镜像写入和首次启动初始化上。网络配置持久化那部分只要选对了工具、写对了配置文件重启丢 IP 的问题就不会再出现。真正花时间的往往是排查那些意料之外的兼容性问题所以刷机前的备份和刷机后的验证这两步千万别省。