Help us understand the problem. What is going on with this article?

AZ/05M(あずにゃん)でU-Bootから起動する何かを作ろう

More than 3 years have passed since last update.

AZ/05Mとは

ロシアの愛したTOSHIBA製Androidベースのクラウドブック。元々はAndroid 2.1ベースでタッチUIなし、ストアも使えないっていう微妙な立ち位置なんだけど、不思議とみんな大好き。勝手に移植されたKitKatベースのカスタムファーム入れたり、Ubuntu入れたり。これだけ愛されているのに、なぜかNetBSDは未だに動かない。

どんなに失敗しても文鎮化しない良い子。海外での型番はAC100、ボードの愛称はPAZ00(Linux kernel上のconfiguration名も)。

Das U-Boot

元々はU-Boot使ってないんだけど、カスタムROMやUbuntuを入れる事を目的としてU-Bootが移植されている

U-Boot standalone applications

U-Bootが提供するAPIを使ってU-Bootから起動してU-Bootに返るアプリケーションが書ける。オフィシャルなドキュメントはこちら

特定のアドレス(ARMなら0x0c100000)に読んで、先頭にジャンプしたら動くようなバイナリイメージを作れば良い。U-BootのAPIはU-Bootをbuildする際に生成されるexamples/standalone/stubs.o経由で呼ぶ。

その他、各種build flagをU-Bootのbuild時に指定した物に揃える必要があるので注意。フラグはわりとversionによって違ったりする。例えば先ほどのAC100向けにforkされたバージョンでは-ffixed-r8が指定されてるけど、trunkでARM versatile向けにbuildすると-ffixed-r9が指定されていたり、などなど。

API

種類

Console I/Oくらいしかないんですが、逆にConsoleを扱う分には(UEFIと比べて)シンプルでわかりやすいAPIが提供されています。Consoleは最低限度の環境だとUARTだけだったりするのですが、ファームが対応していればLCD+Keyboardで動くstandaloneなConsoleが利用可能です(例えばAZ/05M向けのファームは対応済み)。

実例

getc()、putc()、puts()、printf()などは名前から推測される通り。その他、入力バッファにデータがあるかを確認するtstc()という便利な関数があります。

cp-mega88の移植

cp-mega88とは

拙作のCP/M動作環境です。元々はAVRマイコン上で動作していたのですが、デバッグ用のPOSIX buildがあったり、以前のエントリで紹介したUEFIから直接ブートするように作られたUEFIアプリなどがあります。コードはGitHubにてtoyoshim/cp-mega88として管理されています。

コンソールI/O

tstc()のお陰でコンソール周りの実装は各種portの中で一番シンプルになりました。UEFIなんかだとtstc()的な事をするために同期イベント作ってタイマーをセット、コンソールの入力と同期イベントを多重化して待つ……みたいな仰々しいコードが必要になりますし、POSIXで書いてもfcntlやtermiosとお友達になる必要があり結構面倒。そういう意味では個人的には理想的なAPIです。

ファイルアクセス

UEFIみたいなファイルシステムを提供するようなインフラは整備されていないようだったので、Linuxのinitramfs的な事を行いました。つまりU-Boot自体はext2を認識するので、ext2loadコマンドでディスクイメージをメモリ上の固定アドレスに配置し、アプリ側からはRAM fsのように扱います。

# ext2load mmc 0:1 0x0c100000 /boot/cp-mega88.bin
# ext2load mmc 0:1 0x0c200000 /boot/sdcard.img
# go 0x0c100000

具体的にはU-Bootからこのようなコマンドでcp-mega88.binを起動させ、ここで指定した0x0c200000をRAMディスクの先頭だと思ってブロックデバイスをサポートしています。

雑感

繰り返しになりますが、UEFIよりずっとシンプルで、コンソールベースのアプリなら比較的簡単に書けました。ただグラフィックなどを触ろうとするとUEFIやBIOSより遥かに難しく、グラフィックカードやLCD毎にドライバ的な物を自前で書く必要があり現実的ではありません。そういう意味では本来の役割をわきまえているとも言えます。

toyoshim
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした