![f:id:puhitaku:20200926011101j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200926/20200926011101.jpg)
はじめに
去る2010年、津山高専の入学を間近に控えた puhitaku 少年は、とある SHARP の電子辞書を手にして震えていた。 SHARP Brain PW-GC610。Windows CE をプリインストールした、中学生から見ても一風変わった電子辞書。そんなものが津山高専の教科書販売で手に入るなんて…。 これは、そんな変わった電子辞書 Brain シリーズで Linux を動かすまでの記録だ。 ︵本記事は、第53回 情報科学若手の回で発表した以下のスライドを記事にしたものです︶ speakerdeck.comBrain ハックの隆盛と衰退
SHARP の電子辞書 Brain シリーズは、Windows が動くことによって外部アプリ ― 言い換えると、PE実行可能ファイルそのもの ― が追加可能であることを売りにしている。自作ソフトの防止や対策は特にないので*1、Visual Studio で自作ソフトをビルドしたり、一部のCE向けソフトを追加したりすることで、電子辞書の枠を超えた使いみちを開拓できる。厨房からするとたまらない仕様だ。 2010年には既に、Brain で自作ソフトを動かす界隈が 2ch を中心に大いに盛り上がっていた。Brain で動くアプリ*2は両手では到底足りないくらいの数が出ていて、Newbie な僕でも授業中にいらんことして遊ぶ*3には十分すぎるガジェットになっていた。![f:id:puhitaku:20200925023631j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200925/20200925023631.jpg)
Windows という﹁障壁﹂を越える
時は流れて2019年。僕は高専を卒業し、社会人となり、消防からの夢であったコンピューターで飯を食っていた。そんなある日のこと。 ﹁…そういえば、2012年に発売された新機種の Brain は﹃性能が2倍に上がった﹄と公式が謳ってたな… あれなんだったんだろ?﹂ PW-GC610 は、界隈では﹁第一世代﹂と呼ばれる最初期のハード。そこから2倍にも性能が上がったのであれば、SoC は間違いなく変わっているはずだ。 調べてみるとやはり SoC のベンダーは変わっていて、その機種を見て思わず笑みがこぼれた。Freescale︵現: NXP︶i.MX シリーズ。組み込み Linux の生き証人*4とも言える有名 SoC だ。![f:id:puhitaku:20200925024908j:plain:right:w300](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200925/20200925024908.jpg)
第一の壁: 回路
Linux ポーティングで最初に立ちはだかる壁は、Linux ではない。回路そのものだ。 基板上のチップの型番を記録して、ヒートガンで部品を剥がして、ピンひとつひとつにテスターを当てて、基板上のどこに繋がっているかを探し回る。気の遠くなるような作業を黙々と進めた*5。![f:id:puhitaku:20190713143907j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20190713/20190713143907.jpg)
まさか2019年になってBrainでScalpelを起動してレジスタを読みつつceOpenerでスクショを撮ることになるとはな pic.twitter.com/dCpf2QkFGv
第二の壁: ブートローダ
![f:id:puhitaku:20190722222112j:plain:right:w300](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20190722/20190722222112.jpg)
![f:id:puhitaku:20200924221526p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200924/20200924221526.png)
第三の壁: DRAM
次の壁は、まだまだ Linux ではない。DRAM だ。DRAM は初期化をしてあげないと読み書きすらできない。 i.MX 28 の評価ボードは DDR2 の DRAM を搭載している一方で、Brain は LPDDR を搭載しているので、そのままの実装では DRAM と話せない。初期化コードを手で書き換えるにしても、これまた気の遠くなる話だが、DRAM に関するレジスタは数にして 200 近いので対応が大変だ。Windows が動いている実機からレジスタをダンプするだけでは足りず、それを解析するスクリプトを Python で書き、刻印から機種とデータシートを探し当て、インターネットを訪ね歩き、試行錯誤を重ねていった。 幾度かの徹夜を経て、ついにその時は訪れた。おほっ゛きたぁあぁあ゛^^^〜〜〜(ガンギマリ)
BrainでU-Boot来ました〜〜 pic.twitter.com/b0hdqQLO4H
第四の壁: microSD
次の壁は、まだまだまだ Linux ではない。microSD だ。 すごく地味な話だが、U-Boot から microSD を読むのにかなり難儀した。Linux kernel の本体とルートファイルシステム*11は microSD に置くのが自然だし、これから試行錯誤する上では絶対に必要になる。 オシロスコープで信号を見つつ*12、Windows との挙動の比較、microSD の電源を駆動する FET と GPIO の見直し、SoC のクロック設定見直しなどなど…途中で何度も諦めそうになりつつ、それらしい箇所の修正を繰り返した。 そしてやはり、その時はやってきた!![f:id:puhitaku:20200925001147p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200925/20200925001147.png)
mmc dev 1
で microSD を選択し mmc inf
o
で情報を表示している。SD High Speed
の表示からも eMMC ではなくSDであることがわかる。
かくして、興奮で震える手をなんとかいなしつつ、ようやく見えてきた Linux のコンパイルへと駒を進めた。
第五の壁: Linux kernel と Debian
ようやく、ついにようやく、Linux と戦う瞬間がやってきた。どんな苦労が待ち構えているだろうかと、武者震いする気分だった。 ところがどっこい、Linux のブートはあっさりと実現できた。 ●U-Boot から渡る cmdline ●Device Tree に書かれたメモリサイズや I/O 設定 これらを直すだけで、kernel log 表示 → rootfs が見つからず panic︵想定通り︶まで到達できた。Sharp BrainでU-Boot起動→microSDからLinux起動できた!!嬉しすぎる!BrainのWindows CEで必死で遊んでた10年前の自分に教えてやりたい。
1: SDをプローブする死闘
2: mmc dev 1でmicroSDを選択し情報表示
3: zImageとDTS読んだ瞬間
4: rootfsが空でinitがないのでpanicする pic.twitter.com/48vVOdvwZg
BrainでDebian 10 (Buster) 動いたよ。debootstrapポン付けでOK。次はキーボードとグラフィック系どっちにするか… pic.twitter.com/z7PM2Wr84b
第六の壁: LCD
もう Linux がブートしてログインシェルが出るところまでは到達できたものの、﹁やっぱ本体の LCD が映らないことにはなぁ﹂という気持ちが残り続けていた。そこで、次は画面表示の実現に向けてハックを進めた。![f:id:puhitaku:20200925070646j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200925/20200925070646.jpg)
![f:id:puhitaku:20200925011340j:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200925/20200925011340.jpg)
![f:id:puhitaku:20200925010731p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200925/20200925010731.png)
オッッッッ!!!!マジ??? pic.twitter.com/x4INuEX521
![f:id:puhitaku:20200925183232p:plain](https://cdn-ak.f.st-hatena.com/images/fotolife/p/puhitaku/20200925/20200925183232.png)
ああ〜〜ようやくBrainで画面表示できた…さてこれからはLinuxのドライバ実装や pic.twitter.com/ONrCGJtWpj
Linuxのグラフィックドライバー実装完了。画像は起動時のコンソール、getty、Midori(Webブラウザ)とxeyes。WMはOpenbox。 pic.twitter.com/OJicSRXcnh
fbdev backendながらWestonとXWaylandが普通に動いた。ひとまずNautilusを起動してみた。 pic.twitter.com/OUoiSNS2B8