我把一台80美元的RK3562安卓平板变成了Debian Linux工作站

Hacker News Top 工具

摘要

一个构建系统和预发布的Debian 12映像,适用于Doogee U10安卓平板(Rockchip RK3562),无需解锁引导加载程序即可实现完整的Linux功能,从零开始逆向工程。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/17 15:48

tech4bot/rk3562deb

源仓库:https://github.com/tech4bot/rk3562deb

rkdebian — 适用于 Doogee U10(RK3562)的 Debian 12

下载预发布镜像

当前公开构建版本(预发布,2026年5月14日):

  • 发布页面:tech4bot/rk3562deb prerelease-14052026 (https://github.com/tech4bot/rk3562deb/releases/tag/prerelease-14052026)
  • 直接镜像下载:rk3562-debian.img.xz (https://github.com/tech4bot/rk3562deb/releases/download/prerelease-14052026/rk3562-debian.img.xz)
  • 视频演示:YouTube (https://youtu.be/DbX13_mahKc?si=Ba9u2xqAmoXM7nYb) 在 Doogee U10 平板上运行完整的 Debian 12 Bookworm — 无需解锁引导加载程序。 从 SD 卡启动,移除 SD 卡即可恢复原生 Android。内部存储不受影响。 完全从头逆向工程 — 无 BSP、无厂商文档、无官方支持。 借助 ClaudeCodexAntigravity (Google Gemini),以 Firefly RK3562 (https://github.com/Firefly-rk-linux) 开源仓库为起点构建而成。

概述

rkdebian 是一个构建系统,可为搭载 Rockchip RK3562 SoC 的 Doogee U10 Android 平板生成完整、可启动的 Debian 12 Bookworm 镜像。生成的镜像写入 SD 卡。插入 SD 卡并开机,平板即启动 Debian。移除 SD 卡后,平板从内部 eMMC 正常启动 Android。


硬件:Doogee U10

组件详细说明
SoCRockchip RK3562 (4× Cortex-A53 @ 2.0 GHz)
NPU1× Rockchip NPU 核心(可用于 RKLLM 推理)
内存4 GB LPDDR4
存储128 GB eMMC (Android) + SD 卡 (Debian)
屏幕10.1英寸 DSI 面板,1280×800
PMICRK817

已支持功能

功能状态
显示/面板✅ 完整
触摸屏✅ 完整(gsl3673,10点多点触控)
Wi-Fi✅ 完整(Seekwave EA6621Q)
蓝牙✅ 完整
扬声器/音频输出✅ 完整
麦克风✅ 完整
3D 加速⚠️ 部分支持(Panfrost,OpenGL ES 可用)
NPU (RKLLM / rknn-llm)✅ 可用(RK3562 支持一个 NPU 核心,num_npu_core=1
加速度计✅ 完整(SC7A20 / DA223)
闪光灯(后置 LED)✅ 完整(原生 Phosh 顶部菜单手电筒开关 + rk-flashlightctl 亮度控制)
电源按键行为✅ 完整(短按释放时休眠,长按 ≥3s 弹出关机对话框)
锁屏方向记忆✅ 完整(锁屏保留上次平板方向,包括横屏)
摄像头⚠️ 部分支持(前置 s5k5e8 + 后置 s5k4h5yb 管线可用;色彩调校仍需校准)
电池/充电✅ 完整(RK817 PMIC)
SD 卡启动✅ 完整
USB OTG✅ 完整

预装应用

应用说明
Firefox ESR预装网页浏览器
Chromium预装网页浏览器(镜像可用时安装)
FreeTube默认通过 Flatpak 从 Flathub 安装(设置 RKDEBIAN_PREINSTALL_FREETUBE=0 可禁用,以减小镜像体积)
Drawing触控友好的绘画应用(镜像可用时安装)
Snapshot相机应用(镜像可用时安装)
Dolphin文件管理器
Plasma Discover应用商店/软件中心
Okular文档/PDF 查看器
Gedit文本编辑器
Pavucontrol音频控制
Terminal首选 kgx,备选 gnome-terminal
Flatpak + Flathub默认启用,用于安装应用

NPU LLM (RK3562)

本平板镜像支持使用 Rockchip 的 RKLLM 堆栈在 RK3562 NPU 上进行本地 LLM 推理。

使用的 NPU 软件

  • airockchip/rknn-llm (https://github.com/airockchip/rknn-llm) — 运行时、RKLLM 工具包、演示应用(llm_demo
  • airockchip/rknn-toolkit2 (https://github.com/airockchip/rknn-toolkit2) — RKNN 转换/工具链依赖,供 RKLLM 工作流使用

使用的模型转换配置

  • 目标平台:rk3562
  • 量化:W8A8
  • NPU 核心数:num_npu_core=1 (RK3562 支持一个 NPU 核心)
  • 优化级别:0(为兼容性/稳定性选择)

示例转换命令(主机 PC):

python3 convert_qwen_rk3562.py \
    --model-dir ./models/Qwen3-0.6B \
    --target-platform rk3562 \
    --quantized-dtype W8A8 \
    --optimization-level 0 \
    --num-npu-core 1 \
    --output ./out/Qwen3-0.6B_W8A8_RK3562_opt0.rkllm

基准测试(在平板上,NPU 路径)

2026年4月6日 上测量,使用:

  • 提示词:Output exactly 300 English words about arithmetic speed testing do not include punctuation and do not stop early
  • MAX_NEW_TOKENS=64, MAX_CONTEXT_LEN=1024
  • 运行程序:~/npu-test/xcompile/demo_Linux_aarch64/run_llm_rk3562.sh

使用的命令:

# Qwen3-0.6B(首次运行包含 fix_freq)
USE_FIX_FREQ=1 RKLLM_LOG_LEVEL=1 PROMPT="Output exactly 300 English words about arithmetic speed testing do not include punctuation and do not stop early" \
    ./run_llm_rk3562.sh ~/npu-test/models/Qwen3-0.6B_W8A8_RK3562_opt0.rkllm 64 1024

# Qwen2.5-1.5B
USE_FIX_FREQ=0 RKLLM_LOG_LEVEL=1 PROMPT="Output exactly 300 English words about arithmetic speed testing do not include punctuation and do not stop early" \
    ./run_llm_rk3562.sh ~/npu-test/models/Qwen2.5-1.5B-Instruct_W8A8_RK3562.rkllm 64 1024

预热运行平均值(第2-3次运行):

模型初始化时间 (ms)预填充 (tok/s)生成 (tok/s)
Qwen3-0.6B_W8A8_RK3562_opt01788.7057.624.92
Qwen2.5-1.5B-Instruct_W8A8_RK35624800.7642.782.18

结果:在本 RK3562 平板上,Qwen3-0.6B 在本地 NPU 推理中明显更快。


已知问题

  • 平板关机数小时后,电池可能显示 0%
    • rk-battery-gauge-fix.service 在启动时会修正此问题。
    • 如果平板未完全断电,请重启一次;下次启动时电池电量应恢复正确。
  • 前置 (s5k5e8) 和后置 (s5k4h5yb) 摄像头的预览/拍摄功能可用,但颜色略有偏差,需要额外的 ISP 校准。

前提条件

主机: x86-64 Linux(推荐 Debian/Ubuntu)

安装所有构建依赖:

sudo apt-get install \
    git make gcc-aarch64-linux-gnu \
    bc bison flex device-tree-compiler \
    genimage wget tar mtools \
    xz-utils \
    debootstrap qemu-user-static \
    e2fsprogs

构建

完整构建(推荐)

构建 U-Boot、内核、Debian rootfs,并生成可直接刷写的 SD 卡镜像:

./build.sh all

带完整日志输出到文件(tee),同时保留实际构建退出状态:

set -o pipefail
./build.sh all 2>&1 | tee build.log

./build.sh 不带目标参数时默认执行 all。最终镜像写入:

  • out/rk3562-debian.img.xz — 压缩后的最终镜像(推荐)
  • output/update/update.img.xz — 压缩的 Firefly 兼容路径

兼容/原始镜像也保留:

  • out/rk3562-debian.img
  • output/update/update.img

CLI 使用和选项

./build.sh [options] {check|lunch|uboot|extboot|updateimg|updatepkg|compile|rootfs|image|all}
选项描述
--ui-sessionphosh烧录到镜像中的会话配置文件
--gpu-stackmali, panfrost选择用户空间/内核图形栈
--display-serverauto, wayland, x11桌面后端偏好,传递给 rootfs 构建
--cpu-governor例如 performance, schedutil电源调优服务使用的基础调控器
--force-clean-rootfs标志强制完全重建 rootfs(等同于 RKDEBIAN_FORCE_CLEAN_ROOTFS=1
--no-force-clean-rootfs标志显式禁用强制 rootfs 清理
-h, --help标志显示用法

单个构建目标

命令作用
./build.sh check验证所有构建依赖是否已安装
./build.sh lunch选择构建配置(defconfig)
./build.sh uboot仅编译 U-Boot
./build.sh extboot仅编译 Linux 内核
./build.sh rootfs仅构建 Debian 12 rootfs,然后验证请求的构建配置文件标记
./build.sh compile构建 U-Boot + 内核(跳过 rootfs 和镜像)
./build.sh image从已有构件组装最终 SD 卡镜像(含 rootfs 配置文件验证)
./build.sh updateimg旧版镜像组装路径(SDK 兼容);打包镜像而不运行配置文件验证
./build.sh updatepkgout/rootfs + out/boot/* 创建离线更新 tarball(output/update/update.tar.gz
./build.sh all完整的端到端构建(默认)

imageupdatepkg 需要已有的构建构件(out/rootfs、内核/DTB 和启动配置文件)。


环境变量

可在运行 build.sh 前设置这些变量来控制构建行为:

Rootfs

变量默认值描述
RKDEBIAN_FORCE_CLEAN_ROOTFS0设为 1 以擦除并完全重新构建 Debian rootfs。在不同镜像配置文件间切换时有用,可避免遗留包残留。
ROOTFS_IMAGE_SIZEauto覆盖 rootfs 分区大小(例如 4G, 3584M)。默认情况下,大小根据实际 rootfs 使用量加上余量自动计算。
ROOTFS_HEADROOM_MB512使用自动大小时,在实际 rootfs 使用量基础上增加的空闲空间余量(MB)。
ROOTFS_MIN_MB2560使用自动大小时,rootfs 镜像的最小大小(MiB)。
RKDEBIAN_DISPLAY_SERVERwayland桌面栈选择的会话后端偏好(wayland, x11, 或 auto)。Phosh 镜像默认使用 Wayland。
RKDEBIAN_UI_SESSIONphosh在 LightDM 中自动登录的 UI 会话。当前支持的值:phosh
RKDEBIAN_GPU_STACKmali要构建的 GPU 栈:mali(厂商用户空间)或 panfrost(Mesa/Panfrost,无 libmali)。
RKDEBIAN_CPU_GOVERNORperformance启动时使用的基础 CPU 调控器,也是 Phosh balanced 模式的默认映射。
RKDEBIAN_MALI_GBM_PROVIDERvendor仅 Mali 选项:vendor 保留 blob 包中的 mali/libgbm.so.1(默认),debian 将其覆盖为 Debian 的 libgbm.so.1 以进行兼容性测试。
RKDEBIAN_PREINSTALL_FREETUBE1设为 0 以跳过预装 FreeTube,大幅减小镜像体积。
RKDEBIAN_MINIMIZE_IMAGE0设为 1 以激进地缩小体积(删除非英语区域,以及 /usr/share/doc/usr/share/help/usr/share/man/usr/share/info 和未使用的 Flatpak 对象)。

内核

变量默认值描述
RKDEBIAN_MAKE_THREADSauto覆盖内核构建并行度。默认使用内存安全值(min(nproc, RAM_GiB/2)),以减少低内存主机上随机的 cc1/drivers 构建失败。
RKDEBIAN_KEEP_OVERLAY_PMIC_PATCHES0设为 1 以使用覆盖 PMIC 驱动(rk808.c, rk817_battery.c, rk817_charger.c)而非主线内核版本。

示例

# 强制清理重建 rootfs
RKDEBIAN_FORCE_CLEAN_ROOTFS=1 ./build.sh all

# 使用 CLI 标志相同效果
./build.sh all --force-clean-rootfs

# 强制清理 rootfs 重建并固定 4GB rootfs 分区
RKDEBIAN_FORCE_CLEAN_ROOTFS=1 ROOTFS_IMAGE_SIZE=4G ./build.sh all

# 仅构建 rootfs,强制清理
RKDEBIAN_FORCE_CLEAN_ROOTFS=1 ./build.sh rootfs

# 仅重新构建镜像(U-Boot 和内核已构建)
./build.sh image

# 仅构建内核
./build.sh extboot

# 内核构建时保留覆盖 PMIC 补丁
RKDEBIAN_KEEP_OVERLAY_PMIC_PATCHES=1 ./build.sh extboot

# 强制使用 Wayland 桌面镜像进行测试
./build.sh all --display-server=wayland

# 显式禁用强制清理(在脚本化运行中有用)
./build.sh all --no-force-clean-rootfs

# 覆盖 Phosh balanced 模式映射的基础调控器
RKDEBIAN_CPU_GOVERNOR=schedutil ./build.sh all

# 显示 CLI 用法和目标列表
./build.sh --help

# 在 Mesa/Panfrost 上构建 Phosh 镜像(强烈建议清理 rootfs)
./build.sh all --ui-session=phosh --gpu-stack=panfrost --force-clean-rootfs

# Mali 栈并使用 Debian libgbm 覆盖(仅用于兼容性测试)
RKDEBIAN_MALI_GBM_PROVIDER=debian ./build.sh all --ui-session=phosh --gpu-stack=mali --force-clean-rootfs

# 面向体积优化的构建,便于上传至 GitHub
RKDEBIAN_FORCE_CLEAN_ROOTFS=1 RKDEBIAN_MINIMIZE_IMAGE=1 RKDEBIAN_PREINSTALL_FREETUBE=0 ./build.sh all

# 面向体积优化的构建,同时保留默认的 FreeTube 预装
RKDEBIAN_FORCE_CLEAN_ROOTFS=1 RKDEBIAN_MINIMIZE_IMAGE=1 RKDEBIAN_PREINSTALL_FREETUBE=1 ./build.sh all

当更改 RKDEBIAN_UI_SESSIONRKDEBIAN_GPU_STACK 时,请使用 --force-clean-rootfs 以避免遗留包残留。

Phosh 电源模式映射

镜像包含 rk-power-profile-sync.service,它将 Phosh 电源模式(power-profiles-daemon)映射到设备上的 cpufreq 策略:

  • balanced -> 调控器使用 RKDEBIAN_CPU_GOVERNOR(默认 performance),最大频率上限 100%
  • power-saver -> 调控器 powersave,最大频率上限 65%
  • performance(如果硬件暴露) -> 调控器 performance,最大频率上限 100%

可在设备上的 /etc/default/rk-power-profile-map 中调整映射。

Phosh 用户体验集成

  • 后置摄像头闪光灯作为 LED camera:flash 暴露,因此 Phosh 显示原生顶部菜单手电筒图标。
  • rk-flashlightctl 支持开关和强度控制(set 0..100)用于后置 LED。
  • rk-powerkey-longpress.service 拥有硬件电源键策略:
    • 短按(<3s)-> 按键释放时挂起
    • 长按(>=3s)-> 标准 GNOME 关机对话框
    • logind/GNOME 触发的按键默认动作被禁用,以避免按键按下时立即休眠
  • 锁屏方向从上一次活动的平板方向保留,因此当平板处于横屏时,唤醒/锁定不会强制转为竖屏。

安全的 Phosh 会话测试(在设备上)

镜像包含 rk-session-failsafe.timer,它在启动后 5 分钟检查是否有危险的会话测试仍处于待命状态。

# 在重启进入危险的会话测试前,先行设置回滚机制
sudo install -d /var/lib/rk-session-failsafe
sudo touch /var/lib/rk-session-failsafe/armed
sudo reboot

行为:

  • 如果 Phosh 正常运行,看门狗自动解除待命状态,不执行任何操作。
  • 如果会话启动失败,看门狗恢复 LightDM + Phosh 自动登录并重启。

OTA 更新(在设备上)

一旦平板运行 Debian,无需重新刷写 SD 卡即可应用更新。

在主机上构建更新包:

./build.sh all
# 或仅构建镜像后构建更新包
./build.sh image && ./build.sh updatepkg

这将生成 output/update/update.tar.gz

将其复制到平板(通过 USB、SSH 或任何文件管理器)并放入以下收件箱目录之一:

路径说明
/home/chaos/update/主要放置位置
/update/pending/备用放置位置

下次重启时,rk-apply-update 服务会自动检测最新的 *.tar.gz*.tgz 包,应用 rootfs 和启动载荷,然后重启以完成更新。也会检查旧版兼容路径 /update/update.tar.gz

包归档行为:

  • 成功应用的包移至 /update/applied/
  • 无效/解压失败的包移至 /update/failed/
  • 已应用过的包(相同 SHA-256)移至 /update/duplicate/

更新进度和错误记录在 /var/log/rk-update.log

如果包应用失败(归档损坏、布局错误),它会被移至 /update/failed/,系统正常启动。


刷写 SD 卡

构建成功后,将压缩镜像刷写到 SD 卡:

# 将 /dev/sdX 替换为你的 SD 卡设备(使用 lsblk 检查)
xz -dc out/rk3562-debian.img.xz | sudo dd of=/dev/sdX bs=4M status=progress conv=fsync

警告: 请仔细确认设备路径。写入错误的设备将覆盖你的数据。

相似文章

Radxa Dragon Q8B:伪装成SBC的笔记本电脑?

Hacker News Top

Radxa 发布了 Dragon Q8B 单板计算机,搭载高通骁龙 8cx Gen 3 处理器,最高支持 32GB 内存。早期基准测试显示其性能超越 Raspberry Pi 5,但软件生态仍处于发展阶段。

我的2025年高端Linux PC 🐧

Michael Stapelberg

一篇关于在2025年组装高端Linux PC的详细博客文章,包括组件选择、设置以及故障排除有问题的Intel CPU。

用 x86_64 汇编写成的 Linux 桌面

Lobsters Hottest

一位开发者借助 Claude Code,用纯 x86_64 汇编重建了完整的 Linux 桌面栈——从 shell、终端、窗口管理器到各种工具,实现微秒级启动,并延长数小时续航。