NAME¶
module —
structure describing a kernel
module
DESCRIPTION¶
Each module in the kernel is described by a
module_t
structure. The structure contains the name of the device, a unique ID number,
a pointer to an event handler function and to an argument, which is given to
the event handler, as well as some kernel internal data.
The
DECLARE_MODULE(9) macro registers the module with the
system.
When the module is loaded, the event handler function is called with the
what argument set to
MOD_LOAD
.
On unload it is first called with
what set to
MOD_QUIESCE
. If the unload was not forced, a non-zero
return will prevent the unload from happening.
If the unload continues
what is set to
MOD_UNLOAD
. If the module returns non-zero to this,
the unload will not happen.
The difference between
MOD_QUIESCE
and
MOD_UNLOAD
is that the module should fail
MOD_QUIESCE
if it is currently in use, whereas
MOD_UNLOAD
should only fail if it is impossible to
unload the module, for instance because there are memory references to the
module which cannot be revoked.
When the system is shutting down,
what contains the value
of
MOD_SHUTDOWN
.
The module should return
EOPNOTSUPP
for unsupported and
unrecognized values of
what.
EXAMPLES¶
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/module.h>
static int foo_handler(module_t mod, int /*modeventtype_t*/ what,
void *arg);
static moduledata_t mod_data= {
"foo",
foo_handler,
0
};
MODULE_VERSION(foo, 1);
MODULE_DEPEND(foo, bar, 1, 3, 4);
DECLARE_MODULE(foo, mod_data, SI_SUB_EXEC, SI_ORDER_ANY);
SEE ALSO¶
DECLARE_MODULE(9),
DEV_MODULE(9),
DRIVER_MODULE(9),
MODULE_DEPEND(9),
MODULE_VERSION(9),
SYSCALL_MODULE(9)
/usr/share/examples/kld
AUTHORS¶
This manual page was written by
Alexander Langer
⟨alex@FreeBSD.org⟩.