Pomera DM250の本体eMMCを手軽にバックアップ・復元するツールを作った

Pomera DM250の本体eMMCを手軽にバックアップ・復元するツールを作った
Page content

「pomera-dm250-backup-restore-tool」の概要

KING JIMのテキスト入力専用端末「Pomera DM250」向けに、本体を分解せず、本体内蔵eMMCの丸ごとバックアップおよびリストアが行えるツール pomera-dm250-backup-restore-tool を作成し、GitHubで公開しました。

Linux化やOpenBSD化などのOS入れ替えハックを試す前の安全な退避用として、また万が一の文鎮化からの復旧用として活用できます。

特徴

Pomera DM250のSocであるRockchip RK3128のハードウェア仕様 (SDカード優先ブート) と、U-BootのUMS (USB Mass Storage) 機能を活用し、PomeraをPCから「外付けUSBストレージ (約7.3GB)」として認識させて直接読み書きを行います。

  • 非破壊・分解不要: SDカードを挿して普通に電源を入れるだけでUMSモードで起動。本体の分解やテストポイント短絡は不要です。
  • 安全第一 (デフォルトRead-Only): バックアップ用SDカードで起動したPomeraは書き込み禁止 (Read-Only UMS) として作成されるため、PC側から誤ってeMMCに書き込んでしまう心配がありません。
  • 完全バックアップ: 全27個の個別パーティションイメージ (mmcblk0p1.imgp27.img) に加え、ブートローダー領域のIDBイメージ (dm250-idb.img)、そしてRAWディスク全体のダンプ (emmc.img) をPC側に保存します。
  • 確実なリストア: 書き込みモード (--readwrite) でSDカードを用意すれば、保存したイメージからeMMCへの書き戻しが可能。書き込み直後にリアルタイムでSHA256を読み戻してベリファイ (整合性検証) を行います。
  • クロスプラットフォーム対応: 母艦PCとして Linux (Ubuntu / Debian / Fedora / Arch等) および macOS に対応しています。

簡単な使い方

作業の流れは大きく3ステップです。

Step-1. メンテナンス用SDカードの作成

母艦PCにSDカード (1GB〜32GB) を接続し、U-Boot UMSブートローダーを書き込みます。引数なしで実行すると接続されている外部ディスクを自動検出し、対話形式で安全に書き込み先を選択できます (※事前にデバイス名が分かっている場合は引数に指定も可能です)。

# 【通常】バックアップをする場合 (安全なRead-Onlyモード)
./prepare_sdcard.sh
# (引数で直接指定する場合: ./prepare_sdcard.sh <SDカードのデバイス名>)

# 【復元時のみ】リストアをする場合 (書き込み許可モード)
./prepare_sdcard.sh --readwrite
# (引数で直接指定する場合: ./prepare_sdcard.sh --readwrite <SDカードのデバイス名>)

Step-2. PomeraをUMSモードで起動してPC接続

  1. 作成したSDカードをPomera DM250に挿入します (※USBケーブルは抜いた状態にしておきます)。
  2. 電源ボタンを約3〜4秒間長押しして電源を入れます (他のキー操作は不要です)。
  3. 画面バックライトが点灯し、「[Pomera DM250 PC Storage Mount]」等のバナーが表示されたら、USB Type-Cケーブルで母艦PCと接続します。
    • 以降の作業中、Pomeraの電源を完全に切りたい・強制オフにしたい場合は、電源ボタンを10〜11秒間長押ししてください。

Step-3. バックアップまたはリストアを実行

PC側でスクリプトを実行します。<Pomeraのデバイス名> = Linux: /dev/sdX, macOS: /dev/rdiskN です。

# バックアップ実行 (デフォルト: PC内の ./backup_file/ ディレクトリへ保存)
sudo ./backup_emmc.sh <Pomeraのデバイス名>

# バックアップ実行の一例 (保存先ディレクトリを指定する場合)
sudo ./backup_emmc.sh <Pomeraのデバイス名> ./factory_backup

# リストア実行 (デフォルト: ./restore_file/ 内のイメージをeMMCへ書き戻し・検証)
sudo ./restore_emmc.sh <Pomeraのデバイス名>

