#
# 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_2_4_MODULES
	bool "  Support version 2.2.x to 2.4.x Linux kernels"
	default y
	depends on CONFIG_INSMOD
	help
	  Support module loading for 2.2.x and 2.4.x Linux kernels.

config CONFIG_FEATURE_2_6_MODULES
	bool "  Support version 2.6.x Linux kernels"
	default n
	depends on CONFIG_INSMOD 
	help
	  Support module loading for newer 2.6.x Linux kernels.

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_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_FEATURE_QUERY_MODULE_INTERFACE
	bool
	default y
	depends on CONFIG_FEATURE_2_4_MODULES && !CONFIG_FEATURE_2_6_MODULES

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 it is, modprobe can pass only one option
	  to the modules it loads. See option below.

config CONFIG_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.

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

config CONFIG_FEATURE_CHECK_TAINTED_MODULE
	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.


endmenu

