xref: /dflybsd-src/share/man/man7/vkernel.7 (revision 8cf87c928118ef254f2483ede9e9384363e46ee1)
14af18995SSascha Wildner.\"
24af18995SSascha Wildner.\" Copyright (c) 2003, 2004, 2005, 2006, 2007
34af18995SSascha Wildner.\"	The DragonFly Project.  All rights reserved.
44af18995SSascha Wildner.\"
54af18995SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
64af18995SSascha Wildner.\" modification, are permitted provided that the following conditions
74af18995SSascha Wildner.\" are met:
84af18995SSascha Wildner.\"
94af18995SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
104af18995SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
114af18995SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
124af18995SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in
134af18995SSascha Wildner.\"    the documentation and/or other materials provided with the
144af18995SSascha Wildner.\"    distribution.
154af18995SSascha Wildner.\" 3. Neither the name of The DragonFly Project nor the names of its
164af18995SSascha Wildner.\"    contributors may be used to endorse or promote products derived
174af18995SSascha Wildner.\"    from this software without specific, prior written permission.
184af18995SSascha Wildner.\"
194af18995SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
204af18995SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
214af18995SSascha Wildner.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
224af18995SSascha Wildner.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
234af18995SSascha Wildner.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
244af18995SSascha Wildner.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
254af18995SSascha Wildner.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
264af18995SSascha Wildner.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
274af18995SSascha Wildner.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
284af18995SSascha Wildner.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
294af18995SSascha Wildner.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
304af18995SSascha Wildner.\" SUCH DAMAGE.
314af18995SSascha Wildner.\"
32*8cf87c92SSascha Wildner.\" $DragonFly: src/share/man/man7/vkernel.7,v 1.24 2007/07/07 22:57:19 swildner Exp $
334af18995SSascha Wildner.\"
34*8cf87c92SSascha Wildner.Dd July 2, 2007
354af18995SSascha Wildner.Dt VKERNEL 7
364af18995SSascha Wildner.Os
374af18995SSascha Wildner.Sh NAME
380592e24dSSascha Wildner.Nm vkernel ,
390592e24dSSascha Wildner.Nm vkd ,
400592e24dSSascha Wildner.Nm vke
414af18995SSascha Wildner.Nd virtual kernel architecture
424af18995SSascha Wildner.Sh SYNOPSIS
4365d7306bSSascha Wildner.Cd "platform vkernel"
44c8e7d028SSascha Wildner.Cd "device vkd"
45c8e7d028SSascha Wildner.Cd "device vke"
46c8e7d028SSascha Wildner.Pp
474af18995SSascha Wildner.Pa /usr/obj/usr/src/sys/VKERNEL/kernel.debug
4803071031SSascha Wildner.Op Fl sUv
49a72d8a9fSMatthew Dillon.Op Fl c Ar file
5009b03fffSSascha Wildner.Op Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ...
51dd54cb3aSSascha Wildner.Op Fl i Ar file
5209b03fffSSascha Wildner.Op Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc
534af18995SSascha Wildner.Op Fl m Ar size
54c5b0b0baSMatthew Dillon.Op Fl n Ar numcpus
55b02b4170SMatthew Dillon.Op Fl p Ar file
564af18995SSascha Wildner.Op Fl r Ar file
574af18995SSascha Wildner.Sh DESCRIPTION
584af18995SSascha WildnerThe
594af18995SSascha Wildner.Nm
604af18995SSascha Wildnerarchitecture allows for running
614af18995SSascha Wildner.Dx
624af18995SSascha Wildnerkernels in userland.
634af18995SSascha Wildner.Pp
644af18995SSascha WildnerThe following options are available:
654af18995SSascha Wildner.Bl -tag -width ".Fl m Ar size"
66a72d8a9fSMatthew Dillon.It Fl c Ar file
677834fbccSSascha WildnerSpecify a readonly CD-ROM image
68a72d8a9fSMatthew Dillon.Ar file
69a72d8a9fSMatthew Dillonto be used by the kernel, with the first
70a72d8a9fSMatthew Dillon.Fl c
71a72d8a9fSMatthew Dillonoption defining
72a72d8a9fSMatthew Dillon.Li vcd0 ,
73a72d8a9fSMatthew Dillonthe second one
74a72d8a9fSMatthew Dillon.Li vcd1 ,
75a72d8a9fSMatthew Dillonand so on.  The first
76a72d8a9fSMatthew Dillon.Fl r
77a72d8a9fSMatthew Dillonor
78a72d8a9fSMatthew Dillon.Fl c
79a72d8a9fSMatthew Dillonoption specified on the command line will be the boot disk.
807834fbccSSascha WildnerThe CD9660 filesystem is assumed when booting from this media.
8109b03fffSSascha Wildner.It Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ...
8209b03fffSSascha WildnerSpecify an environment to be used by the kernel.
83dd54cb3aSSascha Wildner.It Fl i Ar file
84dd54cb3aSSascha WildnerSpecify a memory image
85dd54cb3aSSascha Wildner.Ar file
86dd54cb3aSSascha Wildnerto be used by the virtual kernel.
87dd54cb3aSSascha WildnerIf no
88dd54cb3aSSascha Wildner.Fl i
89dd54cb3aSSascha Wildneroption is given, the kernel will generate a name of the form
90dd54cb3aSSascha Wildner.Pa /var/vkernel/memimg.XXXXXX ,
91dd54cb3aSSascha Wildnerwith the trailing
92dd54cb3aSSascha Wildner.Ql X Ns s
93dd54cb3aSSascha Wildnerbeing replaced by a sequential number, e.g.\&
94dd54cb3aSSascha Wildner.Pa memimg.000001 .
9509b03fffSSascha Wildner.It Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc
9609b03fffSSascha WildnerCreate a virtual network device, with the first
9709b03fffSSascha Wildner.Fl I
9809b03fffSSascha Wildneroption defining
990592e24dSSascha Wildner.Li vke0 ,
10009b03fffSSascha Wildnerthe second one
1010592e24dSSascha Wildner.Li vke1 ,
10209b03fffSSascha Wildnerand so on.
10309b03fffSSascha Wildner.Pp
10409b03fffSSascha WildnerThe
10509b03fffSSascha Wildner.Ar interface
10609b03fffSSascha Wildnerargument is the name of a
10709b03fffSSascha Wildner.Xr tap 4
10809b03fffSSascha Wildnerdevice node.
10909b03fffSSascha WildnerThe
11009b03fffSSascha Wildner.Pa /dev/
11109b03fffSSascha Wildnerpath prefix does not have to be specified and will be automatically prepended.
11209b03fffSSascha WildnerSpecifying
11309b03fffSSascha Wildner.Cm auto
11409b03fffSSascha Wildnerwill pick the first unused
11509b03fffSSascha Wildner.Xr tap 4
11609b03fffSSascha Wildnerdevice.
11709b03fffSSascha Wildner.Pp
11809b03fffSSascha WildnerThe
11909b03fffSSascha Wildner.Ar address1
12009b03fffSSascha Wildnerand
12109b03fffSSascha Wildner.Ar address2
12209b03fffSSascha Wildnerarguments are the IP addresses of the
12309b03fffSSascha Wildner.Xr tap 4
12409b03fffSSascha Wildnerand
1250592e24dSSascha Wildner.Nm vke
12609b03fffSSascha Wildnerinterfaces.
12709b03fffSSascha WildnerOptionally,
12809b03fffSSascha Wildner.Ar address1
12909b03fffSSascha Wildnermay be of the form
13009b03fffSSascha Wildner.Li bridge Ns Em X
13109b03fffSSascha Wildnerin which case the
13209b03fffSSascha Wildner.Xr tap 4
13309b03fffSSascha Wildnerinterface is added to the specified
13409b03fffSSascha Wildner.Xr bridge 4
13509b03fffSSascha Wildnerinterface.
13609b03fffSSascha Wildner.Pp
13709b03fffSSascha WildnerThe
13809b03fffSSascha Wildner.Ar netmask
13909b03fffSSascha Wildnerargument applies to all interfaces for which an address is specified.
1404af18995SSascha Wildner.It Fl m Ar size
1414af18995SSascha WildnerSpecify the amount of memory to be used by the kernel in bytes,
1424af18995SSascha Wildner.Cm K
1433cea05a4SSascha Wildner.Pq kilobytes ,
1444af18995SSascha Wildner.Cm M
1453cea05a4SSascha Wildner.Pq megabytes
1463cea05a4SSascha Wildneror
1474af18995SSascha Wildner.Cm G
1483cea05a4SSascha Wildner.Pq gigabytes .
14909b03fffSSascha WildnerLowercase versions of
1504af18995SSascha Wildner.Cm K , M ,
1514af18995SSascha Wildnerand
1524af18995SSascha Wildner.Cm G
1534af18995SSascha Wildnerare allowed.
154c5b0b0baSMatthew Dillon.It Fl n Ar numcpus
155*8cf87c92SSascha WildnerSpecify the number of CPUs you wish to emulate.
156*8cf87c92SSascha WildnerUp to 32 CPUs are supported.
157*8cf87c92SSascha WildnerThe virtual kernel must be built with
158*8cf87c92SSascha Wildner.Cd options SMP
159*8cf87c92SSascha Wildnerto use this option and will default to 2 CPUs unless otherwise specified.
160b02b4170SMatthew Dillon.It Fl p Ar file
161b02b4170SMatthew DillonSpecify a file in which to store the process ID.
162b02b4170SMatthew DillonA warning is issued if this file cannot be opened for writing.
1634af18995SSascha Wildner.It Fl r Ar file
164a72d8a9fSMatthew DillonSpecify a R/W disk image
1654af18995SSascha Wildner.Ar file
166ec1a8a4dSSascha Wildnerto be used by the kernel, with the first
167ec1a8a4dSSascha Wildner.Fl r
168ec1a8a4dSSascha Wildneroption defining
1690592e24dSSascha Wildner.Li vkd0 ,
170ec1a8a4dSSascha Wildnerthe second one
1710592e24dSSascha Wildner.Li vkd1 ,
172a72d8a9fSMatthew Dillonand so on.  The first
173a72d8a9fSMatthew Dillon.Fl r
174a72d8a9fSMatthew Dillonor
175a72d8a9fSMatthew Dillon.Fl c
176a72d8a9fSMatthew Dillonoption specified on the command line will be the boot disk.
177c8e7d028SSascha Wildner.It Fl s
178c8e7d028SSascha WildnerBoot into single-user mode.
17903071031SSascha Wildner.It Fl U
18003071031SSascha WildnerEnable writing to kernel memory and module loading.
18103071031SSascha WildnerBy default, those are disabled for security reasons.
1824af18995SSascha Wildner.It Fl v
1834af18995SSascha WildnerTurn on verbose booting.
1844af18995SSascha Wildner.El
1850592e24dSSascha Wildner.Sh DEVICES
1860592e24dSSascha WildnerA number of virtual device drivers exist to supplement the virtual kernel.
1870592e24dSSascha WildnerTheir names start with
1880592e24dSSascha Wildner.Li vk .
1890592e24dSSascha Wildner.Ss Disk device
1900592e24dSSascha WildnerThe
1910592e24dSSascha Wildner.Nm vkd
1920592e24dSSascha Wildnerdriver allows for up to 16
1930592e24dSSascha Wildner.Xr vn 4
1940592e24dSSascha Wildnerbased disk devices.
1950592e24dSSascha WildnerThe root device will be
1960592e24dSSascha Wildner.Li vkd0
1970592e24dSSascha Wildner(see
1980592e24dSSascha Wildner.Sx EXAMPLES
1990592e24dSSascha Wildnerfor further information on how to prepare a root image).
2000592e24dSSascha Wildner.Ss Network interface
2010592e24dSSascha WildnerThe
2020592e24dSSascha Wildner.Nm vke
2030592e24dSSascha Wildnerdriver supports up to 16 virtual network interfaces which are associated with
2040592e24dSSascha Wildner.Xr tap 4
2050592e24dSSascha Wildnerdevices on the host.
2060592e24dSSascha WildnerFor each
2070592e24dSSascha Wildner.Nm vke
2080592e24dSSascha Wildnerdevice, the per-interface read only
2090592e24dSSascha Wildner.Xr sysctl 3
2100592e24dSSascha Wildnervariable
2110592e24dSSascha Wildner.Va hw.vke Ns Em X Ns Va .tap_unit
2120592e24dSSascha Wildnerholds the unit number of the associated
2130592e24dSSascha Wildner.Xr tap 4
2140592e24dSSascha Wildnerdevice.
2151e4d9fd9SSascha Wildner.Sh SIGNALS
216bb195a01SMatthew DillonThe virtual kernel only enables
217bb195a01SMatthew Dillon.Dv SIGQUIT
218bb195a01SMatthew Dillonand
219bb195a01SMatthew Dillon.Dv SIGTERM
220bb195a01SMatthew Dillonwhile operating in regular console mode.
221bb195a01SMatthew DillonSending
2221e4d9fd9SSascha Wildner.Ql \&^\e
2231e4d9fd9SSascha Wildner.Pq Dv SIGQUIT
224bb195a01SMatthew Dillonto the virtual kernel causes the virtual kernel to enter its internal
2251e4d9fd9SSascha Wildner.Xr ddb 4
226bb195a01SMatthew Dillondebugger and re-enable all other terminal signals.
227bb195a01SMatthew DillonSending
228bb195a01SMatthew Dillon.Dv SIGTERM
229bb195a01SMatthew Dillonto the virtual kernel triggers a clean shutdown by passing a
230bb195a01SMatthew Dillon.Dv SIGUSR2
231bb195a01SMatthew Dillonto the virtual kernel's
232bb195a01SMatthew Dillon.Xr init 8
233bb195a01SMatthew Dillonprocess.
234974b26bfSSascha Wildner.Sh DEBUGGING
235974b26bfSSascha WildnerIt is possible to directly gdb the virtual kernel's process.
236974b26bfSSascha WildnerIt is recommended that you do a
237974b26bfSSascha Wildner.Ql handle SIGSEGV noprint
238974b26bfSSascha Wildnerto ignore page faults processed by the virtual kernel itself.
239c8e7d028SSascha Wildner.Sh EXAMPLES
2404af18995SSascha WildnerA couple of steps are necessary in order to prepare the system to build and
2414af18995SSascha Wildnerrun a virtual kernel.
2424af18995SSascha Wildner.Ss Setting up the filesystem
2434af18995SSascha WildnerThe
2444af18995SSascha Wildner.Nm
2454af18995SSascha Wildnerarchitecture needs a number of files which reside in
2464af18995SSascha Wildner.Pa /var/vkernel .
2474af18995SSascha WildnerSince these files tend to get rather big and the
2484af18995SSascha Wildner.Pa /var
2494af18995SSascha Wildnerpartition is usually of limited size, we recommend the directory to be
2504af18995SSascha Wildnercreated in the
2514af18995SSascha Wildner.Pa /home
2524af18995SSascha Wildnerpartition with a link to it in
2534af18995SSascha Wildner.Pa /var :
254c8e7d028SSascha Wildner.Bd -literal
2554af18995SSascha Wildnermkdir /home/var.vkernel
2564af18995SSascha Wildnerln -s /home/var.vkernel /var/vkernel
2574af18995SSascha Wildner.Ed
2584af18995SSascha Wildner.Pp
2594af18995SSascha WildnerNext, a filesystem image to be used by the virtual kernel has to be
260c8e7d028SSascha Wildnercreated and populated (assuming world has been built previously):
261c8e7d028SSascha Wildner.Bd -literal
2624af18995SSascha Wildnerdd if=/dev/zero of=/var/vkernel/rootimg.01 bs=1m count=2048
2634af18995SSascha Wildnervnconfig -c -s labels vn0 /var/vkernel/rootimg.01
26458c55700SSascha Wildnerdisklabel -r -w vn0s0 auto
26558c55700SSascha Wildnerdisklabel -e vn0s0	# edit the label to create a vn0s0a partition
26658c55700SSascha Wildnernewfs /dev/vn0s0a
26758c55700SSascha Wildnermount /dev/vn0s0a /mnt
268c8e7d028SSascha Wildnercd /usr/src
269c8e7d028SSascha Wildnermake installworld DESTDIR=/mnt
270c8e7d028SSascha Wildnercd etc
271c8e7d028SSascha Wildnermake distribution DESTDIR=/mnt
2726a060312SSascha Wildnerecho '/dev/vkd0a / ufs rw 1 1' >/mnt/etc/fstab
2737834fbccSSascha Wildner.Ed
2747834fbccSSascha Wildner.Pp
2757834fbccSSascha WildnerEdit
2767834fbccSSascha Wildner.Pa /mnt/etc/ttys
2777834fbccSSascha Wildnerand replace the
2787834fbccSSascha Wildner.Li console
2797834fbccSSascha Wildnerentry with the following line and turn off all other gettys.
2807834fbccSSascha Wildner.Bd -literal
2817834fbccSSascha Wildnerconsole	"/usr/libexec/getty Pc"		cons25	on  secure
2827834fbccSSascha Wildner.Ed
2837834fbccSSascha Wildner.Pp
2847834fbccSSascha WildnerThen, unmount the disk.
2857834fbccSSascha Wildner.Bd -literal
2864af18995SSascha Wildnerumount /mnt
2874af18995SSascha Wildnervnconfig -u vn0
2884af18995SSascha Wildner.Ed
2894af18995SSascha Wildner.Ss Compiling the virtual kernel
2904af18995SSascha WildnerIn order to compile a virtual kernel use the
2914af18995SSascha Wildner.Li VKERNEL
2924af18995SSascha Wildnerkernel configuration file residing in
2934af18995SSascha Wildner.Pa /usr/src/sys/config
2944af18995SSascha Wildner(or a configuration file derived thereof):
295c8e7d028SSascha Wildner.Bd -literal
2964af18995SSascha Wildnercd /usr/src
29709b03fffSSascha Wildnermake -DNO_MODULES buildkernel KERNCONF=VKERNEL
2984af18995SSascha Wildner.Ed
2994af18995SSascha Wildner.Ss Enabling virtual kernel operation
3004af18995SSascha WildnerA special
3014af18995SSascha Wildner.Xr sysctl 8 ,
3024af18995SSascha Wildner.Va vm.vkernel_enable ,
3034af18995SSascha Wildnermust be set to enable
3044af18995SSascha Wildner.Nm
3054af18995SSascha Wildneroperation:
306c8e7d028SSascha Wildner.Bd -literal
3074af18995SSascha Wildnersysctl vm.vkernel_enable=1
3084af18995SSascha Wildner.Ed
30909b03fffSSascha Wildner.Ss Configuring the network on the host system
31009b03fffSSascha WildnerIn order to access a network interface of the host system from the
31109b03fffSSascha Wildner.Nm ,
31209b03fffSSascha Wildneryou must add the interface to a
31309b03fffSSascha Wildner.Xr bridge 4
31409b03fffSSascha Wildnerdevice which will then be passed to the
31509b03fffSSascha Wildner.Fl I
31609b03fffSSascha Wildneroption:
31709b03fffSSascha Wildner.Bd -literal
31809b03fffSSascha Wildnerkldload if_bridge.ko
31909b03fffSSascha Wildnerkldload if_tap.ko
32009b03fffSSascha Wildnerifconfig bridge0 create
32109b03fffSSascha Wildnerifconfig bridge0 addm re0	# assuming re0 is the host's interface
32209b03fffSSascha Wildnerifconfig bridge0 up
32309b03fffSSascha Wildner.Ed
3244af18995SSascha Wildner.Ss Running the kernel
3254af18995SSascha WildnerFinally, the virtual kernel can be run:
326c8e7d028SSascha Wildner.Bd -literal
3274af18995SSascha Wildnercd /usr/obj/usr/src/sys/VKERNEL
32809b03fffSSascha Wildner\&./kernel.debug -m 64m -r /var/vkernel/rootimg.01 -I auto:bridge0
3294af18995SSascha Wildner.Ed
330c8e7d028SSascha Wildner.Pp
331c8e7d028SSascha WildnerThe
332c8e7d028SSascha Wildner.Xr reboot 8
333c8e7d028SSascha Wildnercommand can be used to stop a virtual kernel.
33434caba04SMatthew Dillon.Sh BUILDING THE WORLD UNDER A VKERNEL
33534caba04SMatthew DillonThe virtual kernel platform does not have all the header files expected
33634caba04SMatthew Dillonby a world build, so the easiest thing to do right now is to specify a
33734caba04SMatthew Dillonpc32 target when building the world under a virtual kernel, like this:
33834caba04SMatthew Dillon.Bd -literal
33934caba04SMatthew Dillonvkernel# make MACHINE_PLATFORM=pc32 buildworld
34034caba04SMatthew Dillonvkernel# make MACHINE_PLATFORM=pc32 installworld
34134caba04SMatthew Dillon.Ed
3424af18995SSascha Wildner.Sh SEE ALSO
34309b03fffSSascha Wildner.Xr bridge 4 ,
34409b03fffSSascha Wildner.Xr tap 4 ,
345c8e7d028SSascha Wildner.Xr vn 4 ,
346c8e7d028SSascha Wildner.Xr build 7 ,
347c8e7d028SSascha Wildner.Xr disklabel 8 ,
34809b03fffSSascha Wildner.Xr ifconfig 8 ,
349c8e7d028SSascha Wildner.Xr vnconfig 8
3504af18995SSascha Wildner.Sh HISTORY
3514af18995SSascha WildnerVirtual kernels were introduced in
3524af18995SSascha Wildner.Dx 1.7 .
3534af18995SSascha Wildner.Sh AUTHORS
3544af18995SSascha Wildner.An -nosplit
3554af18995SSascha Wildner.An Matt Dillon
3564af18995SSascha Wildnerthought up and implemented the
3574af18995SSascha Wildner.Nm
3580592e24dSSascha Wildnerarchitecture and wrote the
3590592e24dSSascha Wildner.Nm vkd
3600592e24dSSascha Wildnerdevice driver.
3610592e24dSSascha Wildner.An Sepherosa Ziehau
3620592e24dSSascha Wildnerwrote the
3630592e24dSSascha Wildner.Nm vke
3640592e24dSSascha Wildnerdevice driver.
3654af18995SSascha WildnerThis manual page was written by
3664af18995SSascha Wildner.An Sascha Wildner .
367