takanaoの作業ログ

takanaoの作業のログなどをつづってみます

netbsd on Raspberry Pi 2 日記(4)

ロスコンパイル環境の作成

とりあえず、NetBSD入れたらカーネルコンパイルするよね。ってことで、 ログ周りを設定する前に、コンパイル環境を作る

もちろん、Raspberry Pi 2自身でコンパイルとかしてもいんだけど、 SDファイルシステムのマシンだと遅そうなので、別なマシン上でクロスコンパイルすることにする。

NetBSD 7.0の母艦があれば、簡単で良いのだけど、手元にはなかったので、 ファイルサーバとして動かしている、FreeBSD 10.2 (amd64)に環境を作っていく。

ソースコードの取得と展開

NetBSD 7.0のソースを取得して展開する。 ソースコードは、netbsdNetBSD-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/ の下のRPI2Raspberry 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