はじめに
MagicXから開発用のmini zero 28という中華ゲーム機を提供していただいたので、zero28で動作するLinuxディストリを作っていきたいと思う。
(私が制作したLinuxディストリビューションはgithubにて閲覧できます)
https://github.com/game-de-it
zero28用のLinuxって何を使うの?
zero28ではopenwrtベースのTinaLinuxを利用する。
TinaLinuxはA133P搭載のSBCに対応したLinuxなので、A133P搭載のzero28にも使えるが、もちろんそのままでは何もできないのでカスタムしないといけない。
WindowsもAndroidもLinuxもMacOSも「OSだけでは何もできない」と同じことで、OSとアプリケーションが組み合わされないと、やりたいことが実現できないのだ。
まず何をするの?
まずはTinaLiuxやエミュレーターなどのプログラム全般をビルドするために必要な「ツールチェーン」を整える必要がある。
ツールチェーンとは「ソフトウェア開発やシステム開発において、目的を達成するために組み合わせて使用するプログラム(ツール)の集合体」
とグーグル先生が教えてくれるとおり、今回の例ではTinaLinuxをビルドするためのプログラムの集合体でもあり、エミュレーターというプログラムをビルドするためのプログラムの集合体 とも言える。
ツールチェーンってどうやって作るの?
ツールチェーンを作るためにはまずTinaLinuxのビルドツールに組み込まれている「パッケージリスト」の修正や追加を行なっていく。
なぜリストを修正&追加するかというと、プログラムをビルドするにはプログラム(パッケージ)の依存関係が存在するので、その依存しているパッケージを洗い出し、新たなパッケージが見つかればリストに追加、パッケージのバージョン番号の変更が必要な場合はリストの修正をしていく必要があるからだ。
例えば「卵焼き1.19」を作るには「フライパン2.1.1」が必要
->フライパン2.1.1を作るには「鉄2.0」と「火1.1.3」が必要
->鉄2.0を取るには「ハンマー0.56」が必要で火1.1.3をつけるには「ガス0.6」や「薪0.8.1」が必要
->ハンマー0.56を作るには・・・
と言った具合に「卵焼き1.19」というプログラムを焼き上げる前に、依存関係のある様々な道具のバージョンを確認したり、足りない道具は新規追加しないといけないのだ。
依存関係を調べ終えた後には、依存するパッケージをダウンロードするためのURLを探す必要がある。
ほとんどはググればすぐにURLは見つかるものの、その数が数百近くあると思うと気が重い。
いざパッケージのURLを揃え終わったとしても、それぞれのパッケージごとにMakefileやpatchファイルを作成する必要がある。
よってこのツールチェーンの作成作業がLinuxディストリビューションを作る上で一番大変な工程と言ってもいい。
説明書のようなものはないの?
一応、TinaLinuxのマニュアルは存在するものの全て中国語で書かれているので、翻訳作業や翻訳された言葉の意味も理解していかないといけない。
https://tina.100ask.net/
マニュアルといっても「zero28用のTinaLinuxを作るためのマニュアルではない」ので、zero28のTinaLinuxを作るためには、マニュアルに書かれている情報の何が必要で、何が不必要な情報なのかを精査しないといけない。
もちろんTinaLinuxをガッツリ触ったことがないので、TinaLinuxのビルドツールのお作法も学習しなければならない。
お作法というのはどういうことか? というと、上記で「パッケージリストを修正&追加する」と書いたものの、そもそもどこにパッケージリストがあるのか?、どのようなMakefileを書く必要があるのか?、どうやってそれをビルドするのか?、ビルドすると何がどこに配置されるのか? など、あらかじめ知っておかないといけない情報が「お作法」ということだ。
buildrootやEmuelec系のビルドツールはある程度精通しているものの、TinaLinuxのビルドツールは初めて触るので結構大変。
Linuxディストリビューションを作るには作業コストだけではなく、学習コストもハンパないと言える。
もちろんツールチェーンを使ってプログラムをビルドしただけでは何も起きない。
例えばフォトショップのプログラムをダウンロードしても何も起きないのと同じことで、そのプログラムがLinuxで意図した通りの動作をするように設計しないといけない。
例えばOSが起動するときに自動的に実行しておく必要があるプログラムもあれば、ユーザがそれを実行したいというアクションによって実行されなければならないプログラムもある。
ビルドされたプログラムの何をどのようにするのか設計するのも結構大変な作業であると言える。
なんか・・・もう地獄じゃない?
でも・・・それが楽しいのだっ!