xref: /freebsd/share/man/man4/kld.4 (revision 6d249eee2769b135d56fac673f6b297b9416ed42)
122872b5fSGuy Helmer.\" Copyright (c) 1993 Christopher G. Demetriou
222872b5fSGuy Helmer.\" All rights reserved.
322872b5fSGuy Helmer.\"
422872b5fSGuy Helmer.\" Redistribution and use in source and binary forms, with or without
522872b5fSGuy Helmer.\" modification, are permitted provided that the following conditions
622872b5fSGuy Helmer.\" are met:
722872b5fSGuy Helmer.\" 1. Redistributions of source code must retain the above copyright
822872b5fSGuy Helmer.\"    notice, this list of conditions and the following disclaimer.
922872b5fSGuy Helmer.\" 2. Redistributions in binary form must reproduce the above copyright
1022872b5fSGuy Helmer.\"    notice, this list of conditions and the following disclaimer in the
1122872b5fSGuy Helmer.\"    documentation and/or other materials provided with the distribution.
1222872b5fSGuy Helmer.\" 3. The name of the author may not be used to endorse or promote products
1322872b5fSGuy Helmer.\"    derived from this software without specific prior written permission
1422872b5fSGuy Helmer.\"
1522872b5fSGuy Helmer.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1622872b5fSGuy Helmer.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1722872b5fSGuy Helmer.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1822872b5fSGuy Helmer.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1922872b5fSGuy Helmer.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2022872b5fSGuy Helmer.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2122872b5fSGuy Helmer.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2222872b5fSGuy Helmer.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2322872b5fSGuy Helmer.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2422872b5fSGuy Helmer.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2522872b5fSGuy Helmer.\"
267f3dea24SPeter Wemm.\" $FreeBSD$
2722872b5fSGuy Helmer.\"
2822872b5fSGuy Helmer.Dd November 08, 1998
2922872b5fSGuy Helmer.Dt KLD 4
3022872b5fSGuy Helmer.\".Os FreeBSD 3.0
3122872b5fSGuy Helmer.Sh NAME
3222872b5fSGuy Helmer.Nm kld
3322872b5fSGuy Helmer.Nd dynamic kernel linker facility
3422872b5fSGuy Helmer.Sh DESCRIPTION
3522872b5fSGuy HelmerThe LKM (Loadable Kernel Modules) facility has been deprecated in FreeBSD
3622872b5fSGuy Helmer3.0 and above in favor of the
3722872b5fSGuy Helmer.Nm
386d249eeeSSheldon Hearninterface.
396d249eeeSSheldon HearnThis interface, like its
4022872b5fSGuy Helmerpredecessor, allows the system administrator to dynamically add and remove
4122872b5fSGuy Helmerfunctionality from a running system.  This ability also helps software
4222872b5fSGuy Helmerdevelopers to develop new parts of the kernel without constantly rebooting
4322872b5fSGuy Helmerto test their changes.
4422872b5fSGuy Helmer.Pp
4522872b5fSGuy HelmerVarious types of modules can be loaded into the system.
4622872b5fSGuy HelmerThere are several defined module types, listed below, which can
4722872b5fSGuy Helmerbe added to the system in a predefined way.  In addition, there
4822872b5fSGuy Helmeris a generic type, for which the module itself handles loading and
4922872b5fSGuy Helmerunloading.
5022872b5fSGuy Helmer.Pp
5122872b5fSGuy HelmerThe
5222872b5fSGuy Helmer.Tn FreeBSD
5322872b5fSGuy Helmersystem makes extensive use of loadable kernel modules, and provides loadable
5422872b5fSGuy Helmerversions of most filesystems, the
5522872b5fSGuy Helmer.Tn NFS
5622872b5fSGuy Helmerclient and server, all the screen-savers, and the
5722872b5fSGuy Helmer.Tn iBCS2
5822872b5fSGuy Helmerand
5922872b5fSGuy Helmer.Tn Linux
6022872b5fSGuy Helmeremulators.
6122872b5fSGuy Helmer.Nm
6222872b5fSGuy Helmermodules are placed by default in the
6322872b5fSGuy Helmer.Pa /modules
6422872b5fSGuy Helmerdirectory.
6522872b5fSGuy Helmer.Pp
6622872b5fSGuy HelmerThe
6722872b5fSGuy Helmer.Nm
6822872b5fSGuy Helmerinterface is used through the
6922872b5fSGuy Helmer.Xr kldload 8 ,
7022872b5fSGuy Helmer.Xr kldunload 8
7122872b5fSGuy Helmerand
7222872b5fSGuy Helmer.Xr kldstat 8
7322872b5fSGuy Helmerprograms.
7422872b5fSGuy Helmer.Pp
7522872b5fSGuy HelmerThe
7622872b5fSGuy Helmer.Xr kldload 8
7722872b5fSGuy Helmerprogram can load either
7822872b5fSGuy Helmer.Xr a.out 5
7922872b5fSGuy Helmeror ELF formatted loadable modules.
8022872b5fSGuy HelmerThe
8122872b5fSGuy Helmer.Xr kldunload 8
8222872b5fSGuy Helmerprogram unloads any given loaded module, if no other module is dependent
8322872b5fSGuy Helmerupon the given module.
8422872b5fSGuy HelmerThe
8522872b5fSGuy Helmer.Xr kldstat 8
8622872b5fSGuy Helmerprogram is used to check the status of the modules currently loaded into the
8722872b5fSGuy Helmersystem.
8822872b5fSGuy Helmer.Sh "MODULE TYPES"
8922872b5fSGuy Helmer.Bl -ohang
9022872b5fSGuy Helmer.It Em "Device Driver modules"
9122872b5fSGuy HelmerNew block and character device
9222872b5fSGuy Helmerdrivers may be loaded into the system with
9322872b5fSGuy Helmer.Nm KLD .
9422872b5fSGuy HelmerThe major problem with loading
9522872b5fSGuy Helmera device driver is that the driver's
9622872b5fSGuy Helmerdevice nodes must be exist for the
9722872b5fSGuy Helmerdevices to be accessed.  They are usually
9822872b5fSGuy Helmercreated by using
9922872b5fSGuy Helmer.Xr MAKEDEV 8
10022872b5fSGuy Helmeror
10122872b5fSGuy Helmer.Xr mknod 8
10222872b5fSGuy Helmer(if the device is not supported by the
10322872b5fSGuy Helmer.Xr MAKEDEV 8
10422872b5fSGuy Helmerscript) or, by writing a
10522872b5fSGuy Helmershell script to run
10622872b5fSGuy Helmer.Xr kldload 8
10722872b5fSGuy Helmerwhich should run the appropriate program to create the devices when the
10822872b5fSGuy Helmerdriver has been successfully loaded.
10922872b5fSGuy Helmer.El
11022872b5fSGuy Helmer.Sh FILES
11122872b5fSGuy Helmer.Bl -tag -width /usr/include/sys/module.h -compact
11222872b5fSGuy Helmer.It Pa /modules
11322872b5fSGuy Helmerdirectory containing module binaries shipped with the system
11422872b5fSGuy Helmer.It Pa /usr/include/sys/module.h
11522872b5fSGuy Helmerfile containing definitions required to compile a
11622872b5fSGuy Helmer.Nm
11722872b5fSGuy Helmermodule
11822872b5fSGuy Helmer.It Pa /usr/share/examples/kld
11922872b5fSGuy Helmerexample source code implementing a sample kld module
12022872b5fSGuy Helmer.Sh SEE ALSO
1214bef9e22SGuy Helmer.Xr kldfind 2 ,
1224bef9e22SGuy Helmer.Xr kldfirstmod 2 ,
1234bef9e22SGuy Helmer.Xr kldload 2 ,
1244bef9e22SGuy Helmer.Xr kldnext 2 ,
1254bef9e22SGuy Helmer.Xr kldstat 2 ,
1264bef9e22SGuy Helmer.Xr kldunload 2 ,
12722872b5fSGuy Helmer.Xr kldload 8 ,
12822872b5fSGuy Helmer.Xr kldstat 8 ,
12922872b5fSGuy Helmer.Xr kldunload 8
13022872b5fSGuy Helmer.Sh BUGS
13122872b5fSGuy HelmerIf a module B, is dependent on another module A, but is not compiled with
13222872b5fSGuy Helmermodule A as a dependency, then
13322872b5fSGuy Helmer.Xr kldload 8
13422872b5fSGuy Helmerfails to load module B, even if module A is already present in the system.
13522872b5fSGuy Helmer.Pp
13622872b5fSGuy HelmerIf multiple modules are dependent on module A, and are compiled with module
13722872b5fSGuy HelmerA as a dependency, then
13822872b5fSGuy Helmer.Xr kldload 8
13922872b5fSGuy Helmerloads an instance of module A when any of the modules are loaded.
14022872b5fSGuy Helmer.Pp
14122872b5fSGuy HelmerIf a custom entry point is used for a module, and the module is compiled as
14222872b5fSGuy Helmeran
14322872b5fSGuy Helmer.Sq ELF
14422872b5fSGuy Helmerbinary, then
14522872b5fSGuy Helmer.Xr kldload 8
14622872b5fSGuy Helmerfails to execute the entry point.
14722872b5fSGuy Helmer.Pp
14822872b5fSGuy Helmer.Xr kldload 8
14922872b5fSGuy Helmerreturns the cryptic message
15022872b5fSGuy Helmer.Sq ENOEXEC Po Exec format error Pc
15122872b5fSGuy Helmerfor any error encountered while loading a module.
15222872b5fSGuy Helmer.Pp
15322872b5fSGuy HelmerWhen system internal interfaces change, old modules often cannot
15422872b5fSGuy Helmerdetect this, and such modules when loaded will often cause crashes or
15522872b5fSGuy Helmermysterious failures.
15622872b5fSGuy Helmer.Sh AUTHORS
15722872b5fSGuy HelmerThe
15822872b5fSGuy Helmer.Nm
15922872b5fSGuy Helmerfacility was originally implemented by
16022872b5fSGuy Helmer.An Doug Rabson Aq dfr@FreeBSD.org .
16122872b5fSGuy Helmer.Sh HISTORY
16222872b5fSGuy HelmerThe
16322872b5fSGuy Helmer.Nm
164def37e7cSMike Pritchardfacility appeared in
165def37e7cSMike Pritchard.Fx 3.0
166def37e7cSMike Pritchardand was designed as a replacement for the
16722872b5fSGuy Helmer.Xr lkm 4
16822872b5fSGuy Helmerfacility, which was similar in functionality to the loadable kernel modules
16922872b5fSGuy Helmerfacility provided by
17022872b5fSGuy Helmer.Tn SunOS
17122872b5fSGuy Helmer4.1.3.
172