Fedora上でNetBSD/evbarmをビルドしたのでその記録.ここを参照した.
Linux上でのクロスコンパイルなんだけど,見た目Linuxで動作させている感じが全く現れていない.というか何の問題もなくクロスビルドできちゃうところがすごい.
ソースの取得
CVSから.コマンドはこんな感じ.
$ cd work/netbsd/current
$ export CVSROOT=anoncvs@anoncvs.NetBSD.org:/cvsroot
$ export CVS_RSH=ssh
$ cvs checkout -P src
クロスビルド環境の構築
$ cd src
$ ./build.sh -O ../objarm -m evbarm -j 4 -u -U tools
./build.sh –help するといろいろ説明が出てくるけど,-uはcleanしない,-Uは非rootユーザーでビルドを実行する,の意味.
リリースビルド
$ cd src
$ ./build.sh -O ../objarm -m evbarm -j 4 -u -U release
初回ビルドだと結構時間がかかるが一度ビルドすると差分ビルドになるので時間はかなり短縮される.
ビルドが完了すると,../objarm/releasedir/evbarm/binary/gzimg/rpi.img.gz に SDカードのイメージができる.
SDカードの作成
Windows環境でイメージファイルをSDに焼くツールはいろいろあるけど,今回使ったのは win32diskimager というツール.USBメモリーやSDカードなどのフラッシュメモリの消去やチェックができるChkFlshというツールでも書き込み可能.
どのツールを使うにせよ,SDにパーティションが切られているとうまくかけないので,Windows標準(Vista以降?)のdiskpartコマンドでパーティションを消去する.
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 298 GB 0 B
ディスク 1 オンライン 947 MB 0 B
ここでは1GBのSDカードを入れたのでディスク1を選択する.
DISKPART> select disk 1
ディスク 1が選択されました。
削除する前に,念のためパーティションを確認する.
DISKPART> list part
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 プライマリ 56 MB 4096 KB
消して良さそうなら削除する (次のコマンドを実行した瞬間に反映されるのでEnterを押すときは慎重に)
DISKPART> clean
DiskPart はディスクを正常にクリーンな状態にしました。
いよいよrpi.imgの焼きこみ.ドライブ文字とファイルのパスを指定して書き込んでおしまい.
ファームウェアの入れ替え
このままSDカードに焼いても手元のRaspberry Piはブートせず.どうやらファームウェアがダメみたいなので,ファームウェアを最新のものに入れ替える.
ファームウェアはSD上のMSDOSファイルシステム(64MB)においてあるので,GitHubから持ってきて差し替える.
具体的には,bootフォルダのkernel.img以外をダウンロードしてSDに突っ込むだけ.
これで無事カーネルが起動してOSが立ち上がった.
以下,おまけ.
ソースを更新するには
$ cvs update -dP
カーネルを作り直すには?
src/sys/arch/evbarm/conf/ にコンフィグレーションファイルをおいて,
./build.sh -O ../objarm -m evbarm -j 4 -u -U kernel=<コンフィグレーションファイル名>
を実行すると,../objarm/sys/arch/evbarm/compile/<コンフィグレーション>/netbsd.bin ができるので,これを kernel.img にリネームしてSDカードに置く.