Linux kernel module management tools and library

The module-init-tools package includes various programs needed for automatic loading and unloading of modules under 2.6 and later kernels, as well as other module management programs. Device drivers and filesystems are two examples of loaded and unloaded modules.

Handy Resources

  • Bugs: Please send email to list
  • Git: git://
  • IRC:
  • Mail:
  • Web:

The module-init-tools are used by modern 2.6 series Linux systems to provide userspace-side assistance in loading kernel modules and their dependencies. Originally written to replace the older “modutils”, the utilities include the “modprobe” (load modules and their dependencies), “insmod” (load just a single module), “modinfo” (retrieve module information), and other related module management commands. These are intended to be relatively lightweight in their design, since 2.6 series kernels do much of the work internally.

You will find documentation within the man pages and in this README file,
as well as some hints on development within the HACKING file. You are encouraged to get involved by signing up to the linux project mailing list, and posting patches (git pull requests are welcome). You can also find further information, including the address of the mailing list, this git repository, and so forth on the module-init-tools wiki.

Development takes place against the latest upstream Linux kernels (2.6.33
as of this writing, though kernel development moves quickly). Backward compatibility is generally attempted, but forward compatibility (i.e. the ability for a specific release of module-init-tools to work against data files created by a later version as yet unreleased version) is not. In particular, the generated data files within /lib/modules/ must not be assumed to have any particular format, nor should they be parsed by any other tools. There is a specific “modinfo” utility intended for the purposes of providing the information stored within those files.

Recent Changes

  1. There is no backwards compatibility for pre-2.6 series kernels. If you intend to use an older kernel (wherein the module utilities must perform various linking stages in userspace), use an older a tool such as provided in the “modutils” legacy kernel package.
  2. Explicit locking of kernel modules is no longer being performed at load time (the existing implementation required a writeable mount in /lib/modules that is by no means assured – an alternative of using SYSV locks was experimented with but deemed unnecessary). The kernel will handle one modprobe instance racing with another by denying the load and returning an error message.

Work in progress

We are working on soft-dependency support that will allow modules to provide hints as to dependencies that may not be explicit.


  1. A 2.6 series Linux kernel with sysfs, procfs, and loadable module support enabled in the kernel configuration. It is also required that sysfs and procfs be mounted in their usual /proc and /sys locations in order for certain functionality to be provided.
  2. Module remove support must be enabled if removing is required. You can also enable other options such as forced removal, but this is really a bad idea for anything other than development.
  3. Module versioning (MODVERSIONS) must be enabled if you would like to try to use modules from one kernel with another, similar one without the kernel complaining loudly at the difference.


Make sure you have appropriate development tools (gcc, GNU autotools, docbook2man, etc. Some distributions may require optional packages for a static version of glibc, as an example).

To begin hacking on module-init-tools, you can do the following

  1. aclocal -I m4 && automake –add-missing –copy && autoconf (or run “autoreconf” from an existing setup)
  2. ./configure (optionally specify “–prefix” or “–mandir” for non /usr/local)
  3. make
  4. make install
  5. depmod (to update /lib/modules/ for the latest release)

Please direct any comment/question to the linux-modules mailing list at:



Jon Masters

Many thanks to

  • Adam J. Richter
  • Alan Jenkins
  • Andreas Robinson
  • Jon Masters
  • Kay Sievers
  • Keegan McAllister
  • Marco d’Itri
  • Michal Marek
  • Mike Frysinger
  • Robby Workman
  • Rusty Russell
  • Tom Gundersen