1.\" 2.\" Copyright (c) 2003, 2004, 2005, 2006, 2007 3.\" The DragonFly Project. All rights reserved. 4.\" 5.\" Redistribution and use in source and binary forms, with or without 6.\" modification, are permitted provided that the following conditions 7.\" are met: 8.\" 9.\" 1. Redistributions of source code must retain the above copyright 10.\" notice, this list of conditions and the following disclaimer. 11.\" 2. Redistributions in binary form must reproduce the above copyright 12.\" notice, this list of conditions and the following disclaimer in 13.\" the documentation and/or other materials provided with the 14.\" distribution. 15.\" 3. Neither the name of The DragonFly Project nor the names of its 16.\" contributors may be used to endorse or promote products derived 17.\" from this software without specific, prior written permission. 18.\" 19.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 22.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 23.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 24.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 25.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 27.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 29.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" $DragonFly: src/share/man/man7/vkernel.7,v 1.4 2007/01/19 08:13:44 swildner Exp $ 33.\" 34.Dd January 19, 2007 35.Dt VKERNEL 7 36.Os 37.Sh NAME 38.Nm vkernel 39.Nd virtual kernel architecture 40.Sh SYNOPSIS 41.Cd "machine vkernel" 42.Cd "device vkd" 43.Cd "device vke" 44.Pp 45.Pa /usr/obj/usr/src/sys/VKERNEL/kernel.debug 46.Op Fl sUv 47.Op Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 48.\".Op Fl i Ar file 49.Op Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc 50.Op Fl m Ar size 51.Op Fl r Ar file 52.Sh DESCRIPTION 53The 54.Nm 55architecture allows for running 56.Dx 57kernels in userland. 58.Pp 59The following options are available: 60.Bl -tag -width ".Fl m Ar size" 61.It Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 62Specify an environment to be used by the kernel. 63.\".It Fl i Ar file 64.\"Specify a memory image 65.\".Ar file 66.\"to be used by the kernel. 67.It Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc 68Create a virtual network device, with the first 69.Fl I 70option defining 71.Dq Li vke0 , 72the second one 73.Dq Li vke1 , 74and so on. 75.Pp 76The 77.Ar interface 78argument is the name of a 79.Xr tap 4 80device node. 81The 82.Pa /dev/ 83path prefix does not have to be specified and will be automatically prepended. 84Specifying 85.Cm auto 86will pick the first unused 87.Xr tap 4 88device. 89.Pp 90The 91.Ar address1 92and 93.Ar address2 94arguments are the IP addresses of the 95.Xr tap 4 96and 97.Xr vke 4 98interfaces. 99Optionally, 100.Ar address1 101may be of the form 102.Li bridge Ns Em X 103in which case the 104.Xr tap 4 105interface is added to the specified 106.Xr bridge 4 107interface. 108.Pp 109The 110.Ar netmask 111argument applies to all interfaces for which an address is specified. 112.It Fl m Ar size 113Specify the amount of memory to be used by the kernel in bytes, 114.Cm K 115(kilobytes), 116.Cm M 117(megabytes) or 118.Cm G 119(gigabytes). 120Lowercase versions of 121.Cm K , M , 122and 123.Cm G 124are allowed. 125.It Fl r Ar file 126Specify the root image 127.Ar file 128to be used by the kernel. 129See 130.Sx EXAMPLES 131for further information on how to prepare a root image. 132.It Fl s 133Boot into single-user mode. 134.It Fl U 135Enable writing to kernel memory and module loading. 136By default, those are disabled for security reasons. 137.It Fl v 138Turn on verbose booting. 139.El 140.Sh EXAMPLES 141A couple of steps are necessary in order to prepare the system to build and 142run a virtual kernel. 143.Ss Setting up the filesystem 144The 145.Nm 146architecture needs a number of files which reside in 147.Pa /var/vkernel . 148Since these files tend to get rather big and the 149.Pa /var 150partition is usually of limited size, we recommend the directory to be 151created in the 152.Pa /home 153partition with a link to it in 154.Pa /var : 155.Bd -literal 156mkdir /home/var.vkernel 157ln -s /home/var.vkernel /var/vkernel 158.Ed 159.Pp 160Next, a filesystem image to be used by the virtual kernel has to be 161created and populated (assuming world has been built previously): 162.Bd -literal 163dd if=/dev/zero of=/var/vkernel/rootimg.01 bs=1m count=2048 164vnconfig -c -s labels vn0 /var/vkernel/rootimg.01 165disklabel -r -w vn0 auto 166disklabel -e vn0 # edit the label to create a vn0a partition 167newfs /dev/vn0a 168mount /dev/vn0a /mnt 169cd /usr/src 170make installworld DESTDIR=/mnt 171cd etc 172make distribution DESTDIR=/mnt 173echo '/dev/vkd0 / ufs rw 1 1' >/mnt/etc/fstab 174echo 'console "/usr/libexec/getty Pc" cons25 on secure' >/mnt/etc/ttys 175umount /mnt 176vnconfig -u vn0 177.Ed 178.Ss Compiling the virtual kernel 179In order to compile a virtual kernel use the 180.Li VKERNEL 181kernel configuration file residing in 182.Pa /usr/src/sys/config 183(or a configuration file derived thereof): 184.Bd -literal 185cd /usr/src 186make -DNO_MODULES buildkernel KERNCONF=VKERNEL 187.Ed 188.Ss Enabling virtual kernel operation 189A special 190.Xr sysctl 8 , 191.Va vm.vkernel_enable , 192must be set to enable 193.Nm 194operation: 195.Bd -literal 196sysctl vm.vkernel_enable=1 197.Ed 198.Ss Configuring the network on the host system 199In order to access a network interface of the host system from the 200.Nm , 201you must add the interface to a 202.Xr bridge 4 203device which will then be passed to the 204.Fl I 205option: 206.Bd -literal 207kldload if_bridge.ko 208kldload if_tap.ko 209ifconfig bridge0 create 210ifconfig bridge0 addm re0 # assuming re0 is the host's interface 211ifconfig bridge0 up 212.Ed 213.Ss Running the kernel 214Finally, the virtual kernel can be run: 215.Bd -literal 216cd /usr/obj/usr/src/sys/VKERNEL 217\&./kernel.debug -m 64m -r /var/vkernel/rootimg.01 -I auto:bridge0 218.Ed 219.Pp 220The 221.Xr reboot 8 222command can be used to stop a virtual kernel. 223.Sh SEE ALSO 224.Xr bridge 4 , 225.Xr tap 4 , 226.Xr vn 4 , 227.Xr build 7 , 228.Xr disklabel 8 , 229.Xr ifconfig 8 , 230.Xr vnconfig 8 231.Sh HISTORY 232Virtual kernels were introduced in 233.Dx 1.7 . 234.Sh AUTHORS 235.An -nosplit 236.An Matt Dillon 237thought up and implemented the 238.Nm 239architecture. 240This manual page was written by 241.An Sascha Wildner . 242