MOD_INSTALL(9F) | Kernel Functions for Drivers | MOD_INSTALL(9F) |
mod_install, mod_remove, mod_info, mod_modname - add, remove or query a loadable module
#include <sys/modctl.h> int mod_install(struct modlinkage *modlinkage);
int mod_remove(struct modlinkage *modlinkage);
int mod_info(struct modlinkage *modlinkage,
struct modinfo *modinfo);
const char *mod_modname(struct modlinkage *modlinkage);
illumos DDI specific (illumos DDI).
modlinkage
modinfo
mod_install() must be called from a module's _init(9E) routine.
mod_remove() must be called from a module's _fini(9E) routine.
mod_info() must be called from a module's _info(9E) routine.
mod_modname() can be called from any module routine.
When _init(9E) is executing, its call to mod_install() enables other threads to call attach(9E) even prior to mod_install() returning and _init(9E) completion. From a programming standpoint this means that all _init(9E) initialization must occur prior to _init(9E) calling mod_install(). If mod_install() fails (non-zero return value), any initialization must be undone.
When _fini(9E) is executing, another thread may call attach(9E) prior to _fini(9E) calling mod_remove(). If this occurs, the mod_remove() fails (non-zero return). From a programming standpoint, this means that _init(9E) initializations should only be undone after a successful return from mod_remove().
To query the name of a module, use mod_modname(). If the module is a driver, the module name is the same as the driver name. This function can be used to avoid compiled-in knowledge of the module name, and is of particular use when _init(9E) needs to call a function like kstat_create(9F).
mod_install() and mod_remove() return 0 upon success and non-zero on failure.
mod_info() returns a non-zero value on success and 0 upon failure.
mod_modname() returns the name of the module. The returned name remains valid as long as the module remains loaded.
See _init(9E) for an example that uses these functions.
_fini(9E), _info(9E), _init(9E), kstat_create(9F), modldrv(9S), modlinkage(9S), modlstrmod(9S)
Writing Device Drivers
July 8, 2008 | OmniOS |