#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "Linux System Utilities"

config ACPID
	bool "acpid"
	default n
	help
	  acpid listens to ACPI events coming either in textual form from
	  /proc/acpi/event (though it is marked deprecated it is still widely
	  used and _is_ a standard) or in binary form from specified evdevs
	  (just use /dev/input/event*).

	  It parses the event to retrieve ACTION and a possible PARAMETER.
	  It then spawns /etc/acpi/<ACTION>[/<PARAMETER>] either via run-parts
	  (if the resulting path is a directory) or directly as an executable.

	  N.B. acpid relies on run-parts so have the latter installed.

config FEATURE_ACPID_COMPAT
	bool "Accept and ignore redundant options"
	default n
	depends on ACPID
	help
	  Accept and ignore compatibility options -g -m -s -S -v.

config BLKID
	bool "blkid"
	default n
	select VOLUMEID
	help
	  Lists labels and UUIDs of all filesystems.
	  WARNING:
	  With all submodules selected, it will add ~8k to busybox.

config DMESG
	bool "dmesg"
	default n
	help
	  dmesg is used to examine or control the kernel ring buffer. When the
	  Linux kernel prints messages to the system log, they are stored in
	  the kernel ring buffer. You can use dmesg to print the kernel's ring
	  buffer, clear the kernel ring buffer, change the size of the kernel
	  ring buffer, and change the priority level at which kernel messages
	  are also logged to the system console. Enable this option if you
	  wish to enable the 'dmesg' utility.

config FEATURE_DMESG_PRETTY
	bool "Pretty dmesg output"
	default y
	depends on DMESG
	help
	  If you wish to scrub the syslog level from the output, say 'Y' here.
	  The syslog level is a string prefixed to every line with the form
	  "<#>".

	  With this option you will see:
	    # dmesg
	    Linux version 2.6.17.4 .....
	    BIOS-provided physical RAM map:
	     BIOS-e820: 0000000000000000 - 000000000009f000 (usable)

	  Without this option you will see:
	    # dmesg
	    <5>Linux version 2.6.17.4 .....
	    <6>BIOS-provided physical RAM map:
	    <6> BIOS-e820: 0000000000000000 - 000000000009f000 (usable)

config FBSET
	bool "fbset"
	default n
	help
	  fbset is used to show or change the settings of a Linux frame buffer
	  device. The frame buffer device provides a simple and unique
	  interface to access a graphics display. Enable this option
	  if you wish to enable the 'fbset' utility.

config FEATURE_FBSET_FANCY
	bool "Turn on extra fbset options"
	default n
	depends on FBSET
	help
	  This option enables extended fbset options, allowing one to set the
	  framebuffer size, color depth, etc. interface to access a graphics
	  display. Enable this option if you wish to enable extended fbset
	  options.

config FEATURE_FBSET_READMODE
	bool "Turn on fbset readmode support"
	default n
	depends on FBSET
	help
	  This option allows fbset to read the video mode database stored by
	  default as /etc/fb.modes, which can be used to set frame buffer
	  device to pre-defined video modes.

config FDFLUSH
	bool "fdflush"
	default n
	help
	  fdflush is only needed when changing media on slightly-broken
	  removable media drives. It is used to make Linux believe that a
	  hardware disk-change switch has been actuated, which causes Linux to
	  forget anything it has cached from the previous media. If you have
	  such a slightly-broken drive, you will need to run fdflush every time
	  you change a disk. Most people have working hardware and can safely
	  leave this disabled.

config FDFORMAT
	bool "fdformat"
	default n
	help
	  fdformat is used to low-level format a floppy disk.

config FDISK
	bool "fdisk"
	default n
	help
	  The fdisk utility is used to divide hard disks into one or more
	  logical disks, which are generally called partitions. This utility
	  can be used to list and edit the set of partitions or BSD style
	  'disk slices' that are defined on a hard drive.

config FDISK_SUPPORT_LARGE_DISKS
	bool "Support over 4GB disks"
	default y
	depends on FDISK
	help
	  Enable this option to support large disks > 4GB.

config FEATURE_FDISK_WRITABLE
	bool "Write support"
	default y
	depends on FDISK
	help
	  Enabling this option allows you to create or change a partition table
	  and write those changes out to disk. If you leave this option
	  disabled, you will only be able to view the partition table.

config FEATURE_AIX_LABEL
	bool "Support AIX disklabels"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to create or change AIX disklabels.
	  Most people can safely leave this option disabled.

