#
# 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_2_MODULES
	bool "  Support older (pre 2.1) Linux kernels"
	default n
	depends on CONFIG_INSMOD
	help
	  Provide insmod support for older (pre 2.1) Linux kernels.

config CONFIG_FEATURE_2_4_MODULES
	bool "  Support version 2.1.x to 2.4.x Linux kernels"
	default y
	depends on CONFIG_INSMOD
	help
	  Support module loading for newer (post 2.1) 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 (post 2.1) Linux kernels.

config CONFIG_FEATURE_INSMOD_VERSION_CHECKING
	bool "  Module version checking"
	default n
	depends on CONFIG_INSMOD && ( CONFIG_FEATURE_2_2_MODULES || 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_2_MODULES || 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_2_MODULES || 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_2_MODULES || 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 "  Support lsmod query_module interface (add 638 bytes)"
	default y
	depends on CONFIG_LSMOD && ( CONFIG_FEATURE_2_4_MODULES || CONFIG_FEATURE_2_6_MODULES )
	help
	  This will provide some extra information about each module when
	  running lsmod.  The fields provided are address, size, flags and
	  usage count.

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

