FreeBSDによるNetBSD/hpcmipsのクロスコンパイル

FreeBSDによりNetBSD/hpcmipsをクロスコンパイルした時のメモです。

ソースツリーの取得

FreeBSDで、anoncvsからNetBSD-currentのソースツリーを取得します。

 $ cvs -d :pserver:anoncvs@anoncvs.netbsd.org/cvsroot login
 anoncvs                 <-- password入力
 $ cvs -z5 -d :pserver:anoncvs@anoncvs.netbsd.org/cvsroot co src

備考:以下では、ソースツリーのディレクトリは#{span color_red $TOP/src}と表します。

クロスコンパイラの作成

FreeBSD上に、NetBSD/hpcmipsのクロスコンパイル環境を作成する。

 $ cd $TOP/src
 $ ./build.sh -m hpcmips -T $TOP/cross tools

コンパイルが終わると以下のメッセージが表示されました。

===> Summary of results:
         build.sh command: ./build.sh -m hpcmips -T /export/share/NetBSD-R430/cr
oss tools
         build.sh started: Mon May 31 09:24:00 JST 2004
         No $TOP/cross/bin/nbmake, needs building.
         Bootstrapping nbmake
         MACHINE:          hpcmips
         MACHINE_ARCH:     mipsel
         TOOLDIR path:     $TOP/cross
         DESTDIR path:     $TOP/src/destdir.hpcmips
         RELEASEDIR path:  $TOP/src/releasedir
         Created $TOP/cross/bin/nbmake
         makewrapper:      $TOP/cross/bin/nbmake-hpcmips
         Updated $TOP/cross/bin/nbmake-hpcmips
         Tools built to $TOP/cross
         build.sh started: Mon May 31 09:24:00 JST 2004
         build.sh ended:   Mon May 31 10:36:56 JST 2004
===> .

カーネルコンパイル&インストール

  • カーネルコンパイル とりあえず GENERIC のカーネルをコンパイルする。

      $ cd $TOP/src
      $ ./build.sh -m hpcmips kernel=GENERIC
    
  • カーネルインストール hpcmipsマシン、私のはNEC MobileGear R430で、母艦マシンのディスクをnfsマウントして、カーネルをインストールする。

  • R430

     # mount -t nfs <FreeBSD Machine>:$TOP /mnt
     # mv /netbsd /oldbsd
     # mv /mnt/src/sys/arch/hpcmips/compile/GENERIC/netbsd /
    
  • R430をリブートし、新カーネルでNetBSDを起動する。

  • dmesg

    Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
        The NetBSD Foundation, Inc.  All rights reserved.
    Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.
    
    NetBSD 2.0F (GENERIC) #0: Mon May 31 11:31:30 JST 2004
            jun1@opti.sasaj.com:/usr/src/sys/arch/hpcmips/compile/GENERIC
    NEC MC-R430 (NEC VR4121 rev1.2 168.521MHz)
    total memory = 32768 KB
    avail memory = 28276 KB
    mainbus0 (root)
    cpu0 at mainbus0: NEC VR4100 CPU (0xc60) Rev. 6.0 with software emulated floatin
    g point
    cpu0: 16KB/16B direct-mapped L1 Instruction cache, 32 TLB entries
    cpu0: 8KB/16B direct-mapped write-back L1 Data cache
    vr4102ip0 at mainbus0
    vrbcu0 at vr4102ip0 addr 0x0b000000-001f
    vrbcu0: CPU 168.521MHz, bus 28.086MHz, ram 56.173MHz
    vrcmu0 at vr4102ip0 addr 0x0b000060-007f
    vrgiu0 at vr4102ip0 addr 0x0b000100-011f
    button1 at vrgiu0 port=3 id=13 active=high sense=edge
    pwctl0 at vrgiu0 port=46 id=0 on=1
    pwctl3 at vrgiu0 port=44 id=6 on=1
    vrdmaau0 at vr4102ip0 addr 0x0b000020-0037
    vrdcu0 at vr4102ip0 addr 0x0b000040-004b
    vrrtc0 at vr4102ip0 addr 0x0b0000c0-00df
    vrkiu0 at vr4102ip0 addr 0x0b000180-019f
    hpckbd0 at vrkiu0
    wskbd0 at hpckbd0: console keyboard
    vrpmu0 at vr4102ip0 addr 0x0b0000a0-00bf
    vrdsu0 at vr4102ip0 addr 0x0b0000e0-00e7
    vrled0 at vr4102ip0 addr 0x0b000240-024f
    vrpiu0 at vr4102ip0 addr 0x0b000120-013f, 0x0b0002a0-02bf
    wsmouse0 at vrpiu0 mux 0
    mqvideo0 at vr4102ip0 addr 0x0a000000-7fffff: MQ200 Rev.00 video controller, con
    sole
    mqvideo0: framebuffer address: 0xaa180100
      PLL1: 47.001MHz(0x0e98292a, 12.288MHzx153/ 40)
      PLL2: 30.021MHz(0x00d60a30, 12.288MHzx215/ 88)
      PLL3: disable
       MEM: 30.021MHz(PLL2)
        GE: 30.021MHz(PLL2)
       GC1: disable
       GC2: 18.800MHz(PLL1/2.5/1), FP
    hpcfb0 at mqvideo0: 640x240 pixels, 65536 colors, 80x24 chars
    wsdisplay0 at hpcfb0 kbdmux 1: console (std, vt100 emulation), using wskbd0
    wsmux1: connecting to wsdisplay0
    vrc4172pwm0 at vr4102ip0 addr 0x15003880-3885
    vraiu0 at vr4102ip0 addr 0x0b000160-017f
    audio0 at vraiu0: half duplex
    vrisab0 at vrgiu0: ISA port 0x14000000-0x18000000 mem 0x10000000-0x14000000
    isa0 at vrisab0
    pcic0 at isa0 port 0x3e0-0x3e1 iomem 0x70000-0x73fff irq 589827
    pcic0: controller 0 (Ricoh RF5C396) has sockets A and B
    pcmcia0 at pcic0 controller 0 socket 0
    pcmcia1 at pcic0 controller 0 socket 1
    btnmgr0 at mainbus0
    wskbd1 at btnmgr0 mux 1
    wskbd1: connecting to wsdisplay0
    hpcapm0 at mainbus0: pseudo power management module
    apmdev0 at hpcapm0: Power Management spec V1.2
    pcic0: using irq 589827 for socket events
    wdc1 at pcmcia0 function 0pcic0: port 0x14000400-0x1400040f
    
    atabus0 at wdc1 channel 0
    pcmcia0: card irq 3
    ne0 at pcmcia1 function 0pcic0: port 0x14000420-0x1400042f
    pcic0: port 0x14000430-0x1400043f
    
    ne0: D-Link DE-660 Ethernet
    ne0: Ethernet address 00:80:c8:87:11:17
    wd0 at atabus0 drive 0: <IBM-DMDM-10340>
    wd0: drive supports 16-sector PIO transfers, LBA addressing
    wd0: 342 MB, 695 cyl, 16 head, 63 sec, 512 bytes/sect x 700560 sectors
    wd1 at atabus0 drive 1: <ST506>
    wd1: drive supports 1-sector PIO transfers, chs addressing
    wd1: 69632 KB, 1024 cyl, 8 head, 17 sec, 512 bytes/sect x 139264 sectors
    boot device: wd0
    root on wd0a dumps on wd0b
    pcmcia0: card irq 3
    pcmcia0: card irq 3
    pcmcia0: card irq 3
    pcmcia0: card irq 3
    WARNING: preposterous clock chip time
     -- CHECK AND RESET THE DATE!
    root file system type: ffs
    pcmcia1: card irq 3
    