config FEATURE_SGI_LABEL
	bool "Support SGI disklabels"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to create or change SGI disklabels.
	  Most people can safely leave this option disabled.

config FEATURE_SUN_LABEL
	bool "Support SUN disklabels"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to create or change SUN disklabels.
	  Most people can safely leave this option disabled.

config FEATURE_OSF_LABEL
	bool "Support BSD disklabels"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to create or change BSD disklabels
	  and define and edit BSD disk slices.

config FEATURE_FDISK_ADVANCED
	bool "Support expert mode"
	default n
	depends on FDISK && FEATURE_FDISK_WRITABLE
	help
	  Enabling this option allows you to do terribly unsafe things like
	  define arbitrary drive geometry, move the beginning of data in a
	  partition, and similarly evil things. Unless you have a very good
	  reason you would be wise to leave this disabled.

config FINDFS
	bool "findfs"
	default n
	select VOLUMEID
	help
	  Prints the name of a filesystem with given label or UUID.
	  WARNING:
	  With all submodules selected, it will add ~8k to busybox.

config FREERAMDISK
	bool "freeramdisk"
	default n
	help
	  Linux allows you to create ramdisks. This utility allows you to
	  delete them and completely free all memory that was used for the
	  ramdisk. For example, if you boot Linux into a ramdisk and later
	  pivot_root, you may want to free the memory that is allocated to the
	  ramdisk. If you have no use for freeing memory from a ramdisk, leave
	  this disabled.

config FSCK_MINIX
	bool "fsck_minix"
	default n
	help
	  The minix filesystem is a nice, small, compact, read-write filesystem
	  with little overhead. It is not a journaling filesystem however and
	  can experience corruption if it is not properly unmounted or if the
	  power goes off in the middle of a write. This utility allows you to
	  check for and attempt to repair any corruption that occurs to a minix
	  filesystem.

config MKFS_MINIX
	bool "mkfs_minix"
	default n
	help
	  The minix filesystem is a nice, small, compact, read-write filesystem
	  with little overhead. If you wish to be able to create minix
	  filesystems this utility will do the job for you.

comment "Minix filesystem support"
	depends on FSCK_MINIX || MKFS_MINIX

config FEATURE_MINIX2
	bool "Support Minix fs v2 (fsck_minix/mkfs_minix)"
	default y
	depends on FSCK_MINIX || MKFS_MINIX
	help
	  If you wish to be able to create version 2 minix filesystems, enable
	  this. If you enabled 'mkfs_minix' then you almost certainly want to
	  be using the version 2 filesystem support.

config MKFS_VFAT
	bool "mkfs_vfat"
	default n
	help
	  Utility to create FAT32 filesystems.

config GETOPT
	bool "getopt"
	default n
	help
	  The getopt utility is used to break up (parse) options in command
	  lines to make it easy to write complex shell scripts that also check
	  for legal (and illegal) options. If you want to write horribly
	  complex shell scripts, or use some horribly complex shell script
	  written by others, this utility may be for you. Most people will
	  wisely leave this disabled.

config HEXDUMP
	bool "hexdump"
	default n
	help
	  The hexdump utility is used to display binary data in a readable
	  way that is comparable to the output from most hex editors.

config FEATURE_HEXDUMP_REVERSE
	bool "Support -R, reverse of 'hexdump -Cv'"
	default n
	depends on HEXDUMP
	help
	  The hexdump utility is used to display binary data in an ascii
	  readable way. This option creates binary data from an ascii input.
	  NB: this option is non-standard. It's unwise to use it in scripts
	  aimed to be portable.

config HD
	bool "hd"
	default n
	select HEXDUMP
	help
	  hd is an alias to hexdump -C.

config HWCLOCK
	bool "hwclock"
	default n
	help
	  The hwclock utility is used to read and set the hardware clock
	  on a system. This is primarily used to set the current time on
	  shutdown in the hardware clock, so the hardware will keep the
	  correct time when Linux is _not_ running.

config FEATURE_HWCLOCK_LONG_OPTIONS
	bool "Support long options (--hctosys,...)"
	default n
	depends on HWCLOCK && GETOPT_LONG
	help
	  By default, the hwclock utility only uses short options. If you
	  are overly fond of its long options, such as --hctosys, --utc, etc)
	  then enable this option.

