sys/vfs/hammer2: Use howmany() to calculate bulkfree bmap size
[dragonfly.git] / test / vkernel / Makefile
blobd2f94feb01646be6b9d3c6e09c7b45b943f42c76
1 # Makefile - set up a vkernel environment for testing the vkernel
4 # require it to be specified
5 SRCDIR ?= ${.CURDIR}/../..
6 PHYSMEM ?= 256m
7 NCPUS ?= 2
8 FSTYPE ?= ufs
9 EXTRAOPTS ?=
10 MAKE_JOBS?= $$(sysctl -n hw.ncpu)
12 all: help
14 .if ${MACHINE_ARCH} == "x86_64"
15 USEKERNEL=VKERNEL64
16 .endif
18 scratch: world kernel root install
19 @echo "Run the environment with:"
20 @echo "make VKDIR=${VKDIR} run"
22 quickw: quickworld quickkernel reinstall reinstallkernel
23 @echo "Run the environment with:"
24 @echo "make VKDIR=${VKDIR} run"
26 quick: quickkernel reinstallkernel
27 @echo "Run the environment with:"
28 @echo "make VKDIR=${VKDIR} run"
30 help:
31 @echo "Setup Instructions:"
32 @echo ""
33 @echo " setenv ROOTSIZE size (optional)"
34 @echo " setenv VKDIR target_dir"
35 @echo " setenv FSTYPE fstype (optional. values: hammer, hammer2, ufs)"
36 @echo " setenv MAKE_JOBS njobs (optional)"
37 @echo ""
38 @echo "Meta target components:"
39 @echo ""
40 @echo " help - this help"
41 @echo " clean - clean up"
42 @echo " scratch - build and install everything from scratch"
43 @echo " (this is absolutely everything)"
44 @echo " quick - incremental kernel build & reinstall"
45 @echo " quickw - incremental world & kernel build & reinstall"
46 @echo " run - run vkernel with VKDIR/root.img"
47 @echo " mount - mount VKDIR/root.img at VKDIR/root"
48 @echo " umount - unmount"
49 @echo " fsck - fsck VKDIR/root.img"
50 @echo ""
51 @echo "Individual target components:"
52 @echo ""
53 @echo " world - build the world from scratch"
54 @echo " root - create a new, empty root.img"
55 @echo " install - install a world & kernel"
56 @echo " into root.img"
57 @echo " leaf - additional customization"
58 @echo " kernel - build vkernel"
59 @echo " quickworld - incremental rebuild world"
60 @echo " quickkernel - incremental rebuild kernel"
61 @echo " reinstall - reinstall world into root.img"
62 @echo " (just the installworld piece)"
63 @echo " reinstallkernel - reinstall kernel into root.img"
64 @echo ""
66 # Unmount everything, de-configured VN, and clean up.
67 # (check handles umounting/deconfiguring)
69 clean: check
70 rm -rf ${VKDIR}/root.img ${VKDIR}/root
72 # Build the world and kernel
75 world: checkq
76 cd ${SRCDIR} && make -j ${MAKE_JOBS} buildworld
78 kernel: checkq
79 cd ${SRCDIR} && make -j ${MAKE_JOBS} KERNCONF=${USEKERNEL} buildkernel
81 nativekernel: checkq
82 cd ${SRCDIR} && make -j ${MAKE_JOBS} KERNCONF=${USEKERNEL} nativekernel
84 # Quick build - just rebuild the kernel quickly
87 quickworld: checkq
88 cd ${SRCDIR} && make -j ${MAKE_JOBS} quickworld
90 quickkernel: checkq
91 cd ${SRCDIR} && make -j ${MAKE_JOBS} KERNCONF=${USEKERNEL} quickkernel
93 # Build and mount an empty filesystem for the emulated root disk
95 # NOTE: root must umount when done because a later dependency may
96 # have a dependency on mount.
98 root: check
99 vnconfig -c -T -S ${ROOTSIZE} `cat ${VKDIR}/vn.which` ${VKDIR}/root.img
100 dd if=/dev/zero of=/dev/`cat ${VKDIR}/vn.which` bs=32k count=4
101 fdisk -IB `cat ${VKDIR}/vn.which`
102 disklabel -r -w `cat ${VKDIR}/vn.which`s1 auto
103 disklabel `cat ${VKDIR}/vn.which`s1 > ${VKDIR}/label.tmp
104 .if ${FSTYPE} == "ufs"
105 echo 'a: * 0 4.2BSD' >> ${VKDIR}/label.tmp
106 .else
107 echo 'a: * 0 ${FSTYPE}' >> ${VKDIR}/label.tmp
108 .endif
109 disklabel -R `cat ${VKDIR}/vn.which`s1 ${VKDIR}/label.tmp
110 disklabel -B `cat ${VKDIR}/vn.which`s1
111 ${NEWFS_CMD} ${NEWFS_ARGS} /dev/`cat ${VKDIR}/vn.which`s1a
112 mkdir -p ${VKDIR}/root
113 vnconfig -u `cat ${VKDIR}/vn.which` > /dev/null 2>&1
115 mount: check
116 vnconfig -c `cat ${VKDIR}/vn.which` ${VKDIR}/root.img
117 . if ${FSTYPE} == "ufs"
118 fsck -p /dev/`cat ${VKDIR}/vn.which`s1a
119 . endif
120 ${MOUNT_CMD} /dev/`cat ${VKDIR}/vn.which`s1a ${VKDIR}/root
121 @echo "Mounted ${VKDIR}/root"
123 umount: check
125 fsck: check
126 vnconfig -c `cat ${VKDIR}/vn.which` ${VKDIR}/root.img
127 fsck -y /dev/`cat ${VKDIR}/vn.which`s1a
128 make umount
130 # Install a fresh world & distribution, and kernel
132 install: mount
133 cd ${SRCDIR} && \
134 make -j 4 DESTDIR=${VKDIR}/root NO_BACKUP=TRUE installworld
135 cd ${SRCDIR}/etc && \
136 make -j 4 DESTDIR=${VKDIR}/root distribution
137 .if ${FSTYPE} == "ufs"
138 echo '/dev/vkd0s1a / ufs rw 1 1' > ${VKDIR}/root/etc/fstab
139 .else
140 echo '/dev/vkd0s1a / ${FSTYPE} rw 0 0' > ${VKDIR}/root/etc/fstab
141 .endif
142 echo 'proc /proc procfs rw 0 0' >> ${VKDIR}/root/etc/fstab
143 echo "vfs.root.mountfrom=\"${FSTYPE}:vkd0s1a\"" > ${VKDIR}/root/boot/loader.conf
144 #(egrep -v '^console' ${VKDIR}/root/etc/ttys; echo 'console "/usr/libexec/getty Pc" cons25 on secure') > ${VKDIR}/root/etc/ttys.new
145 #mv -f ${VKDIR}/root/etc/ttys.new ${VKDIR}/root/etc/ttys
146 cd ${SRCDIR} && \
147 make -j 4 \
148 DESTDIR=${VKDIR}/root KERNCONF=${USEKERNEL} \
149 installkernel
150 cp ${VKDIR}/root/boot/kernel/kernel ${VKDIR}/vkernel
152 leaf: mount
153 echo 'ifconfig_vke0="up"' > ${VKDIR}/root/etc/rc.conf
154 echo 'defaultrouter="10.26.0.1"' >> ${VKDIR}/root/etc/rc.conf
155 echo 'search dragonflybsd.org backplane.com' > ${VKDIR}/root/etc/resolv.conf
156 echo 'nameserver 10.0.0.25' >> ${VKDIR}/root/etc/resolv.conf
157 echo 'nameserver 10.0.0.2' >> ${VKDIR}/root/etc/resolv.conf
158 echo 'nameserver 8.8.8.8' >> ${VKDIR}/root/etc/resolv.conf
159 make umount
160 chmod 644 /build/vkernel/root.img
162 # Quick reinstall - just install a new kernel on top of an existing image
165 reinstall: mount
166 cd ${SRCDIR} && \
167 make -j 4 DESTDIR=${VKDIR}/root NO_BACKUP=TRUE installworld
169 reinstallkernel: mount
170 cd ${SRCDIR} && \
171 make -j 4 DESTDIR=${VKDIR}/root KERNCONF=${USEKERNEL} \
172 installkernel
173 cp ${VKDIR}/root/boot/kernel/kernel ${VKDIR}/vkernel
175 sysloader: mount
176 cp /boot/loader ${VKDIR}/root/boot/loader
177 sync
179 # Run the vkernel on our image. Make sure we are unmounted so
180 # we do not compete against the emulated kernel when writing to root.img.
181 # (check does this for us)
183 run: check
184 mkdir -p /var/vkernel
185 sysctl vm.vkernel_enable=1
186 cd ${VKDIR} && ./vkernel -m ${PHYSMEM} -n ${NCPUS} \
187 -r root.img -U -v \
188 -I /var/run/vknet ${EXTRAOPTS} ${MNTOPTS}
190 # When running w/ a NFS root
192 NFS_IP?= 10.0.0.53
193 NFS_NETMASK?= 255.255.255.0
194 NFS_ROOT_IP?= 10.0.0.1
195 NFS_ROOT_PATH?= /netboot2
197 run_nfsroot: check
198 cd ${VKDIR} && ./vkernel -m ${PHYSMEM} -n ${NCPUS} -U -v \
199 -I /var/run/vknet \
200 -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}'
202 # Make sure we are not mounted and the VN device is unconfigured,
204 # Find an unused VN device but do not do anything with it yet.
206 checkq:
207 .if !defined(VKDIR)
208 @(echo "must specify VKDIR=target or as an environment variable"; /usr/bin/false)
209 .endif
211 .if exists(${VKDIR})
212 @echo "${VKDIR} found"
213 .else
214 mkdir -p ${VKDIR}
215 .endif
217 .if ${FSTYPE} == "hammer"
218 NEWFS_CMD = newfs_${FSTYPE}
219 NEWFS_ARGS = -L VKROOT -f
220 MOUNT_CMD = mount_${FSTYPE}
221 ROOTSIZE ?= 5G
222 MNTOPTS += -e vfs.root.mountfrom=\'${FSTYPE}:vkd0s1a\'
223 .elif ${FSTYPE} == "hammer2"
224 NEWFS_CMD = newfs_${FSTYPE}
225 NEWFS_ARGS = -f
226 MOUNT_CMD = mount_${FSTYPE}
227 ROOTSIZE ?= 5G
228 MNTOPTS += -e vfs.root.mountfrom=\'${FSTYPE}:vkd0s1a\'
229 .elif ${FSTYPE} == "ufs"
230 NEWFS_CMD = newfs
231 NEWFS_ARGS =
232 MOUNT_CMD = mount
233 ROOTSIZE ?= 2G
234 .else
235 @(echo "\"${FSTYPE}\" is not a valid filesystem"; /usr/bin/false)
236 .endif
237 .if ${FSTYPE} == "hammer" || ${FSTYPE} == "hammer2"
238 .endif
241 check: checkq
242 .if exists(${VKDIR}/vn.which)
243 -umount ${VKDIR}/root > /dev/null 2>&1
244 -vnconfig -u `cat ${VKDIR}/vn.which` > /dev/null 2>&1
245 rm -f ${VKDIR}/vn.which
246 .endif
247 (vnconfig -l | fgrep "not in use" > /dev/null) || \
248 (echo "Cannot find unused VN"; /usr/bin/false)
249 vnconfig -l | fgrep "not in use" | \
250 cut -f 1 -d : | head -1 > ${VKDIR}/vn.which
251 egrep '^vn' ${VKDIR}/vn.which > /dev/null || \
252 (echo "VN device selection is bad"; /usr/bin/false)