ARMクロスコンパイル環境

いつか使う日のためにメモしておく。

まずARMマシン用のクロスコンパイラを生成する。386用のコマンド名は8?だったけど、ARM用は5?になる。

% cd /sys/src/cmd
% for(i in 5?) @{ cd $i; mk clean; objtype=$cputype mk install; mk clean }
% lc /bin/5?
5a 5c 5i 5l

コンパイルはあっという間に終わる。続いて、

% cd /sys/src
% objtype=arm mk install

で、システム一式が/arm以下にインストールされる。

けど、なんかunvacのinstallに失敗している。なぜかcmd/unvacディレクトリがからっぽだな。とりあえず無視して深追いしない*1

:
mk unvac
mk: don't know how to make 'install' in directory /sys/src/cmd/unvac
mk: for(i in 1a ... : exit status=rc 7957: rc 18096: mk 18098: error
mk: test -e 8._cp ... : exit status=rc 6819: mk 7945: error
mk: date for (i ... : exit status=rc 613: rc 6806: mk 6807: error

これでクロスコンパイルできるようになる。まぁ、実行するすべがないけど。

% 5c hello.c
% 5l hello.5
% file 5.out
5.out: arm plan 9 executable
% 5.out
5.out: exec header invalid

参考までにSheevaPlug用のカーネルコンパイルする方法は次の通り。

% cd /sys/src/9/kw
% mk 'CONF=plug'
:
% file s9plug
s9plug: ARM plan 9 boot image
% file 9plug
9plug: binary

U-bootからのブート方法はbooting(8)に書かれている通りで、tftpコマンドで9plugを0x800000番地にロードして、go 0x800000すればよい*2

SheevaPlugと言えばinferno-kirkwoodってプロジェクトができていた。というかむしろこちらが先で、このコードをPlan 9にポートしたというが正しいのかな。4th IWP9で発表されていた(「Inferno for the Sheevaplug」)。

(追記:2010-03-11)ちなみにウィンドウを自動的にスクロールするようにしておくこと。つまり中ボタンのメニュから「noscroll」を選択して「scroll」に変更する。これをしないと実行もブロッキングされるようだ。

*1:これはディレクトリを削除しておけばよいみたい。あとupasの/mail/libへgone.*をコピーするところでpermission deniedになる。これはコメントアウトすればとりあえず回避できる。

*2:U-bootイメージ形式にする必要はない。