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

menu "Init Utilities"

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

config DEBUG_INIT
	bool "debugging aid"
	default n
	depends on INIT
	help
	  Turn this on to disable all the dangerous
	  rebooting stuff when debugging.

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

config FEATURE_INIT_SCTTY
	bool "Support running commands with a controlling-tty"
	default n
	depends on 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 FEATURE_INIT_SYSLOG
	bool "Enable init to write to syslog"
	default n
	depends on INIT

config FEATURE_EXTRA_QUIET
	bool "Be _extra_ quiet on boot"
	default y
	depends on INIT
	help
	  Prevent init from logging some messages to the console during boot.

config FEATURE_INIT_COREDUMPS
	bool "Support dumping core for child processes (debugging only)"
	default n
	depends on 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 FEATURE_INITRD
	bool "Support running init from within an initrd (not initramfs)"
	default y
	depends on INIT
	help
	  Legacy support for running init under the old-style initrd.  Allows
	  the name linuxrc to act as init, and it doesn't assume init is PID 1.

	  This does not apply to initramfs, which runs /init as PID 1 and
	  requires no special support.

config HALT
	bool "poweroff, halt, and reboot"
	default y
	help
	  Stop all processes and either halt, reboot, or power off the system.

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

endmenu
