私の(何やら様子のおかしい)電子辞書活用法

電子辞書を使おう

2025-01-10

この記事はCoins Advent Calendarの19日目の記事となる予定であったものです。[1]

[1]: 全然記事が書き終わらないどころかブログすら立ちませんでした、すまん!


序文


みなさん、電子辞書は使っていらっしゃるでしょうか。電子辞書には、画面(多くの場合はタッチパネル)とキーボード、そして辞書の情報を処理するためのSoCが積まれています。これはほとんど画面とキーボードのついたRaspberry Piと言えるでしょう。Puhitaku氏の偉大な成果により、シャープの電子辞書Brainの上でLinuxが動くようになったのは周知の事実だと思われます。今回は、その方の作ったDebianポートとは別に、NixOS[2]を電子辞書にポートした記録を書こうと思います。

[2]: Nixというパッケージマネージャを利用したパッケージの依存関係地獄が発生しないLinuxディストリビューション


電子辞書の基本的なスペック


私が持っている(ポートする対象となる)電子辞書は以下のようなスペックを持っています。

PW-SS6、今回ポートする電子辞書
PW-SS6、今回ポートする電子辞書

  • SoC: I.MX 283

  • CPU: ARM926EJ-S 454MHz

    • 割と大昔のARMが載っている

    • ガラケーやニンテンドーDSと同じ世代

  • GPU: そんなものはない

    • 一応GPUの欠片くらいの機能を積んだ何かが載ってはいるが、普通には使えない

  • メモリ: 128MB

  • eMMC: 8GB

  • キーボード: あり

  • タッチパネル: あり

  • microSDスロット: あり

大変有望なスペックですね。


どうやってポートするのか?


基本的にはNixOSをLicheepiというRisc-Vにポートするときの設定を利用しました。しかし、いくつか修正しなければいけない点がありました。

アーキテクチャの違い


NixOSで公式にサポートされているのはx86_64とARM64のみです。今回使う電子辞書のCPUはいくらARMとはいってもArmv5というArmv7ですらないいにしえのCPUなので、すべてのパッケージを自前でビルドする必要があります。幸いにして、Nixのパッケージはソースさえ存在していればビルドとインストールの差で操作はほとんど変わりませんので助かりました。以下のようにしてパッケージのターゲットを変更すると、Armv5向けにパッケージがビルドされ、インストールされたイメージが作成されます。

config = "armv5tel-unknown-linux-gnueabi";
gcc.arch = "armv5te";
gcc.abi = "aapcs-linux";

この設定はSheevaPlug向けのNixOSのポートを参考にしました。

U-boot


U-bootははるか昔に電子辞書に移植されていますが、電子辞書向けのU-bootはextconfigを読むこむ設定がなされていません。代わりに、zImageという名前のカーネルをそのまま起動するようになっています。このU-bootをそのまま利用するためには、NixOSのイメージビルダーがextconfig.confで本来行うはずだった設定をこちらで行う必要があります。

このようにして電子辞書用カーネルと電子辞書向けU-bootをパッケージングし、イメージをビルドすると…

動いた!
動いた!


結論


あとはSubstitutersなどの設定を適切に行いクロスコンパイル環境を整え、電子辞書でパッケージがビルドされないようにすれば[3]電子辞書上のNixOSで快適な開発が可能であると思われます。

私はNeovimなどの設定もNixで管理していたので、そのまま利用することができました。できるだけ早急に電子辞書向けNixOSのイメージとソースを公開できるように整備するつもりです。みなさんもよきNixOS生活をお過ごしください。

[3]: 電子辞書で万が一パッケージのビルドが開始されると、2~3日使用不能になることが予測される。