RAMDISK 版 カーネル make 編 cross kit を使って RAMDISK 版 カーネル を make する手順書です。 --------------------------------------------------------------------- 前準備) まずは環境変数をつぎのようにセット setenv MACHINE hpcmips setenv MACHINE_ARCH mips setenv CRS /usr/local/mipsel-netbsd 次に、config mdsetimage を作ります。 config は、最新版の config を使う必要があります。 ftp://ftp.iij.ad.jp/pub/NetBSD/NetBSD-current/src/usr.sbin/config などを使ってください。 config の make は、 $CRS/bin/make -I $CRS/share/mk.cross で OK できあがった $CRS/bin にインストールしておきます。 mdsetimage は、 まず、Makefile に CFLAGS+= -I. SRCS+= nlist_elf32.c を付け加えます。 つぎに extern.h を編集して、NLIST_AOUT を undef , NLIST_ELF32 を define します。 $CRS/include から machine/elf_machdep.h mips/elf_machdep.h sys/exec_elf.h を、コピーしてきます。 さらに libc/gen/nlist_elf32.c をコピーしてきて編集します。 #include "extern.h" を追加 つぎに mdsetimage.c を編集します。 __fdnlist を __fdnlist_elf32 に これで、$CRS/bin/make -I $CRS/share/mk.cross とすることで make できます。 config 同様 $CRS/bin/ にインストールしておきます。 --------------------------------------------------------------------- ファイルシステムイメージの作成) 次に RAMDISK のイメージを作ります。 /dev/vn0 を使えるようにホストのカーネルを re-config しておく必要があります。 イメージのサイズは、cruncgen で作ったコマンドが入ることを考えて、 2.5M ぐらいにしました。 dd if=/dev/zero of=mfs-mg2 count=5120 vnconfig -s labels /dev/vn0 vnconfig /dev/vn0 mfs-mg2 とすることで、イメージファイルを raw デバイスとして扱うことができる ようになります。 ラベルを切ります。 /etc/disktab に mfs-mg2|hpcmips Disk Image|\ :ty=winchester:se#512:nt#4:ns#32:nc#40:rm#3600:\ :pa#5120:oa#0:ba#16384:fa#2048:ta=4.2BSD: \ :pb#0:ob#0:tb=swap:\ :pc#5120:oc#0: を追加して、 disklabel -B -w vn0 mfs-mg2 disklabel -B -w vn0 mfs-mg2 とします。よくわかりませんが、私は、2 回ぐらい同じことをしています。 一応 16K ページサイズということで、ブロックサイズ16K フラグメントサイズ 2K の設定をしてみました。 つぎに newfs デフォルトでは、i-node を沢山作りすぎるので、 newfs -i 65536 /dev/rvn0a とかして、i-node を小さめにします。 あとは、mount して ファイルを作っていきます。 まず、pmax の etc.tgz を展開しておきます。 つぎに、usr/src/etc/etc.i386/ から MAKEDEV , disktab fstab.wd ttys ぐらいを コピーします。 最後に cd dev sh MAKEDEV std wd0 pty0 ぐらいで、デバイスファイルを作成しておきます。 ------------------------------------------------------------------------- あとコマンドなどを作り込んでいきますが、 私は cruncgen で いろいろなコマンドを入れてみました。 サイズは、1972112 バイト。テスト用に gawk など入れているので 大きくなってしまっています。 付録に cruncgen の conf を付けておきます。 # 問題はあるはずですので、使いながら修正したいと思います。 ------- ここから srcdirs ../bin ../sbin srcdirs ../gnu/usr.bin progs cat chmod cp date dd df domainname echo ed expr hostname progs kill ln ls mkdir mv ps pwd rcp rcmd rm rmdir sh progs sleep stty sync test ln test [ ln sh -sh progs disklabel dmesg edlabel fsck progs ifconfig init mknod mount ping reboot route progs shutdown swapctl ttyflags umount progs mount_ffs newfs fsck_ffs mount_kernfs mount_msdos fsck_msdos progs mount_nfs mount_procfs ln newfs mount_mfs ln mount_msdos msdos ln mount_ffs ffs ln mount_nfs nfs progs tar gawk grep gzip ln grep fgrep ln grep egrep ln gzip gunzip libs -lgnuregex -ll -ledit -ltermcap -lipx -lkvm libs -lcrypt -ltelnet -lutil -ll -lm ------- ここまで あとしまつ) umount と vnconfig -u /dev/vn0 は忘れないようにしましょう。 --------------------------------------------------------------------- カーネル make config は、RAMDISK を使います。 options COMPAT_386BSD_MBRPART options MINIROOTSIZE=5120 を忘れないように変更します。 config RAMDISK としたところで、 ../compile/RAMDISK/Makefile でうまくいかない点をちょいと直します。 1. 最初の行に .include を入れる。 2. -Werror を消しておく。 できたカーネルと ファイルシステムイメージを mdsetimage で合わせて、 おしまいです。 -------------------------------------------------------------------- ためしてみましたが、 シリアルコンソールがないと 結局私の環境では、 Enter pathname or shell or RETURN for sh: で終ってしまいます。 # これは、rootfs がマウントできて、いちおう成功したということです。 # でもキー入力がまだできないので、この先を見ることができません。