# リストア実行の一例 (バックアップフォルダを指定して直接復元する場合)
sudo ./restore_emmc.sh <Pomeraのデバイス名> ./factory_backup

💡 リストア時の自動判定仕様

  • 指定フォルダ内に emmc.img が存在する場合は、ディスク丸ごと復元が最優先されます。
  • emmc.img がなく個別イメージが存在する場合は、dm250-idb.img (セクタ0〜4MBのブートローダー領域) および存在する mmcblk0p*.img が各パーティションの正確なオフセット位置へ順番に書き戻されます (特定パーティションのみの部分復元も可能です)。

macOS利用時のポイント

  • PC接続時に「読み取れないディスク」ダイアログが表示された場合は、必ず 「無視」 を選択してください (「初期化」や「取り出し」は押さないでください)。
  • 未アクセスのまま放置するとmacOSのUSB省電力機能により切断されるため、USB接続後は速やかにスクリプトを実行してください。

実行例

1. prepare_sdcard.sh

macOSでのprepare_sdcard.sh実行例を示します。

$ ./prepare_sdcard.sh
==========================================================
  Pomera DM250 Backup & Restore Tool - SD Card UMS Builder
  Host OS: Darwin (arm64) | Parallel jobs: 10
==========================================================
=== Step 1: Checking build dependencies and cross-compiler ===
✅ Using GNU Make: gmake (v4.4)
✅ Using ARM Cross-Compiler: arm-none-eabi-gcc
=== Step 2: Downloading U-Boot source archive (pomera-dm250 branch) ===
🔒 Target Mode: READ-ONLY (Safe mode, write-protected against accidental overwrites)
Downloading and extracting U-Boot source archive (~25MB)...
=== Step 3: Downloading DTS sources and Compiling Device Tree Blob ===
Fetching Pomera DM250 device tree source files (~56KB)...
Compiling Device Tree Blob (pomera-dm250.dtb) using local dtc...
Applying U-Boot Read-Only UMS patch (Hardware Write-Protect)...
patching file 'drivers/usb/gadget/f_mass_storage.c'

(途中省略)

🔍 Scanning for SD Card / External Disks...

Available External Disks (macOS):
/dev/disk4 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *3.9 GB     disk4
   1:                 DOS_FAT_32 NO NAME                 3.9 GB     disk4s1

Enter target SD card device (e.g. /dev/rdiskN or diskN) or press Enter to skip: /dev/rdisk4
Unmounting /dev/disk4...
Unmount of all volumes on disk4 was successful
Writing directly to SD card device: /dev/rdisk4
Are you sure you want to write to /dev/rdisk4? (yes/N): yes
Unmount of all volumes on disk4 was successful
Password:
216+0 records in
216+0 records out
110592 bytes transferred in 0.059545 secs (1857284 bytes/sec)
Unmount of all volumes on disk4 was successful
8192+0 records in
8192+0 records out
4194304 bytes transferred in 2.229877 secs (1880958 bytes/sec)
✅ Flashed successfully to /dev/rdisk4!
==========================================================
Pomera DM250の画面

Pomeraを上記Step-2の手順で起動し、USBケーブルでPCと接続した時のPomeraの画面です。

2. backup_emmc.sh

macOSでのbackup_emmc.sh実行例を示します。

$ sudo ./backup_emmc.sh /dev/rdisk5 /Users/hoge/tmp/backup_file/ parts
==========================================================
  Pomera DM250 eMMC Direct Dump / Backup Tool
  Host Platform: Darwin (arm64)
==========================================================
Destination Directory: /Users/hoge/tmp/backup_file
Dump Mode: parts
ℹ️  Mode 'parts': Extracting separate factory partitions + IDB only.
Target Device: /dev/rdisk5 (Size: approx 7.28 GB / 7818182656 bytes)
Available Disk Space on PC: 469.26 GB
==========================================================
Ready to dump data from /dev/rdisk5 to /Users/hoge/tmp/backup_file
==========================================================
Start backup now? (Y/n): Y

