168 lines
6.0 KiB
Groff
168 lines
6.0 KiB
Groff
.\" $NetBSD: lkm.4,v 1.17 2001/09/22 01:22:49 wiz Exp $
|
|
.\"
|
|
.\" Copyright (c) 1993 Christopher G. Demetriou
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed for the
|
|
.\" NetBSD Project. See http://www.netbsd.org/ for
|
|
.\" information about NetBSD.
|
|
.\" 4. The name of the author may not be used to endorse or promote products
|
|
.\" derived from this software without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.\" <<Id: LICENSE,v 1.2 2000/06/14 15:57:33 cgd Exp>>
|
|
.\"
|
|
.Dd September 4, 1993
|
|
.Dt LKM 4
|
|
.Os
|
|
.Sh NAME
|
|
.Nm lkm
|
|
.Nd Loadable Kernel Modules interface
|
|
.Sh SYNOPSIS
|
|
.Cd "options LKM"
|
|
.Sh DESCRIPTION
|
|
Loadable kernel modules allow the system administrator to
|
|
dynamically add and remove functionality from a running system.
|
|
This ability also helps software developers to develop
|
|
new parts of the kernel without constantly rebooting to
|
|
test their changes.
|
|
.Pp
|
|
Various types of modules can be loaded into the system.
|
|
There are several defined module types, listed below, which can
|
|
be added to the system in a predefined way. In addition, there
|
|
is a generic type, for which the module itself handles loading and
|
|
unloading.
|
|
.Pp
|
|
The
|
|
.Nm
|
|
interface is used by performing
|
|
.Xr ioctl 2
|
|
calls on the
|
|
.Pa /dev/lkm
|
|
device. Normally all operations involving
|
|
Loadable Kernel Modules are handled by the
|
|
.Xr modload 8 ,
|
|
.Xr modunload 8 ,
|
|
and
|
|
.Xr modstat 8
|
|
programs. Users should never have to interact with
|
|
.Pa /dev/lkm
|
|
directly.
|
|
.Sh MODULE TYPES
|
|
.Ss System Call modules
|
|
System calls may be replaced by loading
|
|
new ones via the
|
|
.Nm
|
|
interface. All system calls may be
|
|
replaced, but special care should
|
|
be taken with the
|
|
.Xr ioctl 2
|
|
system call, as it is used to load and
|
|
unload modules.
|
|
.Pp
|
|
When a system call module is unloaded,
|
|
the system call which
|
|
was replaced by the loadable module
|
|
is returned to its rightful place
|
|
in the system call table by LKM code.
|
|
.Ss Virtual File System modules
|
|
Virtual file systems may be added via the
|
|
.Nm
|
|
interface.
|
|
.Ss Device Driver modules
|
|
New block and character device
|
|
drivers may be loaded into the system with
|
|
.Li "options LKM" .
|
|
A problem with loading a device driver is that the driver's device
|
|
nodes must be exist for the devices to be accessed. They are
|
|
usually created by instructing
|
|
.Xr modload 8
|
|
to run an appropriate program when the driver has been successfully loaded.
|
|
.Ss Emulation modules
|
|
Emulation modules allow to load an emulation support for foreign
|
|
operating systems.
|
|
.Ss Execution Interpreters
|
|
Execution interpreters allow to load support for execution of new type
|
|
of binaries, not normally supported by kernel. This also allows to load
|
|
support for executing foreign system binaries.
|
|
Execution Interpreters normally depend on
|
|
Emulation modules, in that appropriate Emulation module has to
|
|
be loaded before Execution Interpreter can be.
|
|
.Ss Miscellaneous modules
|
|
Miscellaneous modules are modules for which there are not currently
|
|
well-defined or well-used interfaces for extension.
|
|
They are provided for extension, and the user is expected to
|
|
write their own loader to handle the kernel pointer/table
|
|
manipulation to "wire in" their loaded module (and "unwire"
|
|
it on uload).
|
|
An example of a "miscellaneous module" might be a loader for
|
|
card-specific VGA drivers or alternate terminal emulations in
|
|
an appropriately layered console driver.
|
|
.Sh NOTES
|
|
.Ss Security considerations
|
|
Loaded kernel module can do anything with kernel structures. There is
|
|
no memory protection between module and rest of kernel. Hence, potential
|
|
attacker controlling
|
|
.Pa /dev/lkm
|
|
can do anything they want with the system.
|
|
.Pp
|
|
To avoid associated security risk, new LKMs cannot be loaded on
|
|
.Pa securelevel
|
|
higher than zero.
|
|
.Ss Module might crash system
|
|
Loading and using a buggy module is likely to crash operating system -
|
|
since the module becomes part of kernel, a code error is much more
|
|
fatal than for userland programs. If you are doing kernel development,
|
|
this would hopefully end up happening
|
|
less frequently than changing, recompiling, installing, and
|
|
rebooting would normally occur. This should speed development
|
|
considerably for a lot of the in-kernel work that is currently
|
|
taking place.
|
|
.Sh FILES
|
|
.Bl -tag -width /usr/include/sys/lkm.h -compact
|
|
.It Pa /dev/lkm
|
|
.Nm
|
|
interface device
|
|
.It Pa /usr/include/sys/lkm.h
|
|
file containing definitions of module types
|
|
.It Pa lkm/*
|
|
subdirectory
|
|
.Pa lkm
|
|
within kernel source tree contains many LKMs which are suitable as a base
|
|
for new ones
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr modload 8 ,
|
|
.Xr modstat 8 ,
|
|
.Xr modunload 8
|
|
.Sh HISTORY
|
|
The
|
|
.Nm
|
|
facility was designed to be similar in functionality
|
|
to the loadable kernel modules facility provided by
|
|
.Tn "SunOS 4.1.3" .
|
|
.Sh AUTHORS
|
|
.Bl -tag
|
|
Terrence R. Lambert, terry@cs.weber.edu
|
|
.El
|