43 个版本
0.6.2 | 2022年12月12日 |
---|---|
0.6.1 | 2022年9月1日 |
0.6.0 | 2022年2月5日 |
0.5.0 | 2021年10月21日 |
0.1.12 | 2018年3月31日 |
#53 in FFI
每月 70 次下载
1MB
4K SLoC
libremarkable - Remarkable平板框架
从低延迟部分更新到电子墨水显示屏,再到多点触控、物理按钮和Wacom数字化器输入,所有这些现在都得到了理解,并且可以在本仓库中找到它们的最小到完整的实现。
此仓库实现了一个Rust库,以提供这些功能。可能为Remarkable
创建了一个piston
后端,允许使用conrod
来简化UI创建。有关进一步文档,请参阅本仓库中的wiki。
https://github.com/canselcik/RemarkableFramebuffer
由于历史原因重定向到此仓库。
构建说明
设置工具链
为了构建 libremarkable
和示例程序(spy.so
和 demo
),您需要 Remarkable 的工具链。下载 安装脚本(rM2)并安装工具链。您可以在 维基百科 上找到更多信息。
然后,您可以使用以下命令设置 Rust 工具链进行交叉编译:rustup target add armv7-unknown-linux-gnueabihf
。
为了让 Rust 利用工具链,需要一个 .cargo/config
文件。此文件可以使用 gen_cargo_config.py
生成。首先,必须源工具链环境。其位置可以在工具链安装目录中找到。正确的路径也在工具链 维基百科 中引用。加载环境后,脚本将读取环境变量以生成适用于您的工具链的正确 .cargo/config
文件。
生成的配置文件看起来可能像这样
[target.armv7-unknown-linux-gnueabihf]
linker = "<toolchain_install_path>/sysroots/x86_64-codexsdk-linux/usr/bin/arm-remarkable-linux-gnueabi/arm-remarkable-linux-gnueabi-gcc"
rustflags = [
"-C", "link-arg=-march=armv7-a",
"-C", "link-arg=-marm",
"-C", "link-arg=-mfpu=neon",
"-C", "link-arg=-mfloat-abi=hard",
"-C", "link-arg=-mcpu=cortex-a9",
"-C", "link-arg=--sysroot=<toolchain_install_path>/sysroots/cortexa7hf-neon-remarkable-linux-gnueabi",
]
您还可以将此片段添加到上面的文件中,以便默认为此项目进行交叉编译
[build]
# Set the default --target flag
target = "armv7-unknown-linux-gnueabihf"
构建 libremarkable 和示例程序
为了方便起见,创建了一个简单的 Makefile 包装器。它公开了以下动词
examples
:构建示例library
:构建库all
:库 + 示例
在设备上测试 libremarkable 和示例程序
提供的 Makefile
假设设备可在 10.11.99.1
上访问,并且 SSH 密钥认证已设置,以便您不必每次都输入密码。以下操作可用
run
:停止xochitl
后,在设备上构建并运行demo.rs
start-xochitl
:停止所有xochitl
和demo
实例并正常启动xochitl
spy-xochitl
:构建spy.rs
并将其加载到停止当前实例后的新实例中LD_PRELOAD
。这允许在ioctl
调用中检测到官方程序使用的新枚举。
手动构建的进一步构建说明
如果您选择跳过 Makefile
并直接调用 cargo
,请确保在参数中包含 --release --target=armv7-unknown-linux-gnueabihf
,如下所示
➜ rust-poc git:(master) ✗ cargo build --release --target=armv7-unknown-linux-gnueabihf
...
Compiling libremarkable v0.1.0 (file:///home/main/Desktop/libremarkable)
Compiling rust-poc v0.1.0 (file:///home/main/Desktop/RemarkableFramebuffer/rust-poc)
Finished dev [unoptimized + debuginfo] target(s) in 24.85 secs
--release
参数很重要,因为它启用了优化。没有优化,即使空闲时,CPU 利用率也会达到 ~70%。有了优化,框架运行得非常轻,空闲时 0% CPU 利用率,峰值时 1-2%。
使用 cross
构建
这种方式构建不需要 reMarkable 的工具链,也不需要在 Ubuntu 16.04 上使用 Docker 进行构建,因此设置应该更容易。
使用 cross
安装 cargo install cross
。首先请确保 reMarkable 工具链未在使用中。
要构建、部署和运行 demo
,只需
make TARGET=armv7-unknown-linux-gnueabihf deploy-x-demo
# This builds with
# cross build --example demo --release --target=armv7-unknown-linux-gnueabihf
# then deploys the demo
使用 musl
- 编译:使用
cross build --example demo --release --target=armv7-unknown-linux-musleabihf
(或make x-demo
) - 运行演示:
make deploy-x-demo
关于 rM2 应用:您需要从 Toltec 获取 display 包。但是只包含服务器部分,因为客户端已经内置在这个库中。
遗留 C 实现
libremarkable
的第一个草案是一个 C 库,在逆向工程平板电脑时构建。它已不再维护,但可以在 legacy-c-impl
分支中找到。
依赖项
~17–27MB
~221K SLoC