1# Makefile - set up a vkernel environment for testing the vkernel 2# 3 4# require it to be specified 5SRCDIR ?= ${.CURDIR}/../.. 6ROOTSIZE ?= 512M 7PHYSMEM ?= 128m 8NCPUS ?= 2 9 10all: help 11 12.if ${MACHINE_ARCH} == "i386" 13USEKERNEL=VKERNEL 14.else 15USEKERNEL=VKERNEL64 16.endif 17 18scratch: world kernel install 19 @echo "Run the environment with:" 20 @echo "make VKDIR=${VKDIR} run" 21 22quickw: quickworld quickkernel reinstall reinstallkernel 23 @echo "Run the environment with:" 24 @echo "make VKDIR=${VKDIR} run" 25 26quick: quickkernel reinstallkernel 27 @echo "Run the environment with:" 28 @echo "make VKDIR=${VKDIR} run" 29 30help: 31 @echo "Setup Instructions:" 32 @echo "" 33 @echo " setenv ROOTSIZE size (optional)" 34 @echo " setenv VKDIR target_dir" 35 @echo "" 36 @echo "Meta target components:" 37 @echo "" 38 @echo " help - this help" 39 @echo " clean - clean up" 40 @echo " scratch - build and install everything from scratch" 41 @echo " (this is absolutely everything)" 42 @echo " quick - incremental kernel build & reinstall" 43 @echo " quickw - incremental world & kernel build & reinstall" 44 @echo " run - run vkernel with VKDIR/root.img" 45 @echo " mount - mount VKDIR/root.img at VKDIR/root" 46 @echo " umount - unmount" 47 @echo "" 48 @echo "Individual target components:" 49 @echo "" 50 @echo " world - build the world from scratch" 51 @echo " root - create a new, empty root.img" 52 @echo " install - install a world & kernel" 53 @echo " into root.img" 54 @echo " kernel - build vkernel" 55 @echo " quickworld - incremental rebuild world" 56 @echo " quickkernel - incremental rebuild kernel" 57 @echo " reinstall - reinstall world into root.img" 58 @echo " (just the installworld piece)" 59 @echo " reinstallkernel - reinstall kernel into root.img" 60 @echo "" 61 62# Unmount everything, de-configured VN, and clean up. 63# (check handles umounting/deconfiguring) 64# 65clean: check 66 rm -rf ${VKDIR}/root.img ${VKDIR}/root 67 68# Build the world and kernel 69# 70# 71world: checkq 72 cd ${SRCDIR} && make -j 4 buildworld 73 74kernel: checkq 75 cd ${SRCDIR} && make -j 4 KERNCONF=${USEKERNEL} buildkernel 76 77# Quick build - just rebuild the kernel quickly 78# 79# 80quickworld: checkq 81 cd ${SRCDIR} && make -j 4 quickworld 82 83quickkernel: checkq 84 cd ${SRCDIR} && make KERNCONF=${USEKERNEL} quickkernel 85 86# Build and mount an empty filesystem for the emulated root disk 87# 88# NOTE: root must umount when done because a later dependency may 89# have a dependency on mount. 90# 91root: check 92 vnconfig -c -T -S ${ROOTSIZE} -s labels \ 93 `cat ${VKDIR}/vn.which` ${VKDIR}/root.img 94 dd if=/dev/zero of=/dev/`cat ${VKDIR}/vn.which` bs=32k count=4 95 fdisk -IB `cat ${VKDIR}/vn.which` 96 disklabel -r -w `cat ${VKDIR}/vn.which`s1 auto 97 disklabel `cat ${VKDIR}/vn.which`s1 > ${VKDIR}/label.tmp 98 echo 'a: * 0 4.2BSD' >> ${VKDIR}/label.tmp 99 disklabel -R `cat ${VKDIR}/vn.which`s1 ${VKDIR}/label.tmp 100 disklabel -B `cat ${VKDIR}/vn.which`s1 101 newfs /dev/`cat ${VKDIR}/vn.which`s1a 102 mkdir -p ${VKDIR}/root 103 vnconfig -u `cat ${VKDIR}/vn.which` > /dev/null 2>&1 104 105mount: check 106 vnconfig -c -s labels `cat ${VKDIR}/vn.which` ${VKDIR}/root.img 107 fsck -p /dev/`cat ${VKDIR}/vn.which`s1a 108 mount /dev/`cat ${VKDIR}/vn.which`s1a ${VKDIR}/root 109 @echo "Mounted ${VKDIR}/root" 110 111umount: check 112 113# Install a fresh world & distribution, and kernel 114# 115install: mount 116 cd ${SRCDIR} && \ 117 make -j 4 DESTDIR=${VKDIR}/root installworld 118 cd ${SRCDIR}/etc && \ 119 make -j 4 DESTDIR=${VKDIR}/root distribution 120 echo '/dev/vkd0s1a / ufs rw 1 1' > ${VKDIR}/root/etc/fstab 121 echo 'proc /proc procfs rw 0 0' >> ${VKDIR}/root/etc/fstab 122 echo 'vfs.root.mountfrom="ufs:vkd0s1a"' > ${VKDIR}/root/boot/loader.conf 123 #(egrep -v '^console' ${VKDIR}/root/etc/ttys; echo 'console "/usr/libexec/getty Pc" cons25 on secure') > ${VKDIR}/root/etc/ttys.new 124 #mv -f ${VKDIR}/root/etc/ttys.new ${VKDIR}/root/etc/ttys 125 cd ${SRCDIR} && \ 126 make -j 4 \ 127 DESTDIR=${VKDIR}/root KERNCONF=${USEKERNEL} \ 128 NO_MODULES= \ 129 installkernel 130 cp ${VKDIR}/root/boot/kernel/kernel ${VKDIR}/vkernel 131 132# Quick reinstall - just install a new kernel on top of an existing image 133# 134# 135reinstall: mount 136 cd ${SRCDIR} && make -j 4 DESTDIR=${VKDIR}/root installworld 137 138reinstallkernel: mount 139 cd ${SRCDIR} && \ 140 make -j 4 DESTDIR=${VKDIR}/root KERNCONF=${USEKERNEL} \ 141 NO_MODULES= installkernel 142 cp ${VKDIR}/root/boot/kernel/kernel ${VKDIR}/vkernel 143 144sysloader: mount 145 cp /boot/loader ${VKDIR}/root/boot/loader 146 sync 147 148# Run the vkernel on our image. Make sure we are unmounted so 149# we do not compete against the emulated kernel when writing to root.img. 150# (check does this for us) 151# 152run: check 153 cd ${VKDIR} && ./vkernel -m ${PHYSMEM} -n ${NCPUS} \ 154 -r root.img -U -v \ 155 -I /var/run/vknet 156 157# When running w/ a NFS root 158# 159NFS_IP?= 10.0.0.53 160NFS_NETMASK?= 255.255.255.0 161NFS_ROOT_IP?= 10.0.0.1 162NFS_ROOT_PATH?= /netboot2 163 164run_nfsroot: check 165 cd ${VKDIR} && ./vkernel -m ${PHYSMEM} -n ${NCPUS} -U -v \ 166 -I /var/run/vknet \ 167 -e 'boot.netif.ip=${NFS_IP}:boot.netif.netmask=${NFS_NETMASK}:boot.netif.name=vke0:boot.nfsroot.server=${NFS_ROOT_IP}:boot.nfsroot.path=${NFS_ROOT_PATH}' 168 169# Make sure we are not mounted and the VN device is unconfigured, 170# 171# Find an unused VN device but do not do anything with it yet. 172# 173checkq: 174.if !defined(VKDIR) 175 @(echo "must specify VKDIR=target or as an environment variable"; exit 1) 176.endif 177.if exists(${VKDIR}) 178 @echo "${VKDIR} found" 179.else 180 mkdir -p ${VKDIR} 181.endif 182 183check: checkq 184.if exists(${VKDIR}/vn.which) 185 -umount ${VKDIR}/root > /dev/null 2>&1 186 -vnconfig -u `cat ${VKDIR}/vn.which` > /dev/null 2>&1 187 rm -f ${VKDIR}/vn.which 188.endif 189 (vnconfig -l | fgrep "not in use" > /dev/null) || \ 190 (echo "Cannot find unused VN"; exit 1) 191 vnconfig -l | fgrep "not in use" | \ 192 cut -f 1 -d : | head -1 > ${VKDIR}/vn.which 193 egrep '^vn' ${VKDIR}/vn.which > /dev/null || \ 194 (echo "VN device selection is bad"; exit 1) 195