Software Development Kits
⚠️ To be able to gain shell access and install custom software on reMarkable Paper Pro, you will first need to enable developer mode.
Overview
reMarkable builds software development kits (SDKs) for our various paper tablets. The SDK contains a cross-compiler toolchain, shared libraries and some header files meant to allow you to cross-compile software on your host / developer machine which you can then deploy and run on a paper tablet.
These SDKs are sometimes referred to as “toolchains”, and the terms are used interchangibly, but strictly speaking the SDK will contain a cross-compiler toolchain and may contain extra utilities and components.
The SDKs are built using Yocto and you can find more general information about Yocto SDKs in their documentation. Note that the official Yocto documentation will not always apply fully to our SDKs, as they may be customized, use different naming or path conventions and so on. If you are new to SDKs or Yocto, it’s still a good idea to read the official documentation to get an idea of the concepts involved.
Currently, each product has its own dedicated SDK. This means that if you have a reMarkable Paper Pro you’d like to deploy custom software to, you’ll need to use the SDK associated with exactly that product.
An SDK contains a cross-compilation toolchain for a specific host CPU architecture. This means that the SDK can only cross-compile from this host CPU architecture to the target product architecture. Currently, we only publish SDKs with a host architecture of x86_64
. This means that an x86_64
CPU architecture PC/virtual machine is required to use the SDK.
Our SDKs are only expected to work when run on a supported Linux distribution. Generally, you can expect the supported Linux distributions listed in the Yocto Project’s documentation to apply to the SDK as well.
How to choose your SDK
Our SDKs may follow slightly different naming schemes, but the important things to look for are:
- The product code name corresponding to your reMarkable Paper Tablet
- The reMarkable OS version number corresponding to the software release running on your reMarkable paper tablet
Product code names
The SDK filename contains the code name for the product it is associated with. The links page will tell you which products the SDKs are associated with, but the mapping of code name to product name is as follows:
rm1
: reMarkable 1rm2
: reMarkable 2ferrari
: reMarkable Paper Pro
reMarkable OS version
reMarkable OS versions do not match the version numbers of the final software version as you see it on your device. The links page will tell you which SDKs match which software version. You can find out the software version running on your device by going to Settings -> Software
.
You can determine the reMarkable OS version on your device by running the following command on the device:
cat /etc/os-release |grep ^VERSION=
# VERSION="4.0.813 (kirkstone)"
Example toolchain
The file meta-toolchain-remarkable-4.0.813-ferrari-public-x86_64-toolchain.sh
is the SDK for reMarkable OS version 4.0.813, which corresponds to software version 3.14.3.0. The host architecture of this SDK is x86_64
.
Where to get the SDKs
You can find download links to SDKs we have published in our links section.
Quick usage example
The SDKs are distributed as .sh
executables which will install themselves when run. You may choose to install them to a default directory, or you may specify a custom installation path.
You may need to set the execute permission on the SDK installer:
chmod u+x meta-toolchain-remarkable-4.0.813-ferrari-public-x86_64-toolchain.sh
You can then install the SDK to a location of your choice. Note that the installer will prompt for confirmation before installing anything.
# Will install the SDK to a directory called sdk in the current working directory
./meta-toolchain-remarkable-4.0.813-ferrari-public-x86_64-toolchain.sh -d sdk
In order to use the SDK, you must “source” the SDK’s environment setup file. Sourcing the environment file will set several environment variables in your shell session to make compiling with the cross-compiler toolchain easier.
The following demonstrates sourcing the environment and that the standard CC
variable has been set to point to the SDK’s cross-compiler:
source /home/myuser/sdk/environment-setup-cortexa53-crypto-remarkable-linux
echo $CC
aarch64-remarkable-linux-gcc -mcpu=cortex-a53 -march=armv8-a+crc+crypto -mbranch-protection=standard --sysroot=/home/myuser/sdk/sysroots/cortexa53-crypto-remarkable-linux
Finally, a simple example of compiling a Hello World program, copying it to a device connected via SSH and running it:
# helloworld.c
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Hello world!\n");
return 0;
}
The following assumes the reMarkable Paper Pro has developer mode enabled, is connected to your PC and that you know the root password or have configured SSH public key authentication. Also note that there is currently no concept of a developer mode for reMarkable 1 or 2.
# Compile
$CC helloworld.c -o helloworld
# Copy to device
scp helloworld root@10.11.99.1:~/.
# Run
ssh root@10.11.99.1 ./helloworld
# Prints "Hello world!"
Disclaimer
Please note that you will be solely responsible for any changes or modifications you make to our software, including by using Developer Mode. We reserve the right to not provide support to software that has been subject to such changes or modifications. Errors or defects resulting from changes or modifications made by you will not be covered by our Limited Warranty or Protection Plan, or any legal warranty you might have (to the extent permitted under applicable law). reMarkable disclaims all liability in that regard.