#
# 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_OLD_MODULE_INTERFACE
	bool "  Support older (pre 2.1) Linux kernels"
	default n
	depends on CONFIG_INSMOD
	help
	  Please submit a patch to add help text for this item.

if CONFIG_INSMOD && !CONFIG_FEATURE_OLD_MODULE_INTERFACE
    config CONFIG_FEATURE_NEW_MODULE_INTERFACE
	    default y
    comment "  Support new (post 2.1) Linux kernels (Forced enabled)"
endif

if CONFIG_FEATURE_OLD_MODULE_INTERFACE
config CONFIG_FEATURE_NEW_MODULE_INTERFACE
	bool "  Support new (post 2.1) Linux kernels"
	default y
	depends on CONFIG_INSMOD
	help
	  Please submit a patch to add help text for this item.
endif

config CONFIG_FEATURE_INSMOD_VERSION_CHECKING
	bool "  Module version checking"
	default n
	depends on CONFIG_INSMOD
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS
	bool "  Add module symbols to kernel symbol table"
	default n
	depends on CONFIG_INSMOD
	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
	help
	  Please submit a patch to add help text for this item.

config CONFIG_FEATURE_INSMOD_LOAD_MAP
	bool "  Enable load map (-m) option" 
	default n
	depends on CONFIG_INSMOD
	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_NEW_MODULE_INTERFACE
	help
	  Please submit a patch to add help text for this item.

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
	  Please submit a patch to add help text for this item.


endmenu

