o 個人用のメモなので不明な点多いと思いますがごめんなさい 0. kernelを作る options MEMORY_DISK_HOOKS options MEMORY_DISK_IS_ROOT options MINIROOTSIZE=大きさ(block) 1. crunch binaryをつくる (/usr/src/distrib/i386/floppies/ramdisk/ 参照) - crunchgenのconfig fileを書く /bin, /sbin が必要なのでこのへんを progs に書く 変な呼ばれかた(あるいは test と [ は同じとか)は ln に書く. shellは _cshとかいろいろ考えられるのでcrunchしないほうが無難かも. - crunchgen すると makefileができるので make 2. root filesystem の imageを作る - 適切な大きさの(MINIROOTSIZEを越えないように)ファイルを作る. - vnconfig して newfs.上で作ったファイルの大きさに適合したdiskを disktabに書いておくと楽 - mountして / に必要なファイルを押し込む. MAKEDEVしわすれないように. とりあえずイメージをffs上に組んでtarでcopyしたりした. 3. rootfsのimageをkernelに組込む - mdsetimage -v netbsd rootfs.img でできあがりです. 付録: crunchgenの設定ファイル ---8<--- # ramdiskbin.conf - unified binary for the install ramdisk srcdirs bin sbin sys/arch/i386/stand progs cat chio chmod cp csh date dd df domainname echo ed expr hostname kill ksh ln ls mkdir mt mv pax pwd rcmd rcp rm rmdir sh sleep stty sync test progs atactl badsect clri disklabel dump fsck fsck_ext2fs fsck_ffs fsck_lfs fsck_msdos fsdb fsirand ifconfig init ldconfig lmcctl mknod modload modunload mount mount_ados mount_cd9660 mount_ext2fs mount_fdesc mount_ffs mount_filecore mount_kernfs mount_lfs mount_msdos mount_nfs mount_null mount_procfs mount_umap mount_union newfs newfs_lfs newfs_msdos ping raidctl reboot restore rndctl route routed scsictl shutdown slattach swapctl ttyflags tunefs umount wsconsctl # "special" gzip is actually larger assuming nothing else uses -lz.. #special gzip srcdir distrib/utils/x_gzip ln pax tar ln sh -sh ln csh _csh ln test [ ln mount_cd9660 cd9660 ln mount_ffs ffs ln mount_msdos msdos ln mount_nfs nfs ln mount_kernfs kernfs ln newfs mount_mfs ln reboot halt ln restore rrestore ln swapctl swapon ln mount_ffs mount_ufs ln dump rdump # libhack.o is built by Makefile & included Makefile.inc libs libhack.o -ledit -lutil -lcurses -ltermcap -lrmt -lcrypt -ll -lm ---8<--- disktabエントリ(6Mbyte): md6m:\ :ty=floppy:se#512:nt#1:rm#300:ns#12288:nc#1:\ :pa#12288:oa#0:ba#4096:fa#512:ta=4.2BSD:\ :pb#12288:ob#0:\ :pc#12288:oc#0: ---8<--- 2, 3 のための Makefile IMAGE= ramdisk.fs MOUNT_POINT?= /mnt # DEV/RDEV file system device, CDEV/RDEV vnconfig device VND?= vnd0 VND_DEV= /dev/${VND}a VND_RDEV= /dev/r${VND}a VND_CDEV= /dev/${VND}d VND_CRDEV= /dev/r${VND}d MDEC= ${DESTDIR}/usr/mdec DISKTAB= ${.CURDIR}/disktab DISKSIZE= 12288 DISKTYPE= md6m BASEROOT= ./mfsroot KERN?= /usr/src/sys/arch/i386/compile/VAI-O-LA+RAMDISK+V6/netbsd all: ramdisk: dd if=/dev/zero of=${IMAGE} count=${DISKSIZE} vnconfig -v -c ${VND_CDEV} ${IMAGE} 512/${DISKSIZE}/1/1 disklabel -f ${DISKTAB} -rw ${VND_CDEV} ${DISKTYPE} newfs -B le -m 0 -o space -i 5120 -c 1 ${VND_RDEV} ${DISKTYPE} ${MDEC}/installboot -v -f ${MDEC}/biosboot.sym ${VND_RDEV} mount ${VND_DEV} ${MOUNT_POINT} (cd ${BASEROOT} ; tar cf - . ) | (cd ${MOUNT_POINT}; tar xvBpf -) -mkdir ${MOUNT_POINT}/dev; cp -p /dev/MAKEDEV* ${MOUNT_POINT}/dev; (cd ${MOUNT_POINT}/dev; sh MAKEDEV all;) -mkdir -p ${MOUNT_POINT}/usr/mdec; cp -p /usr/mdec/biosboot.sym ${MOUNT_POINT}/usr/mdec cp -p /usr/mdec/mbr ${MOUNT_POINT}/usr/mdec cp -p /usr/mdec/mbr_bootsel ${MOUNT_POINT}/usr/mdec @echo "" @df -i ${MOUNT_POINT} @echo "" umount ${MOUNT_POINT} vnconfig -u ${VND_CDEV} init: dd if=/dev/zero of=${IMAGE} count=${DISKSIZE} vnconfig -v -c ${VND_CDEV} ${IMAGE} 512/${DISKSIZE}/1/1 disklabel -Rr ${VND_CDEV} ${DISKLABELFILE} newfs ${VND_RDEV} config: vnconfig -v -c ${VND_CDEV} ${IMAGE} 512/${DISKSIZE}/1/1 mount ${VND_DEV} ${MOUNT_POINT} unconfig: -umount -f ${MOUNT_POINT} -vnconfig -u ${VND_DEV} netbsd: ${KERN} ${IMAGE} cp ${KERN} netbsd mdsetimage -v netbsd ${IMAGE} # strip netbsd # gzip netbsd clean: -rm *~ netbsd netbsd.gz ${IMAGE}