config FEATURE_HWCLOCK_ADJTIME_FHS
	bool "Use FHS /var/lib/hwclock/adjtime"
	default y
	depends on HWCLOCK
	help
	  Starting with FHS 2.3, the adjtime state file is supposed to exist
	  at /var/lib/hwclock/adjtime instead of /etc/adjtime. If you wish
	  to use the FHS behavior, answer Y here, otherwise answer N for the
	  classic /etc/adjtime path.

	  pathname.com/fhs/pub/fhs-2.3.html#VARLIBHWCLOCKSTATEDIRECTORYFORHWCLO

config IPCRM
	bool "ipcrm"
	default n
	select FEATURE_SUID
	help
	  The ipcrm utility allows the removal of System V interprocess
	  communication (IPC) objects and the associated data structures
	  from the system.

config IPCS
	bool "ipcs"
	default n
	select FEATURE_SUID
	help
	  The ipcs utility is used to provide information on the currently
	  allocated System V interprocess (IPC) objects in the system.

config LOSETUP
	bool "losetup"
	default n
	help
	  losetup is used to associate or detach a loop device with a regular
	  file or block device, and to query the status of a loop device. This
	  version does not currently support enabling data encryption.

config MDEV
	bool "mdev"
	default n
	help
	  mdev is a mini-udev implementation for dynamically creating device
	  nodes in the /dev directory.

	  For more information, please see docs/mdev.txt

config FEATURE_MDEV_CONF
	bool "Support /etc/mdev.conf"
	default n
	depends on MDEV
	help
	  Add support for the mdev config file to control ownership and
	  permissions of the device nodes.

	  For more information, please see docs/mdev.txt

config FEATURE_MDEV_RENAME
	bool "Support subdirs/symlinks"
	default n
	depends on FEATURE_MDEV_CONF
	help
	  Add support for renaming devices and creating symlinks.

	  For more information, please see docs/mdev.txt

config FEATURE_MDEV_RENAME_REGEXP
	bool "Support regular expressions substitutions when renaming device"
	default n
	depends on FEATURE_MDEV_RENAME
	help
	  Add support for regular expressions substitutions when renaming
	  device.

config FEATURE_MDEV_EXEC
	bool "Support command execution at device addition/removal"
	default n
	depends on FEATURE_MDEV_CONF
	help
	  This adds support for an optional field to /etc/mdev.conf for
	  executing commands when devices are created/removed.

	  For more information, please see docs/mdev.txt

config FEATURE_MDEV_LOAD_FIRMWARE
	bool "Support loading of firmwares"
	default n
	depends on MDEV
	help
	  Some devices need to load firmware before they can be usable.

	  These devices will request userspace look up the files in
	  /lib/firmware/ and if it exists, send it to the kernel for
	  loading into the hardware.

config MKSWAP
	bool "mkswap"
	default n
	help
	  The mkswap utility is used to configure a file or disk partition as
	  Linux swap space. This allows Linux to use the entire file or
	  partition as if it were additional RAM, which can greatly increase
	  the capability of low-memory machines. This additional memory is
	  much slower than real RAM, but can be very helpful at preventing your
	  applications being killed by the Linux out of memory (OOM) killer.
	  Once you have created swap space using 'mkswap' you need to enable
	  the swap space using the 'swapon' utility.

config FEATURE_MKSWAP_V0
	bool "Version 0 support"
	default n
	depends on MKSWAP
#	depends on MKSWAP && DEPRECATED
	help
	  Enable support for the old v0 style.
	  If your kernel is older than 2.1.117, then v0 support is the
	  only option.

config MORE
	bool "more"
	default n
	help
	  more is a simple utility which allows you to read text one screen
	  sized page at a time. If you want to read text that is larger than
	  the screen, and you are using anything faster than a 300 baud modem,
	  you will probably find this utility very helpful. If you don't have
	  any need to reading text files, you can leave this disabled.

config FEATURE_USE_TERMIOS
	bool "Use termios to manipulate the screen"
	default y
	depends on MORE || TOP
	help
	  This option allows utilities such as 'more' and 'top' to determine
	  the size of the screen. If you leave this disabled, your utilities
	  that display things on the screen will be especially primitive and
	  will be unable to determine the current screen size, and will be
	  unable to move the cursor.

config VOLUMEID
	bool #No description makes it a hidden option
	default n

config FEATURE_VOLUMEID_EXT
	bool "Ext filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_REISERFS
	bool "Reiser filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_FAT
	bool "fat filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_HFS
	bool "hfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_JFS
	bool "jfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_UFS
###	bool "ufs filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_XFS
	bool "xfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_NTFS
	bool "ntfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_ISO9660
	bool "iso9660 filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_UDF
	bool "udf filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_LUKS
	bool "luks filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_LINUXSWAP
	bool "linux swap filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_LVM
