#
# 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_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.

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

