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