###	bool "lvm"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_CRAMFS
	bool "cramfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_HPFS
###	bool "hpfs filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_ROMFS
	bool "romfs filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

config FEATURE_VOLUMEID_SYSV
	bool "sysv filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_MINIX
###	bool "minix filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### These only detect partition tables - not used (yet?)
### config FEATURE_VOLUMEID_MAC
###	bool "mac filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO
###
### config FEATURE_VOLUMEID_MSDOS
###	bool "msdos filesystem"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_OCFS2
	bool "ocfs2 filesystem"
	default n
	depends on VOLUMEID
	help
	  TODO

### config FEATURE_VOLUMEID_HIGHPOINTRAID
###	bool "highpoint raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_ISWRAID
###	bool "intel raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_LSIRAID
###	bool "lsi raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_VIARAID
###	bool "via raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_SILICONRAID
###	bool "silicon raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_NVIDIARAID
###	bool "nvidia raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

### config FEATURE_VOLUMEID_PROMISERAID
###	bool "promise raid"
###	default n
###	depends on VOLUMEID
###	help
###	  TODO

config FEATURE_VOLUMEID_LINUXRAID
	bool "linuxraid"
	default n
	depends on VOLUMEID
	help
	  TODO

config MOUNT
	bool "mount"
	default n
	help
	  All files and filesystems in Unix are arranged into one big directory
	  tree. The 'mount' utility is used to graft a filesystem onto a
	  particular part of the tree. A filesystem can either live on a block
	  device, or it can be accessible over the network, as is the case with
	  NFS filesystems. Most people using BusyBox will also want to enable
	  the 'mount' utility.

config FEATURE_MOUNT_FAKE
	bool "Support option -f"
	default n
	depends on MOUNT
	help
	  Enable support for faking a file system mount.

config FEATURE_MOUNT_VERBOSE
	bool "Support option -v"
	default n
	depends on MOUNT
	help
	  Enable multi-level -v[vv...] verbose messages. Useful if you
	  debug mount problems and want to see what is exactly passed
	  to the kernel.

config FEATURE_MOUNT_HELPERS
	bool "Support mount helpers"
	default n
	depends on MOUNT
	help
	  Enable mounting of virtual file systems via external helpers.
	  E.g. "mount obexfs#-b00.11.22.33.44.55 /mnt" will in effect call
	  "obexfs -b00.11.22.33.44.55 /mnt"
	  Also "mount -t sometype [-o opts] fs /mnt" will try
	  "sometype [-o opts] fs /mnt" if simple mount syscall fails.
	  The idea is to use such virtual filesystems in /etc/fstab.

config FEATURE_MOUNT_LABEL
	bool "Support specifiying devices by label or UUID"
	default n
	depends on MOUNT
	select VOLUMEID
	help
	  This allows for specifying a device by label or uuid, rather than by
	  name. This feature utilizes the same functionality as blkid/findfs.

config FEATURE_MOUNT_NFS
	bool "Support mounting NFS file systems"
	default n
	depends on MOUNT
	select FEATURE_HAVE_RPC
	select FEATURE_SYSLOG
	help
	  Enable mounting of NFS file systems.

config FEATURE_MOUNT_CIFS
	bool "Support mounting CIFS/SMB file systems"
	default n
	depends on MOUNT
	help
	  Enable support for samba mounts.

config FEATURE_MOUNT_FLAGS
	depends on MOUNT
	bool "Support lots of -o flags in mount"
	default y
	help
	  Without this, mount only supports ro/rw/remount. With this, it
	  supports nosuid, suid, dev, nodev, exec, noexec, sync, async, atime,
	  noatime, diratime, nodiratime, loud, bind, move, shared, slave,
	  private, unbindable, rshared, rslave, rprivate, and runbindable.

config FEATURE_MOUNT_FSTAB
	depends on MOUNT
	bool "Support /etc/fstab and -a"
	default y
	help
	  Support mount all and looking for files in /etc/fstab.

config PIVOT_ROOT
	bool "pivot_root"
	default n
	help
	  The pivot_root utility swaps the mount points for the root filesystem
	  with some other mounted filesystem. This allows you to do all sorts
	  of wild and crazy things with your Linux system and is far more
	  powerful than 'chroot'.

	  Note: This is for initrd in linux 2.4. Under initramfs (introduced
	  in linux 2.6) use switch_root instead.