ユーザーランドの構築

ユーザーランドを構築する。

 $ cd $TOP/src
 $ ./build.sh -m hpcmips distribution
もし、ktraceでエラーが出るなら、以下のコマンドを実行し、すでにremoveされたディレクトリを削除してから、上記のコマンドを実行することを進める。
 $ cd $TOP/src
 $ cvs update -P

コンパイルが終わると以下のメッセージが表示されました。

{{{
===> Summary of results:
         build.sh command: ./build.sh -m hpcmips distribution
         build.sh started: Mon May 31 17:10:22 JST 2004
         No nonexistent/bin/nbmake, needs building.
         Bootstrapping nbmake
         MACHINE:          hpcmips
         MACHINE_ARCH:     mipsel
         TOOLDIR path:     $TOP/src/tooldir.FreeBSD-5.2-CURRENT-i386
         DESTDIR path:     $TOP/src/destdir.hpcmips
         RELEASEDIR path:  $TOP/src/releasedir
         Created $TOP/src/tooldir.FreeBSD-5.2-CURRENT-i386/bin/nbmake
         makewrapper:      $TOP/src/tooldir.FreeBSD-5.2-CURRENT-i386/bin/nbmake
-hpcmips
         Updated $TOP/src/tooldir.FreeBSD-5.2-CURRENT-i386/bin/nbmake-hpcmips
         Successful make distribution
         build.sh started: Mon May 31 17:10:22 JST 2004
         build.sh ended:   Tue Jun  1 13:15:15 JST 2004
===> .

ユーザーランドのインストール

FreeBSDのディスクをnfsマウントして、ユーザランドをインストールする。ユーザランドが$TOP/src/destdir.hpcmips/ にインストールされているため、以下のようにインストールする。

 # mount -t nfs <FreeBSD Machine>:$TOP /mnt
 # cd /
 # ( cd /usr/src/destdir.hpcmips; tar cpf - . ) | tar xpvf -

注)これ、止めた方がいいです。/usr/src/destdir.hpcmips以下の容量は約237MBです。ディスク容量に余裕のある方はいいのですが、私のようなディスク容量に余裕がない方は、入らないファイルを削除してから上記コマンドを実行してください。
削除可能なファイルとしては以下の物が考えられます。
{{{
/usr/share/man/ 以下
/usr/share/groff_font/ 以下
/usr/share/tmac/ 以下
/usr/share/examples/ 以下
/usr/share/doc/ 以下
/usr/share/game/ 以下
/usr/share/info/ 以下
/usr/share/sushi/ 以下
/usr/X11R6/ 以下
/usr/game/ 以下
/var/game/ 以下
}}}
以上を削除すると、約169MBになります。
予備として
{{{
/usr/share/i18n/
/usr/share/locale/
/usr/share/zoneinfo/
}}}

/etcのアップグレード

今までの/etc/を別の名前でコピーしておき、新/etc/をコピーする。

忘れずに、rootのパスワードや自分のアカウントを追加する。それと、/etc/fstabを旧/etc/から新/etc/へコピーしておく。これを行っておかないと、正常に起動できなくなる。(#{span color_red 私はこれではまってしまった})

現在の不具合-2004/6/5

  1. cshでaliasされているコマンドを使用するとcore dumpする。

    r430% alias ll
    ls -l
    r430% ll
    Segmentation fault (core dumped)
    r430%