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

menu "Linux Module Utilities"

config CONFIG_INSMOD
	bool "insmod"
	default n
	help
	  insmod is used to load specified modules in the running kernel.

config CONFIG_FEATURE_INSMOD_VERSION_CHECKING
	bool "Module version checking"
	default n
	depends on CONFIG_INSMOD && CONFIG_FEATURE_2_4_MODULES
	help
	  Support checking of versions for modules.  This is used to
	  ensure that the kernel and module are made for each other.

config CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS
	bool "Add module symbols to kernel symbol table"
	default n
	depends on CONFIG_INSMOD && CONFIG_FEATURE_2_4_MODULES
	help
	  By adding module symbols to the kernel symbol table, Oops messages
	  occuring within kernel modules can be properly debugged.  By enabling
	  this feature, module symbols will always be added to the kernel symbol
	  table for properly debugging support.  If you are not interested in
	  Oops messages from kernel modules, say N.

config CONFIG_FEATURE_INSMOD_LOADINKMEM
	bool "In kernel memory optimization (uClinux only)"
	default n
	depends on CONFIG_INSMOD && CONFIG_FEATURE_2_4_MODULES
	help
	  This is a special uClinux only memory optimization that lets insmod
	  load the specified kernel module directly into kernel space, reducing
	  memory usage by preventing the need for two copies of the module
	  being loaded into memory.

config CONFIG_FEATURE_INSMOD_LOAD_MAP
	bool "Enable load map (-m) option"
	default n
	depends on CONFIG_INSMOD && CONFIG_FEATURE_2_4_MODULES
	help
	  Enabling this, one would be able to get a load map
	  output on stdout. This makes kernel module debugging
	  easier.
	  If you don't plan to debug kernel modules, you
	  don't need this option.

config CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL
	bool "Symbols in load map"
	default y
	depends on CONFIG_FEATURE_INSMOD_LOAD_MAP
	help
	  Without this option, -m will only output section
	  load map.  With this option, -m will also output
	  symbols load map.

config CONFIG_RMMOD
	bool "rmmod"
	default n
	help
	  rmmod is used to unload specified modules from the kernel.

config CONFIG_LSMOD
	bool "lsmod"
	default n
	help
	  lsmod is used to display a list of loaded modules.

config CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT
	bool "lsmod pretty output for 2.6.x Linux kernels "
	default n
	depends on CONFIG_LSMOD 
	help
	  This option makes output format of lsmod adjusted to 
	  the format of module-init-tools for Linux kernel 2.6.

config CONFIG_MODPROBE
	bool "modprobe"
	default n
	help
	  Handle the loading of modules, and their dependancies on a high
	  level.

	  Note that in the state, modprobe does not understand multiple
	  module options from the configuration file. See option below.

config CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS
	bool "Multiple options parsing"
	default y
	depends on CONFIG_MODPROBE
	help
	  Allow modprobe to understand more than one option to pass to
	  modules.

	  This is a WIP, while waiting for a common argument parsing
	  common amongst all BB applets (shell, modprobe, etc...) and
	  adds around 600 bytes on x86, 700 bytes on ARM. The code is
	  biggish and uggly, but just works.

	  Saying Y here is not a bad idea if you're not that short
	  on storage capacity.

comment "Options common to multiple modutils"
	depends on CONFIG_INSMOD || CONFIG_RMMOD || CONFIG_MODPROBE || CONFIG_LSMOD

config CONFIG_FEATURE_CHECK_TAINTED_MODULE
	# Simulate indentation
	bool "  Support tainted module checking with new kernels"
	default y
	depends on CONFIG_INSMOD || CONFIG_LSMOD
	help
	  Support checking for tainted modules.  These are usually binary
	  only modules that will make the linux-kernel list ignore your
	  support request.
	  This option is required to support GPLONLY modules.

config CONFIG_FEATURE_2_4_MODULES
	# Simulate indentation
	bool "  Support version 2.2.x to 2.4.x Linux kernels"
	default y
	depends on CONFIG_INSMOD || CONFIG_RMMOD
	help
	  Support module loading for 2.2.x and 2.4.x Linux kernels.

config CONFIG_FEATURE_2_6_MODULES
	# Simulate indentation
	bool "  Support version 2.6.x Linux kernels"
	default y
	depends on CONFIG_INSMOD || CONFIG_RMMOD || CONFIG_MODPROBE
	help
	  Support module loading for newer 2.6.x Linux kernels.


config CONFIG_FEATURE_QUERY_MODULE_INTERFACE
	bool
	default y
	depends on CONFIG_FEATURE_2_4_MODULES && !CONFIG_FEATURE_2_6_MODULES


endmenu