config RDATE
	bool "rdate"
	default n
	help
	  The rdate utility allows you to synchronize the date and time of your
	  system clock with the date and time of a remote networked system using
	  the RFC868 protocol, which is built into the inetd daemon on most
	  systems.

config RDEV
       bool "rdev"
       default n
       help
	  Print the device node associated with the filesystem mounted at '/'.

config READPROFILE
	bool "readprofile"
	default n
	help
	  This allows you to parse /proc/profile for basic profiling.

config RTCWAKE
	bool "rtcwake"
	default n
	help
	  Enter a system sleep state until specified wakeup time.

config SCRIPT
	bool "script"
	default n
	help
	  The script makes typescript of terminal session.

config SETARCH
	bool "setarch"
	default n
	help
	  The linux32 utility is used to create a 32bit environment for the
	  specified program (usually a shell). It only makes sense to have
	  this util on a system that supports both 64bit and 32bit userland
	  (like amd64/x86, ppc64/ppc, sparc64/sparc, etc...).

config SWAPONOFF
	bool "swaponoff"
	default n
	help
	  This option enables both the 'swapon' and the 'swapoff' utilities.
	  Once you have created some swap space using 'mkswap', you also need
	  to enable your swap space with the 'swapon' utility. The 'swapoff'
	  utility is used, typically at system shutdown, to disable any swap
	  space. If you are not using any swap space, you can leave this
	  option disabled.

config FEATURE_SWAPON_PRI
	bool "Support priority option -p"
	default n
	depends on SWAPONOFF
	help
	  Enable support for setting swap device priority in swapon.

config SWITCH_ROOT
	bool "switch_root"
	default n
	help
	  The switch_root utility is used from initramfs to select a new
	  root device. Under initramfs, you have to use this instead of
	  pivot_root. (Stop reading here if you don't care why.)

	  Booting with initramfs extracts a gzipped cpio archive into rootfs
	  (which is a variant of ramfs/tmpfs). Because rootfs can't be moved
	  or unmounted*, pivot_root will not work from initramfs. Instead,
	  switch_root deletes everything out of rootfs (including itself),
	  does a mount --move that overmounts rootfs with the new root, and
	  then execs the specified init program.

	  * Because the Linux kernel uses rootfs internally as the starting
	  and ending point for searching through the kernel's doubly linked
	  list of active mount points. That's why.

config UMOUNT
	bool "umount"
	default n
	help
	  When you want to remove a mounted filesystem from its current mount
	  point, for example when you are shutting down the system, the
	  'umount' utility is the tool to use. If you enabled the 'mount'
	  utility, you almost certainly also want to enable 'umount'.

config FEATURE_UMOUNT_ALL
	bool "Support option -a"
	default n
	depends on UMOUNT
	help
	  Support -a option to unmount all currently mounted filesystems.

comment "Common options for mount/umount"
	depends on MOUNT || UMOUNT

config FEATURE_MOUNT_LOOP
	bool "Support loopback mounts"
	default n
	depends on MOUNT || UMOUNT
	help
	  Enabling this feature allows automatic mounting of files (containing
	  filesystem images) via the linux kernel's loopback devices.
	  The mount command will detect you are trying to mount a file instead
	  of a block device, and transparently associate the file with a
	  loopback device. The umount command will also free that loopback
	  device.

	  You can still use the 'losetup' utility (to manually associate files
	  with loop devices) if you need to do something advanced, such as
	  specify an offset or cryptographic options to the loopback device.
	  (If you don't want umount to free the loop device, use "umount -D".)

config FEATURE_MTAB_SUPPORT
	bool "Support for the old /etc/mtab file"
	default n
	depends on MOUNT || UMOUNT
	select FEATURE_MOUNT_FAKE
	help
	  Historically, Unix systems kept track of the currently mounted
	  partitions in the file "/etc/mtab". These days, the kernel exports
	  the list of currently mounted partitions in "/proc/mounts", rendering
	  the old mtab file obsolete. (In modern systems, /etc/mtab should be
	  a symlink to /proc/mounts.)

	  The only reason to have mount maintain an /etc/mtab file itself is if
	  your stripped-down embedded system does not have a /proc directory.
	  If you must use this, keep in mind it's inherently brittle (for
	  example a mount under chroot won't update it), can't handle modern
	  features like separate per-process filesystem namespaces, requires
	  that your /etc directory be writeable, tends to get easily confused
	  by --bind or --move mounts, won't update if you rename a directory
	  that contains a mount point, and so on. (In brief: avoid.)

	  About the only reason to use this is if you've removed /proc from
	  your kernel.

endmenu
