我把一台80美元的RK3562安卓平板变成了Debian Linux工作站
摘要
一个构建系统和预发布的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、无厂商文档、无官方支持。 借助 Claude、Codex 和 Antigravity (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
| 组件 | 详细说明 |
|---|---|
| SoC | Rockchip RK3562 (4× Cortex-A53 @ 2.0 GHz) |
| NPU | 1× Rockchip NPU 核心(可用于 RKLLM 推理) |
| 内存 | 4 GB LPDDR4 |
| 存储 | 128 GB eMMC (Android) + SD 卡 (Debian) |
| 屏幕 | 10.1英寸 DSI 面板,1280×800 |
| PMIC | RK817 |
已支持功能
| 功能 | 状态 |
|---|---|
| 显示/面板 | ✅ 完整 |
| 触摸屏 | ✅ 完整(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_opt0 | 1788.70 | 57.62 | 4.92 |
Qwen2.5-1.5B-Instruct_W8A8_RK3562 | 4800.76 | 42.78 | 2.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.imgoutput/update/update.img
CLI 使用和选项
./build.sh [options] {check|lunch|uboot|extboot|updateimg|updatepkg|compile|rootfs|image|all}
| 选项 | 值 | 描述 |
|---|---|---|
--ui-session | phosh | 烧录到镜像中的会话配置文件 |
--gpu-stack | mali, panfrost | 选择用户空间/内核图形栈 |
--display-server | auto, 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 updatepkg | 从 out/rootfs + out/boot/* 创建离线更新 tarball(output/update/update.tar.gz) |
./build.sh all | 完整的端到端构建(默认) |
image 和 updatepkg 需要已有的构建构件(out/rootfs、内核/DTB 和启动配置文件)。
环境变量
可在运行 build.sh 前设置这些变量来控制构建行为:
Rootfs
| 变量 | 默认值 | 描述 |
|---|---|---|
RKDEBIAN_FORCE_CLEAN_ROOTFS | 0 | 设为 1 以擦除并完全重新构建 Debian rootfs。在不同镜像配置文件间切换时有用,可避免遗留包残留。 |
ROOTFS_IMAGE_SIZE | auto | 覆盖 rootfs 分区大小(例如 4G, 3584M)。默认情况下,大小根据实际 rootfs 使用量加上余量自动计算。 |
ROOTFS_HEADROOM_MB | 512 | 使用自动大小时,在实际 rootfs 使用量基础上增加的空闲空间余量(MB)。 |
ROOTFS_MIN_MB | 2560 | 使用自动大小时,rootfs 镜像的最小大小(MiB)。 |
RKDEBIAN_DISPLAY_SERVER | wayland | 桌面栈选择的会话后端偏好(wayland, x11, 或 auto)。Phosh 镜像默认使用 Wayland。 |
RKDEBIAN_UI_SESSION | phosh | 在 LightDM 中自动登录的 UI 会话。当前支持的值:phosh。 |
RKDEBIAN_GPU_STACK | mali | 要构建的 GPU 栈:mali(厂商用户空间)或 panfrost(Mesa/Panfrost,无 libmali)。 |
RKDEBIAN_CPU_GOVERNOR | performance | 启动时使用的基础 CPU 调控器,也是 Phosh balanced 模式的默认映射。 |
RKDEBIAN_MALI_GBM_PROVIDER | vendor | 仅 Mali 选项:vendor 保留 blob 包中的 mali/libgbm.so.1(默认),debian 将其覆盖为 Debian 的 libgbm.so.1 以进行兼容性测试。 |
RKDEBIAN_PREINSTALL_FREETUBE | 1 | 设为 0 以跳过预装 FreeTube,大幅减小镜像体积。 |
RKDEBIAN_MINIMIZE_IMAGE | 0 | 设为 1 以激进地缩小体积(删除非英语区域,以及 /usr/share/doc、/usr/share/help、/usr/share/man、/usr/share/info 和未使用的 Flatpak 对象)。 |
内核
| 变量 | 默认值 | 描述 |
|---|---|---|
RKDEBIAN_MAKE_THREADS | auto | 覆盖内核构建并行度。默认使用内存安全值(min(nproc, RAM_GiB/2)),以减少低内存主机上随机的 cc1/drivers 构建失败。 |
RKDEBIAN_KEEP_OVERLAY_PMIC_PATCHES | 0 | 设为 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_SESSION 或 RKDEBIAN_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的笔记本电脑?
Radxa 发布了 Dragon Q8B 单板计算机,搭载高通骁龙 8cx Gen 3 处理器,最高支持 32GB 内存。早期基准测试显示其性能超越 Raspberry Pi 5,但软件生态仍处于发展阶段。
我的2025年高端Linux PC 🐧
一篇关于在2025年组装高端Linux PC的详细博客文章,包括组件选择、设置以及故障排除有问题的Intel CPU。
@wongmjane:我将使用了8年的手机复活成了一台Hermes Agent服务器——用postmarketOS(基于ARM64的Alpine Linux)替换了Android系统……
用户将一台用了8年的手机改造成Hermes Agent服务器,运行在ARM64的postmarketOS上,通过Matrix进行端到端加密聊天,减少了电子垃圾,也无需再购买Mac mini。
用 x86_64 汇编写成的 Linux 桌面
一位开发者借助 Claude Code,用纯 x86_64 汇编重建了完整的 Linux 桌面栈——从 shell、终端、窗口管理器到各种工具,实现微秒级启动,并延长数小时续航。
我把一部安卓手机改造成了支持Vulkan加速的本地大模型节点(GGUF + LiteLLM + Tailscale)
一部安卓手机被重新用作便携式GGUF推理服务器,支持Vulkan加速,并通过LiteLLM暴露兼容OpenAI的端点,借助Tailscale网格集成到自托管的AI集群中。