Site Home Page The UML Wiki UML Community Site The UML roadmap What it's good for Case Studies Kernel Capabilities Downloading it Running it Compiling Installation Skas Mode Incremental Patches Test Suite Host memory use Building filesystems Troubles User Contributions Related Links The ToDo list Projects Diary Thanks Contacts
Tutorials The HOWTO (html) The HOWTO (text) Host file access Device inputs Sharing filesystems Creating filesystems Resizing filesystems Virtual Networking Management Console Kernel Debugging UML Honeypots gprof and gcov Running X Diagnosing problems Configuration Installing Slackware Porting UML IO memory emulation UML on 2G/2G hosts Adding a UML system call Running nested UMLs
How you can help Overview Documentation Utilities Kernel bugs Kernel projects
Screenshots A virtual network An X session
Transcripts A login session A debugging session Slackware installation
Reference Kernel switches Slackware README
Papers ALS 2000 paper (html) ALS 2000 paper (TeX) ALS 2000 slides LCA 2001 slides OLS 2001 paper (html) OLS 2001 paper (TeX) ALS 2001 paper (html) ALS 2001 paper (TeX) UML security (html) LCA 2002 (html) WVU 2002 (html) Security Roundtable (html) OLS 2002 slides LWE 2005 slides
Fun and Games Kernel Hangman Disaster of the Month

### Kernel command line switches

This is a list of the UML-specific command line arguments, plus a few generic ones which deserve mention here.

--help

> This causes UML to print a usage message and exit.

--version

> This causes UML to print its version and exit.

--showconfig

> This causes UML to print the config file it was built with and exit.

con

> con=channel attaches one or more UML consoles to the named channel. The format of the channel is described here.

debug

> Starts up the kernel under the control of gdb. See the kernel debugging tutorial and the debugging session pages for more information. Another form of this switch is debug=go which is the same as debug except that the kernel runs instead of stopping at the beginning of start_kernel.

> If you're using ddd to debug UML, you will want to specify debug=parent as well as gdb-pid (see below).

> This switch is specific to tt mode and has no effect in skas mode.

debugtrace

> Causes the tracing thread to pause until it is attached by a debugger and continued. This is mostly for debugging crashes early during boot, and should be pretty much obsoleted by the debug switch.

> This switch is specific to tt mode and has no effect in skas mode.

dsp

> dsp=host dsp tells the UML sound driver what the filename of the host dsp is so that it can relay to it. The default is "/dev/sound/dsp".

eth

> ethn=host interface enables a virtual ethernet device inside UML. See the networking HOWTO for more information on setting up UML networking.

fakehd

> Causes the ubd device to put its partition information in /proc/partitions under the device name "hd" rather than "ubd". Again, this is to fake out installation procedures which are overly picky in their sanity-checking.

fake_ide

> fake_ide causes the ubd driver to install realistic-looking entries into /proc/ide. This is useful for convincing some distribution installation procedures to run inside UML.

gdb-pid

> gdb-pid=pid , when used with debug, specifies the pid of an already running debugger that UML should attach to. This can be used to debug UML with a gdb wrapper such as emacs or ddd, as well as with debuggers other than gdb. See the debugging page for more information.

> This switch is specific to tt mode and has no effect in skas mode.

honeypot

> honeypot causes UML to rearrange its address space in order to put process stacks in the same location as on the host. This allows stack smash exploits to work against UML just as they do against the host. This option enables jail, since it is most unlikely that a honeypot UML should run without it enabled.

> This switch is specific to tt mode and has no effect in skas mode. Honeypots should be run in skas mode anyway, since they will perform far better, and the security model is much simpler, making it less likely that there will be exploitable bugs that will allow an attacker to break out.

initrd

> initrd=image sets the filename of the initrd image that UML will boot from.

iomem

> iomem=name,file makes file available to be mapped by a driver inside UML. See this page for more information.

jail

> jail enables protection of UML kernel memory from UML processes. This is disabled by default for performance reasons. Without it, it is fairly simple to break out of UML by changing the right pieces of UML kernel data.

> This switch is specific to tt mode and has no effect in skas mode. skas mode doesn't have the same problems with processes being able to break out to the host, so this switch isn't needed. Effectively, 'jail' mode is always enabled in skas mode.

mconsole

> mconsole=notify:socket asks the mconsole driver to send the name of its socket to the Unix socket named by this switch. This is intended for the use of scripts which want to know when they can start using the mconsole and what socket they should send commands to.

mem

