id:n7shi:20100113でも取り上げましたが、OpenBSD上で他のアーキテクチャのカーネルをクロスビルドする手順はid:syuu1228:20090805にまとめられています。カーネルをビルドするときの環境変数が多いので、簡略化するための俺々スクリプトを作りました。
cross-env.mk
以下を/usr/src/cross-env.mkに保存します。
.if !defined(TARGET) error: @echo "Please set TARGET." @exit 1 .else all: cross-${TARGET} install: cross-${TARGET} cp cross-${TARGET} /usr/local/bin cross-${TARGET}: echo "#!/bin/sh" > $@ echo "TARGET=${TARGET} MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} MACHINE_ENDIAN=${TARGET_ENDIAN} ${CROSSENV} \$$@" >> $@ chmod 755 $@ .include "Makefile" .endif
使用方法
クロスgccまで従来通りに作ります。
cd /usr/src TARGET=loongson make cross-gcc
今回のMakefileを使用して、環境変数をセットするスクリプトを生成します。
TARGET=loongson make -f cross-env.mk install
スクリプトが/usr/local/bin/cross-loongsonにインストールされます。名前はTARGETで指定したものが反映されます。カーネルのビルド時にこのスクリプトを前置して呼び出します。
cd /usr/src/sys/arch/loongson/conf config GENERIC cd ../compile/GENERIC cross-loongson make depend all
これでカーネルが出来上がります。