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

menu "Init Utilities"

config CONFIG_INIT
	bool "init"
	default n
	help
	  init is the first program run when the system boots.

config CONFIG_FEATURE_USE_INITTAB
	bool "  Support reading an inittab file?"
	default y
	depends on CONFIG_INIT
	help
	  Allow init to read an inittab file when the system boot.

config CONFIG_FEATURE_INITRD
	bool "  Support running init from within an initrd?"
	default y
	depends on CONFIG_INIT
	help
	  Allow init to be called from an initrd as linuxrc.

config CONFIG_FEATURE_INIT_COREDUMPS
	bool "  Support dumping core for child processes (debugging only)?"
	default n
	depends on CONFIG_INIT
	help
	  If this option is enabled and the file /.init_enable_core
	  exists, then init will call setrlimit() to allow unlimited
	  core file sizes.  If this option is disabled, processes
	  will not generate any core files.

config CONFIG_FEATURE_INIT_SCTTY
	bool "  Support running commands with a controlling-tty?"
	default n
	depends on CONFIG_INIT
	help
	  If this option is enabled a command starting with hyphen (-)
	  is run in its own session (setsid(2)) and possibly with a
	  controlling tty (TIOCSCTTY).  This is not the traditional init
	  behavour, but is often what you want in an embedded system where
	  the console is only accessed during development or for maintenance.

config CONFIG_FEATURE_EXTRA_QUIET
	bool "  Should init be _extra_ quiet on boot?"
	default y
	depends on CONFIG_INIT
	help
	  Prevent init from logging some messages to the console
	  during boot.

config CONFIG_HALT
	bool "halt"
	default y
	help
	  Stop all processes and halt the system.

config CONFIG_MESG
	bool "mesg"
	default y
	help
	  Mesg controls access to your terminal by others.  It is typically
	  used to allow or disallow other users to write to your terminal

config CONFIG_POWEROFF
	bool "poweroff"
	default y
	help
	  Stop all processes and (try to) power off the system.

config CONFIG_REBOOT
	bool "reboot"
	default y
	help
	  Stop all processes and reboot the system.

endmenu

