[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pbsd-mg2] Re: cross compile env.
> | たけむらです。
> |
> | MIPS BSD 用のバイナリの作成環境の件です。
坂本さんのパッケージと、鈴木さんのメモを元に、
環境を構築した際のメモをお送りします。
試行錯誤が入っていますので、ちょっと「手順書」とは
いいがたいもです。
これから環境を構築する人は、このメモを修正して、
(不要な手順を省略し、足りないところは補う)
手順書に仕立てるように意識してメモをとってもらえると
嬉しいです。
あと、わけもわからず、適当に問題を解決している
(適当にコピーしたり、リンクを作成したり)箇所が
何箇所かあるので、疑問に思う人は調べてみて下さい。
----------------------------
Cross compile環境の作成
1.3.2 の CD-ROM に入っていた GNUSRC.TGZ には gnu/dist/gcc がない。
NetBSD-current のソースを
ftp で全部取ってきた。CD-ROM の物は PKGSRC.TGZ だけ使う。
bin.tar.gz,gnu.tar.gz,sbin.tar.gz,usr.bin.tar.gz,config.tar.gz,
include.tar.gz,share.tar.gz,usr.sbin.tar.gz,distrib.tar.gz,
lib.tar.gz,sys.tar.gz,etc.tar.gz,libexec.tar.gz,top-level.tar.gz,
games.tar.gz,regress.tar.gz
作業ディレクトリに展開する。
$somewhere/mips_root/usr/include/pmax を手で作成した。
$ cd $somewhere/mips_src
$ tar xzvf gnu.tar.gz
$ tar xzvf sys.tar.gz
$ tar xzvf share.tar.gz
$ tar xzvf include.tar.gz
$ tar xzvf config.tar.gz
:
:
$ tar xzvf PKGSRC.TGZ ; これは CD-ROM のでも大丈夫かな?
$ mkdir $somewhere/mips_root/usr/include/pmax
pbsd-mg2 で紹介された坂本さんのクロスコンパイル環境パッケージ、
cross-netbsd.tgz を展開する。
$ cd $somewhere/mips_src/usr/src/pkgsrc
$ mkdir cross
$ cd cross
$ tar xzvf cross-netbsd.tgz
NetBSD 1.3.2 の CD-ROM の 2 枚目から、 以下のファイルを
$somewhere/usr/src/pkgsrc/distfiles にコピーし、 devel/bison, make,
gtexinfo を make install する。 /usr/pkg/bin にインストールされるので、
PATH に加えておく。
bison-1.25.tar.tz
make-3.76.1.tar.gz
texinfo-3.12.tar.gz
Makefile の include を /usr/share/mk から探してしまう部分があるので、
$somewhere/mips_src/usr/src/sys/share/mk/bsd.kinc.mk をコピー。
(元の Makefile を修正するのが正しい!?)
cp $somewhere/mips_src/usr/src/sys/share/mk/bsd.kinc.mk /usr/share/mk
CD-ROM から install された config では -current の config file を
処理できないため、 usr/src/usr.sbin/config で make && make install する。
/usr/sbin/config が新しいものに置き代わる。
usr/src/usr.bin/elf2aout でも make && make install する。
これも新しいコマンドか。
以下の環境を設定する。
somewhere=/home/takemura
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/pkg/bin
TARGET_MACHINE_ARCH=mips
TARGET_MACHINE=pmax
ALLSRC=$somewhere/mips_src/usr/src
TARGET_ROOT=$somewhere/mips_root
OBJECT_FMT=ELF
MACHINE_GNU_ARCH=mipsel
root で usr/src/pkgsrc/cross/cross-netbsd で make && make install する。
/usr/pkg/mipsel-netbsd/bin あたりに compilerなどが install される。
/usr/pkg/mipsel-netbsd/bin/* は/usr/pkg/bin/mipsel-netbsd-* とハードリンク
されている。
Makefile は gcc だけでなく、cpp も呼び出すので、適当なリンクを作成する。
CPP=mipsel-netbsd-cpp とした方がいいのかもしれない。
kernel 作成後にサイズを表示する size もリンクしておく。
egcs-2.91.58/include は不用と思われる(?)ので、リネームする。
ln -s /usr/pkg/lib/gcc-lib/mipsel-netbsd/egcs-2.91.58/cpp \
/usr/pkg/mipsel-netbsd/lib/cpp
ln -s /usr/pkg/bin/mipsel-netbsd-size /usr/pkg/mipsel-netbsd/bin/size
mv /usr/pkg/lib/gcc-lib/mipsel-netbsd/egcs-2.91.58/include \
/usr/pkg/lib/gcc-lib/mipsel-netbsd/egcs-2.91.58/include.foo
/usr/pkg/mipsel-netbsd/bin にパスを通して、compiler を gcc に指定する。
PATH=/usr/pkg/mipsel-netbsd/bin:/usr/pkg/mipsel-netbsd/lib:$PATH
CC=gcc
usr/src/lib/libc で MACHINE_ARCH=mips として make する。
make install すると /usr/lib に install されてしまうので、コピーする。
$ cd $somewhere/usr/src/lib/libc
$ export MACHINE_ARCH=mips
$ make ; ←結構時間がかかる
$ cp libc* /usr/pkg/mipsel-netbsd/lib
$ cd ../csu
$ make
$ cd mips
$ install -c -o bin -g bin -m 444 crt0.o gcrt0.o crtbegin.o crtend.o
/usr/pkg/mipsel-netbsd/lib
$ cd /usr/pkg/mipsel-netbsd/lib
$ ln crtbegin.o crtbeginS.o
$ ln crtend.o crtendS.o
$ ln crtend.o crtn.o
ここまでで、gcc hello.c とやると a.out が出来るようになる。 od
でみると、先頭に ELF の文字が見える。(ELF のマジックナンバ)
mipsel-netbsd-objdump -d で見たところ、mips でコンパイルされているようだ。
実行できないので、これ以上は確かめられない...
ここから先は root で作業する必要はない。
MACHINE_ARCH=mips は必要なので、注意。
usr/src/sys/arch/pmax/conf で config を実行する。たとえ#aホ config GENERIC。
usr/src/sys/arch/compile/GENERIC が作成される。
とりあえず make depend && make としてみると、 machine/asm.h
がない。原因はまったく不明だが、
$shomewhere/mips_src/usr/src/sys/arch/mips/include/asm.h をコピーした。
最後に elf2ecoff: not found などとエラーになるが、ELF と aout のカーネルは
出来ているようだ。
これ以降、下記のようにして、いつでも kernel を作成できる。
$ cd $somewhere/mips_src/usr/src/sys/arch/pmax/compile/GENERIC
$ export PATH=/usr/pkg/mipsel-netbsd/bin:/usr/pkg/mipsel-netbsd/lib:$PATH
$ export MACHINE_ARCH=mips
$ export CC=gcc
$ make
----------------------------
たけむら<takemura@ca2.so-net.ne.jp>