iPodを音楽だけに使うのはもったいないと思ったので、iPod nano (第1世代)にLinuxを入れてみた。(Linuxとは、Windows XP, Mac OS XなどのOS(Operating System)の1種である)。iPodは中にARMベースのMPUが入っておりLinuxには親和性の高いハードウェアと言える。iPodにLinuxを入れた理由は3つある。
1)ある”お馬鹿”実験のために必要:後日紹介
2)iPodでテトリスなどいろいろなゲームを楽しむ
3)宇宙ステーションの軌道計算をiPodにやらせてみる
1)は後日紹介するとして、2)も出回っているiPod linuxとPodzillaをインストールすればあらかじめ何個かゲームは入っている。iPod linuxのページを見ていたらiPod nano用は公開されていなかった。そのため普通のiPod用のコードを参考にしてnano用にipl(Initial Program Loader)回りを書いていたら、当たり前のようにnano用を公開している人がいたので、開発を中止し素直に利用することにした。uLinux kernel, Userland, Podzillaを入れとりあえずLinuxが動くiPodはあっさりと実現した。
iPod nanoでテトリス
iPodに随分前から出回っている”iPod Linux”を入れてみたという内容では面白くもなんともないのでいろいろ遊んでみることにした。とりあえず自分でアプリケーションを書いてみることにする。
ここで参考程度にクロス開発環境を少し紹介する。参考:iPod programming
・Cygwin (vi, GCC, SVN(Subversion), CVSあたりを入れる)
・ARMベースのToolchainsは、gnuarmから自分で構築するより、素直にipod linuxで公開(iPod Linux Toolchains)されているものを使う。
以上である。あっという間にC/C++言語ベースでiPod用のソフト開発ができる。
まず定番のHello Worldを動かす。
ソース(test.c)は極めてシンプルに。
#include <stdio.h>
int main(int argc, char **argv)
{
printf( “Hello World!\n” );
return 0;
}
これを、ARM用にコンパイルする。
$ arm-elf-gcc -o helloworld test.c -elf2flt
作成されたバイナリファイル(helloworld )をPodzillaのファイルブラウザから指定すれば実行できる。極めて簡単。
POSIX系のAPIやC++なども利用できるかやってみたところunistd.hのsleep関数などやSTLなども概ね利用できた。
iPod nanoに”Naoki Miyashita”の名前を1秒周期で表示しているところ。
さて、下準備ができたところで人工衛星の軌道計算をiPodでやらせてみようと考えた。理由は、先日宇宙ステーションの可視方向を携帯で計算するシステムを紹介したが、(1)サーバーサイドシステムであるため、携帯圏外では利用できない、(2)携帯というネットに接続できる端末なのにスタンドアロンプログラムなんていうナウくないプログラムは書きたくない、(3)iPodは持っているのに、携帯をもっていない極めて稀な人もいる(のか?)。以上の3点の理由のためにiPod用の軌道計算プログラムがあっても良いのではないかということで作ってみた。
結果としては、現状では失敗であった。画面でわかるように衛星の仰角・方位角などの値が表示されていない。原因は、iPodの浮動小数点演算に起因しているようだ。iPodに搭載のARMは、FPU(浮動小数点ユニット)が搭載されていない。そのためdouble, floatなどの浮動小数点演算を扱うことができないが、コンパイラが多くのコードを吐いて実現できるはずである(iPod programmingにもfloat, doubleは使えると書いてある)。しかし私のiPod nanoでは、軌道計算ほど複雑ではない単純な四則演算もまともに通らなかった。かなりの計算量がある軌道計算において浮動小数点が使えないのは致命的でなんとかこの問題を解決しなければならない。もう少し調査して解決したら追って報告したい(だれも興味ないと思うが・・)
このソフトウェアはスタンドアロンであるため、基本的に圏外や携帯を持っていない人でも気軽に軌道計算ができる一家に一台のシステムである。しかし、衛星の軌道要素を更新しなければならない。その仕組みとして下の方法を検討している。本当はこの部分を作って楽しむ予定だったのだが、思わぬ小数点問題で立ち止まってしまった。
・ヘッダ部などの体裁を整えたダミーのMP3ファイルを作る。そのファイルは音楽データではなく、実体は最新のTLE(軌道要素)を含んでいる。
・iPodをパソコンとつなぐ→iTunesが立ち上がる
・iTunesは、そのダミーMP3ファイルを音楽データだと勘違いしiPodに同期アップロードする。
・軌道計算ソフトは、同期された最新のTLEを含むMP3ファイルからTLE部分だけ抽出し、最新の軌道要素を用いて軌道計算する。
この方法により充電のためにiPodをパソコンとつなぐ度に最新のTLEがiPodに取り込まれる。もちろんTLEを公開しているNORADから定期的にダウンロードしMP3のダミーファイルを生成するプログラムが必要であり、そのプログラムをスタートアップ起動に設定しておけば、この部分も自動化できる。ここまでやりたかったが、先述の通り浮動小数点で進まなくなってしまったので保留である。
iPodにテトリス、オセロなど多数のゲームを含んだLinuxを入れたい方は連絡くだされば入れますよ。
(今度の木曜日夕方また宇宙ステーションが東京上空を通過しそうである。今日の夜にまた紹介します)
読んでいて全く意味が分かりませんでした。プログラミングも一つの小宇宙ですね。
宮古島では星空を眺めていて、宇宙の果てとかその向こうってどうなってるんだろうなー的なことを柄にも無く考えてしまいました。我々の住む宇宙みたいなものがひも状につながっているんでしたっけ?それか、泡の表面みたいになっているんだったか。
専門の方からするとアホ過ぎるコメントかもしれず恐縮です。
オリオン座を横切る流れ星がきれいに見えました。
dairaさん>
iPodという多くの方がお持ちの機器でありながら、内容が少しテクニカルになってしまいました。私なんかはプログラムがそれほど得意なのではないのですが、マニアックな人は本当にマニアックで、脱帽ものの方も多くいらっしゃいます。宇宙のような分野ではなく、人間が作ったコンピューターという分野を極めるのも楽ではないなと思うことがあります。
宮古島の写真見ましたが綺麗ですね。私も沖縄いったことがないのですよ。私の友達に恐ろしいほど沖縄マニアが多く(笑)今回のdairaさんのエントリーおよび彼ら(彼女ら)の熱い話を聞くと、やはり写真を行かねばならないなと思いました。最新の宇宙論では、我々の住むのは11次元空間に浮かぶ4次元の縄(ひも)らしいですよ。その概念を理解するのは難しいですが、宮古島でそのような果てのない感覚が想起されるのは素晴らしいことですね。綺麗なのでしょうね・・・。う~む。いってみたい!
よく分かりませんがゲームを入れられるって凄いですね!
昔のファミコンとか出来たらいいな~。
自分はi-podで映画を入れて楽しんでます。
横文字多すぎて僕の頭では・・・
俺の頭にもLinux入れたら計算早くなるかな?
nano用のlinaxは公開されてたんですね。
いやはや、iPodで人工衛星の軌道計算とは・・・
恐れ入りました。
ぜひGIGA BEAT版もよろしくお願いします^^
ばんちょ~さん>
最近のiPodはVideo再生できますよね。ファミコンのゲームも動かしている人がいるようですよ。iPodでスーパーマリオもできそうです。
http://www.youtube.com/watch?v=5eWsVhbc1H4
ヤスさん>
テクニカルな内容ですみません。一部の人にはどうやらウケているようなので、時々こういうエントリーも書きたいと思います。
じゅんじゅんさん>
nano用は自分のでも動いているのですが、公開されているのでそれを使うようにしました。GIGA BEATですか?(笑)ちょっと調べてみますが、機械を持っていないので難しいかも・・・。