[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>