netbsd on Raspberry Pi 2 日記(4)
クロスコンパイル環境の作成
とりあえず、NetBSD入れたらカーネルコンパイルするよね。ってことで、 ログ周りを設定する前に、コンパイル環境を作る
もちろん、Raspberry Pi 2自身でコンパイルとかしてもいんだけど、 SDファイルシステムのマシンだと遅そうなので、別なマシン上でクロスコンパイルすることにする。
NetBSD 7.0の母艦があれば、簡単で良いのだけど、手元にはなかったので、 ファイルサーバとして動かしている、FreeBSD 10.2 (amd64)に環境を作っていく。
ソースコードの取得と展開
NetBSD 7.0のソースを取得して展開する。 ソースコードは、netbsdのNetBSD-7.0/source/setsの下にあるので、 以下のような感じで取得する。もちろん、お好きなミラーサイトから取ってきていい。
$ mkdir ~/netbsdsrc $ cd ~/netbsdsrc $ wget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-7.0/source/sets/{gnusrc,sharesrc,syssrc,src}.tgz
で、アーカイブを解く。
例えば、/opt/NetBSD-7.0に展開するなら、以下のような感じになる。
/opt/NetBSD-7.0/usr/src
の下にソース一式が展開される。
$ mkdir /opt/NetBSD-7.0 $ cd /opt/NetBSD-7.0 $ for a in ~/netbsdsrc/*.tgz; do tar xfz $a; done
クロスコンパイラ作成
クロスコンパイル用のコンパイラなどを作っていく。
この例だと、/opt/NetBSD-7.0/usr/toolsarm
に、コンパイラなどが出来上がる
$ cd /opt/NetBSD-7.0/usr/src $ ./build.sh -O ../objarm -T ../toolsarm -m evbarm -a earmv7hf -U -u tools
kernel作成
kernelの作成自体は、他のNetBSDとかと同じ。
/opt/NetBSD-7.0/usr/src/sys/arch/evbarm/conf/
の下のRPI2
がRaspberry Pi 2用のカーネルなので、
これをコピーして編集後、build.shでカーネルをコンパイルする
$ cp RPI2 MYKERNEL $ vi MYKERNEL 好きなように編集する $ ./build.sh -O ../objarm -T ../toolsarm -m evbarm -a earmv7hf -U kernel=MYKERNEL
で、
/opt/NetBSD-7.0/usr/objarm/sys/arch/evbarm/compile/MYKERNEL/netbsd.bin
にカーネルができているので、これを、ブート用のカーネルにコピーして再起動する。
$ sudo cp /boot/kernel7.img /boot/kernel7.old
$ sudo cp netbsd.bin /boot/kernel7.img
$ sync; sudo shutdown -r now