➡️ [Step 2] Extracting IDB and separate partition images (mmcblk0p1 ~ mmcblk0p27)...
Reading partitions directly from device /dev/rdisk5...
   [IDB] Extracting dm250-idb.img (4MB)... ✅ Done
   [1/27] Extracting mmcblk0p1.img (8MB at offset 8MB)... ✅ Done
   [2/27] Extracting mmcblk0p2.img (12MB at offset 16MB)... ✅ Done
   [3/27] Extracting mmcblk0p3.img (6MB at offset 28MB)... ✅ Done
   [4/27] Extracting mmcblk0p4.img (64MB at offset 34MB)...
   Progress: [ 64 / 64 MB ] (100%) | Speed: ~4 MB/s | Elapsed: 00:15 | ✅ Done
   [5/27] Extracting mmcblk0p5.img (512MB at offset 98MB)...
   Progress: [ 39 / 512 MB ] (7%) | Speed: ~4 MB/s | Elapsed: 00:09 | ETA: ~01:58

(以下省略)

3. restore_emmc.sh

macOSでのrestore_emmc.sh実行例を示します。

$ sudo ./restore_emmc.sh /dev/rdisk5 /Users/hoge/tmp/restore_file/
==========================================================
  Pomera DM250 eMMC Direct Restore Tool (with Verify)
  Host Platform: Darwin (arm64)
==========================================================
Source Image Directory: /Users/hoge/tmp/restore_file/
Target Device: /dev/rdisk5 (Size: approx 7.28 GB / 7818182656 bytes)
==========================================================
⚠️  WARNING: You are about to OVERWRITE all data on /dev/rdisk5
Make sure this is the Pomera DM250 eMMC disk!
==========================================================
Are you absolutely sure you want to proceed? (yes/N): yes

➡️ Found full raw eMMC image: /Users/hoge/tmp/restore_file//emmc.img
Writing full image to /dev/rdisk5 (7456 MB)...
   Progress: [ 256 / 7456 MB ] (3%) | Speed: ~3 MB/s | Elapsed: 01:16 | ETA: ~40:00

(以下省略)

余談: このツールを作った経緯

1. 入手後さっそくLinux化

KING JIMのPomera DM250は、公式にはテキスト入力に特化した、文房具のようなデジタルメモ機器です。しかし、実用的なキーボードを搭載した片手で掴めるサイズのLinux端末にも化けます。以前から気になっていたところ、私は運良く限定モデルの DM250XYZ Midnight Purple を入手できました。

目論み通り、まずはDebian GNU/Linux端末に切り替えて遊ぼうとしていたのですが……。

2. 本体eMMCのデータ破壊?で3キー起動不能

公開されているDebian/GNU Linux 11は2022年頃のものなので、AIの力を投入して、OS環境を最新化しようと新しいkernelやらをPomeraに導入しようとした際、何らかのトラブルが発生。本体のeMMC領域の一部を誤って書き換えてしまったようで、Pomeraのハックで基本となる「右Shift + 左Alt + 電源」 (3キー起動) でのSDカード起動が一切作動しない、絶望的な状態に陥ってしまいました。

この状態でもPomeraの純正OS自体は普通に立ち上がるものの、リストアツールが起動できず、純正「FACTORY MODE」にも入れません。SDカード経由で別のOSを読み込ませる手段が完全に塞がれてしまいました。

3. SoC仕様×U-Bootで復活成功→ツール化しよう

幸い、Linux化を試す前に本体eMMCの初期バックアップは取得していたため、これさえ書き戻せれば正常化できるはずです。しかし、前述の通り、既存のリストア手順は「3キー同時押しでの起動」を前提としているため使えません。

となると、「Midnight Purple筐体のPomeraを破損せずにうまく分解するしかないのか…… (TP501 test pointを短絡させる必要がある)」と頭を抱えつつ調査を重ねた末に、Rockchip RK3128のハードウェア特性である「電源投入時にSDカードの先頭を最優先でチェックする」仕様と、U-BootのUMS機能を組み合わせる活路を見出しました。

この活路を押し広げる試行錯誤の結果、3キー起動に頼ることなく無事にeMMCを完全リストアし、Pomeraを工場出荷状態で復活することに成功しました。この時に確立した「3キー起動の動作が壊れていても安全に復旧できる手法」を、誰でも再現性高く使えるように整理・自動化したものが、今回のツール pomera-dm250-backup-restore-tool です。

関連リンク

おすすめセット

画面保護フィルムとケースは、実際に下記のものを使っています。