WSL2 から Xteink X4 に Papyrix ファームウェアを書き込む

papyrix-flasher を使って Xteink X4 電子ペーパーリーダーに Papyrix ファームウェアを書き込む手順

公開
WSL2 から Xteink X4 に Papyrix ファームウェアを書き込む

はじめに・概要

少し前にポチっていた巷で話題?の電子書籍リーダー Xteink X4 が届きホクホクな今日この頃です。

事前情報でどうやら公式のファームウェアに加え、オープンソースのファームウェア・アプリもインストールできるということで気になっていました。

というのも、オープンソースのファームウェアは公式のファームウェアと比べ書籍のレイアウトが最適化されていたり、機能の改善が進んでいるようです。

今回は Papyrix というオープンソースのファームウェア・アプリをインストールしてみましたので、作業記録として手順をまとめます。

Xteink X4 は ESP32-C3 ベースの電子書籍リーダーです。デフォルトのファームウェアに加え、オープンソースの対応した電子書籍リーダーアプリをインストールすることができます。

本記事では WSL2 (Ubuntu 24.04) 環境から、書き込みツール papyrix-flasher を使って Xteink X4 に Papyrix をインストールする手順をまとめます。

環境情報

項目バージョン
OSLinux (WSL2 / Ubuntu 24.04 / amd64)
Go1.26.1(手動インストール)
papyrix-flasherv0.4.0(ソースビルド)
ファームウェアPapyrix v1.19.0(3.97 MB)

手順

Step 1: Go をインストールする

papyrix-flasher のビルドには Go が必要です。公式サイトから最新の tarball を取得してインストールします。

# ダウンロード
wget https://go.dev/dl/go1.26.1.linux-amd64.tar.gz

# 既存の Go を削除して展開
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.26.1.linux-amd64.tar.gz

# PATH に追加
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

# バージョン確認
go version
# go version go1.26.1 linux/amd64

Step 2: papyrix-flasher をビルドする

git clone https://github.com/bigbag/papyrix-flasher
cd papyrix-flasher
make build

ビルドが成功すると bin/papyrix-flasher が生成されます。コマンドとして使えるよう PATH に追加します。

echo 'export PATH=$PATH:/home/<ユーザー名>/_work/papyrix-flasher/bin' >> ~/.bashrc
source ~/.bashrc

Step 3: ファームウェアをダウンロードする

make build で生成されるのは書き込み ツール (papyrix-flasher) であり、書き込む ファームウェア (firmware.bin) は別途入手が必要です。

Papyrix リリースページ から目的のバージョンをダウンロードします。

cd /path/to/papyrix-flasher
wget https://github.com/bigbag/papyrix-reader/releases/download/v1.19.0/firmware.bin

Tips: リリースタグは v1.19.0 の形式(c1.19.0 ではない)。

Step 4: usbipd で USB デバイスを WSL にアタッチする

あらかじめ Xteink X4 を USB ケーブルで PC に接続しておきます。

WSL2 はデフォルトで USB デバイスを認識しません。Windows 側で usbipd を使い WSL にアタッチする必要があります。

Windows PowerShell(管理者) で実施します。

# usbipd のインストール(未インストールの場合)
winget install --interactive --exact dorssel.usbipd-win

# デバイスの一覧確認
usbipd list

usbipd list の出力例は次のようになります。Shared または Not shared の状態で Xteink X4 が表示されます。

BUSID  VID:PID    DEVICE                                                        STATE
1-4    0403:6010  USB Serial Converter A, USB Serial Converter B                Not shared
1-12   303a:1001  USB JTAG/serial debug unit                                    Not shared

BUSID の値(この例では 1-12)を以降のコマンドで使用します。

Tips: DEVICE 欄には「Xteink」とは表示されません。ESP32-C3 の USB チップが USB JTAG/serial debug unit などと表示されます。Xteink X4 を接続する前後で usbipd list を実行し、新たに現れたデバイスを確認するとよいでしょう。

確認できたら、bind してから attach します。

# bind してから attach する
usbipd bind --busid 1-12
usbipd attach --wsl --busid 1-12

Tips: bind の前に attach を行うと次のエラーが出ます。必ず bindattach の順で実行してください。

usbipd: error: Device is not shared; run 'usbipd bind --busid 1-12' as administrator first.

アタッチ後、WSL 側でデバイスが認識されていることを確認します。

ls /dev/ttyUSB* /dev/ttyACM*
# /dev/ttyACM0 などが表示されれば OK

Step 5: シリアルポートの権限を設定する

デフォルトでは一般ユーザーにシリアルポートへのアクセス権がありません。dialout グループに追加します。

sudo usermod -aG dialout $USER

追加後は WSL を再起動して変更を反映します。

# Windows PowerShell で実行
wsl --shutdown

Step 6: フラッシュを実行する

WSL 再起動後、以下のコマンドでファームウェアを書き込みます。

papyrix-flasher flash -p /dev/ttyACM0 firmware.bin

成功すると次のようなログが出力されます。

Firmware: firmware.bin (4165616 bytes)
Port: /dev/ttyACM0 @ 921600 baud
Connecting to bootloader...
Uploading stub flasher...
Running stub flasher...
Stub running!
Connected!
Flashing bootloader at 0x0 (12464 bytes)...
  [==============================] 100% (9/9 KB) 455 KB/s
Flashing partitions at 0x8000 (3072 bytes)...
  [==============================] 100% (0/0 KB) 195 KB/s
Flashing otadata at 0xE000 (8192 bytes)...
  [==============================] 100% (0/0 KB) 54 KB/s
Flashing firmware at 0x10000 (4165616 bytes)...
  [==============================] 100% (1969/1969 KB) 98 KB/s

Flash complete!
Rebooting device...
Done!

exit code 0 でフラッシュ完了です。

フラッシュ完了後、端末が自動的に再起動し、Xteink X4 の画面が更新されます。Papyrix の画面が表示されればインストール成功です。

まとめ

WSL2 から papyrix-flasher で Papyrix ファームウェアを書き込む際のポイントをまとめます。

手順要点
ファームウェア入手make build はツールのビルドのみ。firmware.bin は別途ダウンロードが必要
USB アタッチusbipd bindusbipd attach の順で実行する
権限設定dialout グループへの追加後は WSL の再起動が必要

参考リンク