> mem=size controls how much "physical" memory the kernel allocates for the system. The size is specified as a number followed by one of 'k', 'K", 'm', 'M", which have the obvious meanings. This is not related to the amount of memory in the physical machine. It can be more, and the excess, if it's ever used, will just be swapped out.

> In its default configuration, UML has a maximum physical memory size of just under 512M. If you specify more than that, it will be shrunk, and a warning printed out. If your UML is configured with highmem support (CONFIG_HIGHMEM) enabled, then any physical memory beyond what can be directly mapped in to the kernel address space will become highmem. In this case, the current limit on UML physical memory is 4G.

> Something to note if you have a small /tmp is that UML creates a file in /tmp which is the same size as the memory you specified. It is not visible because UML unlinks it after creating it. This can cause /tmp to mysteriously become full. UML respects the TMP, TEMP, and TMPDIR environment variables, so you can avoid this problem by specifying an alternate temp directory.

> Something else to note is that UML is noticably faster with a tmpfs /tmp than with a disk-based /tmp such as ext2 or ext3.

mixer

> mixer=host mixer tells the UML sound driver what the filename of the host mixer is so that it can relay to it. The default is "/dev/sound/mixer".

mode=tt

> mode=tt forces UML to run in tt mode (see this page for the details) even when skas support is built in to UML and the host. Using this switch without both tt and skas modes built in to UML will have no effect aside from producing a warning during boot.

ncpus

> ncpus=number tells an SMP kernel how many virtual processors to start. This switch will only take effect if CONFIG_UML_SMP is enabled in the UML configuration.

ssl

> ssl=channel attaches one or more UML serial lines to the named channel. The format of the channel is described here.

root

> root=root device is actually used by the generic kernel in exactly the same way as in any other kernel. If you configure a number of block devices and want to boot off something other than ubd0, you would use something like:

> > `root=/dev/ubd5`

tty_log_dir

> tty_log_dir=directory changes the directory to which UML writes tty logging files. This requires that tty logging be configured into UML. See the tty logging page for more details.

tty_log_fd

> tty_log_fd=file descriptor causes tty logging records to be written to the file descriptor specified. This descriptor must be opened before UML is run and passed in to UML. See the tty logging page for more details.

ubd

> ubd=number causes the ubd device to take over a different major number than the one assigned to it. This is useful for making it appear to be an "hd" device.

ubd

> ubdn=filename is used to associate a device with a file in the underlying filesystem. Usually, there is a filesystem in the file, but that's not required. Swap devices containing swap files can be specified like this. Also, a file which doesn't contain a filesystem can have its contents read in the virtual machine by running dd on the device. n must be in the range 0 to 7. Appending an 'r' to the number will cause that device to be mounted read-only. Appending an 's' will cause that device to do all IO to the host synchronously. If both 'r' and 's' are specified, it must be as 'rs'.

> Inside UML, if you are not using devfs, the devices are accessible with minor numbers 0, 16, ..., with the other minor numbers being used for partitions. So, the device that is ubd1 on the UML command line becomes /dev/ubd16 inside UML.

ubd

> ubdn=cow-file,backing-file is used to layer a COW file on another, possibly readonly, file. This is useful in a number of ways. See this page for all the details.

umid

> umid=name is used to assign a name to a virtual machine. This is intended to make it easy for UIs to manage multiple UMLs. Currently, the only effect of this is that UML writes its tracing thread pid in /tmp/uml/name.

uml_dir

> uml_dir=directory sets the directory in which UML will put the umid directory, which in turn will contain the pid file and mconsole socket.

umn

> umn=ip-address sets the ip address of the host side of the slip device that the umn device configures. This is necessary if you want to set up networking, but your local net isn't 192.168.0.x, or you want to run multiple virtual machines on a network, in which case, you need to assign different ip addresses to the different machines. See the networking tutorial for more information.

xterm

> xterm=terminal emulator,title switch,exec switch allows you to specify an alternate terminal emulator for UML to use for the debugger, consoles, and serial lines. terminal emulator is the emulator itself, title switch is the switch it uses to set its title, and exec switch is the switch it uses to specify a command line to exec. The two switches need to have the same syntax and semantics of xterm's "-T" and "-e". The default value is "xterm=xterm,-T,-e". To use gnome-terminal, you would specify "xterm=gnome-terminal,-t,-x". If any fields are left blank, the default values will be used. So, to use "myxterm", which has the same switches as xterm, "xterm=myxterm" will suffice.

Hosted at