Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

REweread → reMarkable 2 移植

nasonliu/REweread(原生微信读书 Qt6/QML 客户端)移植到 reMarkable 2

上游只为 reMarkable Paper Pro Move 验证过。rM2 的 SoC、屏幕驱动、触摸面板都不一样,这个仓库是把它真正跑起来的完整改动 + 踩坑记录。

Required Notice: Copyright 2026 nasonliu

本项目是 REweread 的衍生作品,沿用上游的 PolyForm Noncommercial License 1.0.0(见 LICENSE)。 仅限非商业用途。 分发时必须一并附带本许可证或其 URL: https://polyformproject.org/licenses/noncommercial/1.0.0


现在能用到什么程度

在 rM2(固件 3.22.0.64)上实测:

  • 书架:微信读书书架全量同步,封面九宫格,分页
  • 阅读:分页排版、章节渲染
  • 翻页:左 1/3 上一页 · 中间 1/3 呼出菜单 · 右 1/3 下一页
  • 阅读设置:字号 24–60、行距、段距、页边距、首行缩进、字体(宋体/微米黑/正黑/霞鹜文楷)、字重
  • 目录:抽屉式章节列表,点章节直接跳转
  • 进度:跳转进度条、同步/拉取阅读进度
  • 网络:设备自己连 WiFi 即可使用,运行时不需要连电脑

目标设备

机型 reMarkable 2
固件 3.22.0.64
架构 armv7l (i.MX7, cortexa7hf-neon)
内核 5.4.70
Qt 设备自带 Qt 6.8.2(xochitl 是 Qt 应用)
加载 xovi + AppLoad

三个主要的坑

1. 显示:rM2 抢不到屏(移植中最硬的一堵墙)

rM2 的 Qt epaper 平台插件走 SWTCON(软件 TCON),启动时抢独占锁 /tmp/epframebuffer.lock——而 xochitl 一直握着这把锁和 /dev/fb0,两个 SWTCON 不能共存,直接闪退。设备上的 Qt 没有编 linuxfb(只有 epaper/vnc/minimal/offscreen),rm2fb 在 3.22 固件上也已失效。

解法:离屏渲染 + 自绘显示通道

QML ──offscreen 平台 + QT_QUICK_BACKEND=software──> QQuickWindow
     ──grabWindow()──> QImage ──二值化 RGB565──> /dev/shm/qtfb_<key>
     ──24 字节 UPDATE 包──> qtfb (/tmp/qtfb.sock)

绕开 epaper 插件,完全不碰 SWTCON 锁。实现见 weread-qt/qtfbclient.cpp。 manifest 只需 "qtfb": true,不需要 qtfb-shim 的 LD_PRELOAD。

qtfb 协议要点:SOCK_SEQPACKET,24 字节 INIT,响应里的 shmKeyDefined 才是真正的 shm 名(不是你发过去的 key)。

2. 触摸:Y 轴是反的

触摸面板 pt_mt(cyttsp5)挂在 /dev/input/event2,上报的原始 ABS 值可直接当屏幕坐标用,但 Y 轴与屏幕相反:

screen_y = 1871 - raw_y      // X 不翻转

不翻的话点"上一页"会翻到下一页。实现见 weread-qt/touchinput.cpp(读 event2 → 合成 Qt 鼠标事件)。

3. 工具链:官方 SDK 能下,但要对版本

reMarkable 官方 codex SDK 是公开可下载的:

https://storage.googleapis.com/remarkable-codex-toolchain/<固件>/rm2/
  remarkable-production-image-<sdk版本>-rm2-public-<host>-toolchain.sh

本机固件对应 3.22.0.65/rm2/...-5.2.96-rm2-public-x86_64-toolchain.sh(414MB,Qt 6.8.2 与设备精确匹配)。该版本只有 x86_64 主机版

两个坑:

  • SDK 安装脚本需要 python,debian-slim 镜像里没有 → 用 python:3.12-bookworm
  • source 环境脚本前必须去掉 set -u,SDK 的 openssl.sh 引用了未定义的 SSL_CERT_FILE

构建

需要 Docker(Apple Silicon 上以 --platform linux/amd64 模拟运行)。

./install-sdk.sh      # 下载 SDK 并装进 docker volume rm2_sdk
./build-weread.sh     # 交叉编译,产物 weread-qt/build/rm_weread_qt

产物应为 ELF 32-bit LSB executable, ARM, EABI5, for GNU/Linux 5.4.0

安装到设备

# app 本体
scp weread-qt/build/rm_weread_qt \
    root@10.11.99.1:/home/root/xovi/exthome/appload/wereadrm2/
scp weread-qt/appload/* \
    root@10.11.99.1:/home/root/xovi/exthome/appload/wereadrm2/

# 字体(自备)放到设备 /home/root/weread-qt/fonts/
#   source-han-serif.otf / wqy-microhei.ttc / wqy-zenhei.ttc / lxgw-wenkai.ttf

网络层复用 weread.koplugin 的 lua 桥接(通过 KOReader 的 luajit 调用),需要装好 KOReader 且在 koplugin 的 config.lua 里填好自己的微信读书凭据。

凭据不入库。 config.lua 已在 .gitignore 里。请用你自己的账号,并注意第三方客户端存在账号风险。


目录

weread-qt/          移植后的应用
  ├─ main.cpp         harness:qtfb 显示 + event2 触摸 + 合成器
  ├─ qtfbclient.*     qtfb 客户端(离屏帧 → 共享内存 → 墨水屏)
  ├─ touchinput.*     event2 触摸读取 + Y 翻转
  ├─ *_store.*        上游的 13 个 store(网络/书架/阅读/进度…)
  ├─ Main.qml         上游 UI,针对 1404×1872 + rM2 硬件调整
  └─ appload/         AppLoad manifest 与启动脚本
hello-qt/           最小 Qt Quick 窗口(验证显示通道用)
build-*.sh          交叉编译脚本
install-sdk.sh      SDK 安装

相对上游的改动

  • 新增 qtfb 显示通道与 event2 触摸输入(上游走 Move 的原生平台插件)
  • 分辨率 954×1696 → 1404×1872
  • 彩色 → 黑白二值化(rM2 无彩色墨水屏)
  • 翻页手势改为微信读书式左/中/右三分
  • 字体默认改宋体(思源宋体),字号范围放宽到 24–60
  • 移除前光相关 UI(rM2 没有前光硬件),原"灯光"行改为"目录"入口

致谢

  • nasonliu/REweread — 原项目,全部业务逻辑与 UI 出自这里
  • asivery/xovi 与 AppLoad — 第三方应用加载
  • qtfb — 显示通道协议

About

把原生微信读书客户端 REweread 移植到 reMarkable 2:offscreen 渲染+自绘 qtfb 绕开被 xochitl 独占的 SWTCON,event2 触摸(Y轴翻转)。衍生自 nasonliu/REweread,PolyForm 非商业授权。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages