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

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

