xref: /dflybsd-src/share/man/man7/vkernel.7 (revision 26ea2793cc50b185115a7b0d04cf3c0dab422bbc)
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*26ea2793SSascha Wildner.\" $DragonFly: src/share/man/man7/vkernel.7,v 1.26 2007/07/11 00:49:05 swildner Exp $
334af18995SSascha Wildner.\"
34*26ea2793SSascha Wildner.Dd July 10, 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
53702acf06SJoe Talbott.Op Fl l Ar cpulock
544af18995SSascha Wildner.Op Fl m Ar size
55c5b0b0baSMatthew Dillon.Op Fl n Ar numcpus
56b02b4170SMatthew Dillon.Op Fl p Ar file
574af18995SSascha Wildner.Op Fl r Ar file
584af18995SSascha Wildner.Sh DESCRIPTION
594af18995SSascha WildnerThe
604af18995SSascha Wildner.Nm
614af18995SSascha Wildnerarchitecture allows for running
624af18995SSascha Wildner.Dx
634af18995SSascha Wildnerkernels in userland.
644af18995SSascha Wildner.Pp
654af18995SSascha WildnerThe following options are available:
664af18995SSascha Wildner.Bl -tag -width ".Fl m Ar size"
67a72d8a9fSMatthew Dillon.It Fl c Ar file
687834fbccSSascha WildnerSpecify a readonly CD-ROM image
69a72d8a9fSMatthew Dillon.Ar file
70a72d8a9fSMatthew Dillonto be used by the kernel, with the first
71a72d8a9fSMatthew Dillon.Fl c
72a72d8a9fSMatthew Dillonoption defining
73a72d8a9fSMatthew Dillon.Li vcd0 ,
74a72d8a9fSMatthew Dillonthe second one
75a72d8a9fSMatthew Dillon.Li vcd1 ,
76a72d8a9fSMatthew Dillonand so on.  The first
77a72d8a9fSMatthew Dillon.Fl r
78a72d8a9fSMatthew Dillonor
79a72d8a9fSMatthew Dillon.Fl c
80a72d8a9fSMatthew Dillonoption specified on the command line will be the boot disk.
817834fbccSSascha WildnerThe CD9660 filesystem is assumed when booting from this media.
8209b03fffSSascha Wildner.It Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ...
8309b03fffSSascha WildnerSpecify an environment to be used by the kernel.
84dd54cb3aSSascha Wildner.It Fl i Ar file
85dd54cb3aSSascha WildnerSpecify a memory image
86dd54cb3aSSascha Wildner.Ar file
87dd54cb3aSSascha Wildnerto be used by the virtual kernel.
88dd54cb3aSSascha WildnerIf no
89dd54cb3aSSascha Wildner.Fl i
90dd54cb3aSSascha Wildneroption is given, the kernel will generate a name of the form
91dd54cb3aSSascha Wildner.Pa /var/vkernel/memimg.XXXXXX ,
92dd54cb3aSSascha Wildnerwith the trailing
93dd54cb3aSSascha Wildner.Ql X Ns s
94dd54cb3aSSascha Wildnerbeing replaced by a sequential number, e.g.\&
95dd54cb3aSSascha Wildner.Pa memimg.000001 .
9609b03fffSSascha Wildner.It Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc
9709b03fffSSascha WildnerCreate a virtual network device, with the first
9809b03fffSSascha Wildner.Fl I
9909b03fffSSascha Wildneroption defining
1000592e24dSSascha Wildner.Li vke0 ,
10109b03fffSSascha Wildnerthe second one
1020592e24dSSascha Wildner.Li vke1 ,
10309b03fffSSascha Wildnerand so on.
10409b03fffSSascha Wildner.Pp
10509b03fffSSascha WildnerThe
10609b03fffSSascha Wildner.Ar interface
10709b03fffSSascha Wildnerargument is the name of a
10809b03fffSSascha Wildner.Xr tap 4
10909b03fffSSascha Wildnerdevice node.
11009b03fffSSascha WildnerThe
11109b03fffSSascha Wildner.Pa /dev/
11209b03fffSSascha Wildnerpath prefix does not have to be specified and will be automatically prepended.
11309b03fffSSascha WildnerSpecifying
11409b03fffSSascha Wildner.Cm auto
11509b03fffSSascha Wildnerwill pick the first unused
11609b03fffSSascha Wildner.Xr tap 4
11709b03fffSSascha Wildnerdevice.
11809b03fffSSascha Wildner.Pp
11909b03fffSSascha WildnerThe
12009b03fffSSascha Wildner.Ar address1
12109b03fffSSascha Wildnerand
12209b03fffSSascha Wildner.Ar address2
12309b03fffSSascha Wildnerarguments are the IP addresses of the
12409b03fffSSascha Wildner.Xr tap 4
12509b03fffSSascha Wildnerand
1260592e24dSSascha Wildner.Nm vke
12709b03fffSSascha Wildnerinterfaces.
12809b03fffSSascha WildnerOptionally,
12909b03fffSSascha Wildner.Ar address1
13009b03fffSSascha Wildnermay be of the form
13109b03fffSSascha Wildner.Li bridge Ns Em X
13209b03fffSSascha Wildnerin which case the
13309b03fffSSascha Wildner.Xr tap 4
13409b03fffSSascha Wildnerinterface is added to the specified
13509b03fffSSascha Wildner.Xr bridge 4
13609b03fffSSascha Wildnerinterface.
13709b03fffSSascha Wildner.Pp
13809b03fffSSascha WildnerThe
13909b03fffSSascha Wildner.Ar netmask
14009b03fffSSascha Wildnerargument applies to all interfaces for which an address is specified.
141702acf06SJoe Talbott.It Fl l Ar cpulock
142702acf06SJoe TalbottSpecify which, if any, real CPUs to lock virtual CPUs to.
143702acf06SJoe Talbott.Ar cpulock
144702acf06SJoe Talbottis one of
145702acf06SJoe Talbott.Cm any ,
146*26ea2793SSascha Wildner.Cm map Ns Op Ns , Ns Ar startCPU ,
147*26ea2793SSascha Wildneror
148*26ea2793SSascha Wildner.Ar CPU .
149702acf06SJoe Talbott.Pp
150702acf06SJoe Talbott.Cm any
151*26ea2793SSascha Wildnerdoes not map virtual CPUs to real CPUs.
152*26ea2793SSascha WildnerThis is the default.
153702acf06SJoe Talbott.Pp
154702acf06SJoe Talbott.Cm map Ns Op Ns , Ns Ar startCPU
155702acf06SJoe Talbottmaps each virtual CPU to a real CPU starting with real CPU 0 or
156702acf06SJoe Talbott.Ar startCPU
157702acf06SJoe Talbottif specified.
158702acf06SJoe Talbott.Pp
159702acf06SJoe Talbott.Ar CPU
160*26ea2793SSascha Wildnerlocks all virtual CPUs to the real CPU specified by
161*26ea2793SSascha Wildner.Ar CPU .
1624af18995SSascha Wildner.It Fl m Ar size
1634af18995SSascha WildnerSpecify the amount of memory to be used by the kernel in bytes,
1644af18995SSascha Wildner.Cm K
1653cea05a4SSascha Wildner.Pq kilobytes ,
1664af18995SSascha Wildner.Cm M
1673cea05a4SSascha Wildner.Pq megabytes
1683cea05a4SSascha Wildneror
1694af18995SSascha Wildner.Cm G
1703cea05a4SSascha Wildner.Pq gigabytes .
17109b03fffSSascha WildnerLowercase versions of
1724af18995SSascha Wildner.Cm K , M ,
1734af18995SSascha Wildnerand
1744af18995SSascha Wildner.Cm G
1754af18995SSascha Wildnerare allowed.
176c5b0b0baSMatthew Dillon.It Fl n Ar numcpus
1778cf87c92SSascha WildnerSpecify the number of CPUs you wish to emulate.
1788cf87c92SSascha WildnerUp to 32 CPUs are supported.
1798cf87c92SSascha WildnerThe virtual kernel must be built with
1808cf87c92SSascha Wildner.Cd options SMP
1818cf87c92SSascha Wildnerto use this option and will default to 2 CPUs unless otherwise specified.
182b02b4170SMatthew Dillon.It Fl p Ar file
183b02b4170SMatthew DillonSpecify a file in which to store the process ID.
184b02b4170SMatthew DillonA warning is issued if this file cannot be opened for writing.
1854af18995SSascha Wildner.It Fl r Ar file
186a72d8a9fSMatthew DillonSpecify a R/W disk image
1874af18995SSascha Wildner.Ar file
188ec1a8a4dSSascha Wildnerto be used by the kernel, with the first
189ec1a8a4dSSascha Wildner.Fl r
190ec1a8a4dSSascha Wildneroption defining
1910592e24dSSascha Wildner.Li vkd0 ,
192ec1a8a4dSSascha Wildnerthe second one
1930592e24dSSascha Wildner.Li vkd1 ,
194a72d8a9fSMatthew Dillonand so on.  The first
195a72d8a9fSMatthew Dillon.Fl r
196a72d8a9fSMatthew Dillonor
197a72d8a9fSMatthew Dillon.Fl c
198a72d8a9fSMatthew Dillonoption specified on the command line will be the boot disk.
199c8e7d028SSascha Wildner.It Fl s
200c8e7d028SSascha WildnerBoot into single-user mode.
20103071031SSascha Wildner.It Fl U
20203071031SSascha WildnerEnable writing to kernel memory and module loading.
20303071031SSascha WildnerBy default, those are disabled for security reasons.
2044af18995SSascha Wildner.It Fl v
2054af18995SSascha WildnerTurn on verbose booting.
2064af18995SSascha Wildner.El
2070592e24dSSascha Wildner.Sh DEVICES
2080592e24dSSascha WildnerA number of virtual device drivers exist to supplement the virtual kernel.
2090592e24dSSascha WildnerTheir names start with
2100592e24dSSascha Wildner.Li vk .
2110592e24dSSascha Wildner.Ss Disk device
2120592e24dSSascha WildnerThe
2130592e24dSSascha Wildner.Nm vkd
2140592e24dSSascha Wildnerdriver allows for up to 16
2150592e24dSSascha Wildner.Xr vn 4
2160592e24dSSascha Wildnerbased disk devices.
2170592e24dSSascha WildnerThe root device will be
2180592e24dSSascha Wildner.Li vkd0
2190592e24dSSascha Wildner(see
2200592e24dSSascha Wildner.Sx EXAMPLES
2210592e24dSSascha Wildnerfor further information on how to prepare a root image).
2220592e24dSSascha Wildner.Ss Network interface
2230592e24dSSascha WildnerThe
2240592e24dSSascha Wildner.Nm vke
2250592e24dSSascha Wildnerdriver supports up to 16 virtual network interfaces which are associated with
2260592e24dSSascha Wildner.Xr tap 4
2270592e24dSSascha Wildnerdevices on the host.
2280592e24dSSascha WildnerFor each
2290592e24dSSascha Wildner.Nm vke
2300592e24dSSascha Wildnerdevice, the per-interface read only
2310592e24dSSascha Wildner.Xr sysctl 3
2320592e24dSSascha Wildnervariable
2330592e24dSSascha Wildner.Va hw.vke Ns Em X Ns Va .tap_unit
2340592e24dSSascha Wildnerholds the unit number of the associated
2350592e24dSSascha Wildner.Xr tap 4
2360592e24dSSascha Wildnerdevice.
2371e4d9fd9SSascha Wildner.Sh SIGNALS
238bb195a01SMatthew DillonThe virtual kernel only enables
239bb195a01SMatthew Dillon.Dv SIGQUIT
240bb195a01SMatthew Dillonand
241bb195a01SMatthew Dillon.Dv SIGTERM
242bb195a01SMatthew Dillonwhile operating in regular console mode.
243bb195a01SMatthew DillonSending
2441e4d9fd9SSascha Wildner.Ql \&^\e
2451e4d9fd9SSascha Wildner.Pq Dv SIGQUIT
246bb195a01SMatthew Dillonto the virtual kernel causes the virtual kernel to enter its internal
2471e4d9fd9SSascha Wildner.Xr ddb 4
248bb195a01SMatthew Dillondebugger and re-enable all other terminal signals.
249bb195a01SMatthew DillonSending
250bb195a01SMatthew Dillon.Dv SIGTERM
251bb195a01SMatthew Dillonto the virtual kernel triggers a clean shutdown by passing a
252bb195a01SMatthew Dillon.Dv SIGUSR2
253bb195a01SMatthew Dillonto the virtual kernel's
254bb195a01SMatthew Dillon.Xr init 8
255bb195a01SMatthew Dillonprocess.
256974b26bfSSascha Wildner.Sh DEBUGGING
257974b26bfSSascha WildnerIt is possible to directly gdb the virtual kernel's process.
258974b26bfSSascha WildnerIt is recommended that you do a
259974b26bfSSascha Wildner.Ql handle SIGSEGV noprint
260974b26bfSSascha Wildnerto ignore page faults processed by the virtual kernel itself.
261c8e7d028SSascha Wildner.Sh EXAMPLES
2624af18995SSascha WildnerA couple of steps are necessary in order to prepare the system to build and
2634af18995SSascha Wildnerrun a virtual kernel.
2644af18995SSascha Wildner.Ss Setting up the filesystem
2654af18995SSascha WildnerThe
2664af18995SSascha Wildner.Nm
2674af18995SSascha Wildnerarchitecture needs a number of files which reside in
2684af18995SSascha Wildner.Pa /var/vkernel .
2694af18995SSascha WildnerSince these files tend to get rather big and the
2704af18995SSascha Wildner.Pa /var
2714af18995SSascha Wildnerpartition is usually of limited size, we recommend the directory to be
2724af18995SSascha Wildnercreated in the
2734af18995SSascha Wildner.Pa /home
2744af18995SSascha Wildnerpartition with a link to it in
2754af18995SSascha Wildner.Pa /var :
276c8e7d028SSascha Wildner.Bd -literal
2774af18995SSascha Wildnermkdir /home/var.vkernel
2784af18995SSascha Wildnerln -s /home/var.vkernel /var/vkernel
2794af18995SSascha Wildner.Ed
2804af18995SSascha Wildner.Pp
2814af18995SSascha WildnerNext, a filesystem image to be used by the virtual kernel has to be
282c8e7d028SSascha Wildnercreated and populated (assuming world has been built previously):
283c8e7d028SSascha Wildner.Bd -literal
2844af18995SSascha Wildnerdd if=/dev/zero of=/var/vkernel/rootimg.01 bs=1m count=2048
2854af18995SSascha Wildnervnconfig -c -s labels vn0 /var/vkernel/rootimg.01
28658c55700SSascha Wildnerdisklabel -r -w vn0s0 auto
28758c55700SSascha Wildnerdisklabel -e vn0s0	# edit the label to create a vn0s0a partition
28858c55700SSascha Wildnernewfs /dev/vn0s0a
28958c55700SSascha Wildnermount /dev/vn0s0a /mnt
290c8e7d028SSascha Wildnercd /usr/src
291c8e7d028SSascha Wildnermake installworld DESTDIR=/mnt
292c8e7d028SSascha Wildnercd etc
293c8e7d028SSascha Wildnermake distribution DESTDIR=/mnt
2946a060312SSascha Wildnerecho '/dev/vkd0a / ufs rw 1 1' >/mnt/etc/fstab
2957834fbccSSascha Wildner.Ed
2967834fbccSSascha Wildner.Pp
2977834fbccSSascha WildnerEdit
2987834fbccSSascha Wildner.Pa /mnt/etc/ttys
2997834fbccSSascha Wildnerand replace the
3007834fbccSSascha Wildner.Li console
3017834fbccSSascha Wildnerentry with the following line and turn off all other gettys.
3027834fbccSSascha Wildner.Bd -literal
3037834fbccSSascha Wildnerconsole	"/usr/libexec/getty Pc"		cons25	on  secure
3047834fbccSSascha Wildner.Ed
3057834fbccSSascha Wildner.Pp
3067834fbccSSascha WildnerThen, unmount the disk.
3077834fbccSSascha Wildner.Bd -literal
3084af18995SSascha Wildnerumount /mnt
3094af18995SSascha Wildnervnconfig -u vn0
3104af18995SSascha Wildner.Ed
3114af18995SSascha Wildner.Ss Compiling the virtual kernel
3124af18995SSascha WildnerIn order to compile a virtual kernel use the
3134af18995SSascha Wildner.Li VKERNEL
3144af18995SSascha Wildnerkernel configuration file residing in
3154af18995SSascha Wildner.Pa /usr/src/sys/config
3164af18995SSascha Wildner(or a configuration file derived thereof):
317c8e7d028SSascha Wildner.Bd -literal
3184af18995SSascha Wildnercd /usr/src
31909b03fffSSascha Wildnermake -DNO_MODULES buildkernel KERNCONF=VKERNEL
3204af18995SSascha Wildner.Ed
3214af18995SSascha Wildner.Ss Enabling virtual kernel operation
3224af18995SSascha WildnerA special
3234af18995SSascha Wildner.Xr sysctl 8 ,
3244af18995SSascha Wildner.Va vm.vkernel_enable ,
3254af18995SSascha Wildnermust be set to enable
3264af18995SSascha Wildner.Nm
3274af18995SSascha Wildneroperation:
328c8e7d028SSascha Wildner.Bd -literal
3294af18995SSascha Wildnersysctl vm.vkernel_enable=1
3304af18995SSascha Wildner.Ed
33109b03fffSSascha Wildner.Ss Configuring the network on the host system
33209b03fffSSascha WildnerIn order to access a network interface of the host system from the
33309b03fffSSascha Wildner.Nm ,
33409b03fffSSascha Wildneryou must add the interface to a
33509b03fffSSascha Wildner.Xr bridge 4
33609b03fffSSascha Wildnerdevice which will then be passed to the
33709b03fffSSascha Wildner.Fl I
33809b03fffSSascha Wildneroption:
33909b03fffSSascha Wildner.Bd -literal
34009b03fffSSascha Wildnerkldload if_bridge.ko
34109b03fffSSascha Wildnerkldload if_tap.ko
34209b03fffSSascha Wildnerifconfig bridge0 create
34309b03fffSSascha Wildnerifconfig bridge0 addm re0	# assuming re0 is the host's interface
34409b03fffSSascha Wildnerifconfig bridge0 up
34509b03fffSSascha Wildner.Ed
3464af18995SSascha Wildner.Ss Running the kernel
3474af18995SSascha WildnerFinally, the virtual kernel can be run:
348c8e7d028SSascha Wildner.Bd -literal
3494af18995SSascha Wildnercd /usr/obj/usr/src/sys/VKERNEL
35009b03fffSSascha Wildner\&./kernel.debug -m 64m -r /var/vkernel/rootimg.01 -I auto:bridge0
3514af18995SSascha Wildner.Ed
352c8e7d028SSascha Wildner.Pp
353c8e7d028SSascha WildnerThe
354c8e7d028SSascha Wildner.Xr reboot 8
355c8e7d028SSascha Wildnercommand can be used to stop a virtual kernel.
35634caba04SMatthew Dillon.Sh BUILDING THE WORLD UNDER A VKERNEL
35734caba04SMatthew DillonThe virtual kernel platform does not have all the header files expected
35834caba04SMatthew Dillonby a world build, so the easiest thing to do right now is to specify a
35934caba04SMatthew Dillonpc32 target when building the world under a virtual kernel, like this:
36034caba04SMatthew Dillon.Bd -literal
36134caba04SMatthew Dillonvkernel# make MACHINE_PLATFORM=pc32 buildworld
36234caba04SMatthew Dillonvkernel# make MACHINE_PLATFORM=pc32 installworld
36334caba04SMatthew Dillon.Ed
3644af18995SSascha Wildner.Sh SEE ALSO
36509b03fffSSascha Wildner.Xr bridge 4 ,
36609b03fffSSascha Wildner.Xr tap 4 ,
367c8e7d028SSascha Wildner.Xr vn 4 ,
368c8e7d028SSascha Wildner.Xr build 7 ,
369c8e7d028SSascha Wildner.Xr disklabel 8 ,
37009b03fffSSascha Wildner.Xr ifconfig 8 ,
371c8e7d028SSascha Wildner.Xr vnconfig 8
3724af18995SSascha Wildner.Sh HISTORY
3734af18995SSascha WildnerVirtual kernels were introduced in
3744af18995SSascha Wildner.Dx 1.7 .
3754af18995SSascha Wildner.Sh AUTHORS
3764af18995SSascha Wildner.An -nosplit
3774af18995SSascha Wildner.An Matt Dillon
3784af18995SSascha Wildnerthought up and implemented the
3794af18995SSascha Wildner.Nm
3800592e24dSSascha Wildnerarchitecture and wrote the
3810592e24dSSascha Wildner.Nm vkd
3820592e24dSSascha Wildnerdevice driver.
3830592e24dSSascha Wildner.An Sepherosa Ziehau
3840592e24dSSascha Wildnerwrote the
3850592e24dSSascha Wildner.Nm vke
3860592e24dSSascha Wildnerdevice driver.
3874af18995SSascha WildnerThis manual page was written by
3884af18995SSascha Wildner.An Sascha Wildner .
389