summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/module.9 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/module.9 3.html')
-rw-r--r--static/netbsd/man9/module.9 3.html539
1 files changed, 0 insertions, 539 deletions
diff --git a/static/netbsd/man9/module.9 3.html b/static/netbsd/man9/module.9 3.html
deleted file mode 100644
index f8cf2512..00000000
--- a/static/netbsd/man9/module.9 3.html
+++ /dev/null
@@ -1,539 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">MODULE(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">MODULE(9)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">module</code>,
- <code class="Nm">module_load</code>,
- <code class="Nm">module_autoload</code>,
- <code class="Nm">module_unload</code>,
- <code class="Nm">module_init_class</code>,
- <code class="Nm">module_hold</code>, <code class="Nm">module_rele</code>,
- <code class="Nm">module_find_section</code>,
- <code class="Nm">module_kernel</code>, <code class="Nm">module_name</code>,
- <code class="Nm">module_source</code>,
- <code class="Nm">module_register_callbacks</code>,
- <code class="Nm">module_unregister_callbacks</code>,
- <code class="Nm">module_specific_key_create</code>,
- <code class="Nm">module_specific_key_delete</code>,
- <code class="Nm">module_getspecific</code>,
- <code class="Nm">module_setspecific</code> &#x2014; <span class="Nd">kernel
- module loader</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="In">#include
- &lt;<a class="In">sys/module.h</a>&gt;</code></p>
-<p class="Pp"><code class="Fn">MODULE</code>(<var class="Fa" style="white-space: nowrap;">class</var>,
- <var class="Fa" style="white-space: nowrap;">name</var>,
- <var class="Fa" style="white-space: nowrap;">required</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">module_load</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">int
- flags</var>, <var class="Fa" style="white-space: nowrap;">prop_dictionary_t
- props</var>, <var class="Fa" style="white-space: nowrap;">modclass_t
- class</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">module_autoload</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>, <var class="Fa" style="white-space: nowrap;">modclass_t
- class</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">module_unload</code>(<var class="Fa" style="white-space: nowrap;">const
- char *name</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_init_class</code>(<var class="Fa" style="white-space: nowrap;">modclass_t
- class</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_hold</code>(<var class="Fa" style="white-space: nowrap;">module_t
- *module</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_rele</code>(<var class="Fa" style="white-space: nowrap;">module_t
- *module</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">module_find_section</code>(<var class="Fa" style="white-space: nowrap;">const
- char *</var>, <var class="Fa" style="white-space: nowrap;">void **</var>,
- <var class="Fa" style="white-space: nowrap;">size_t *</var>);</p>
-<p class="Pp"><var class="Ft">module_t *</var>
- <br/>
- <code class="Fn">module_kernel</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">const char *</var>
- <br/>
- <code class="Fn">module_name</code>(<var class="Fa" style="white-space: nowrap;">struct
- module *module</var>);</p>
-<p class="Pp"><var class="Ft">modsrc_t</var>
- <br/>
- <code class="Fn">module_source</code>(<var class="Fa" style="white-space: nowrap;">struct
- module *module</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_init</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_start_unload_thread</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_builtin_require_force</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_load_vfs_init</code>(<var class="Fa" style="white-space: nowrap;">void</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">module_register_callbacks</code>(<var class="Fa" style="white-space: nowrap;">void
- (*)(struct module *)</var>,
- <var class="Fa" style="white-space: nowrap;">void (*unload)(struct module
- *)</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_unregister_callbacks</code>(<var class="Fa" style="white-space: nowrap;">void
- *</var>);</p>
-<p class="Pp"><var class="Ft">specificdata_key_t</var>
- <br/>
- <code class="Fn">module_specific_key_create</code>(<var class="Fa" style="white-space: nowrap;">specificdata_key_t
- *keyp</var>,
- <var class="Fa" style="white-space: nowrap;">specificdata_dtor_t
- dtor</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">module_specific_key_delete</code>(<var class="Fa" style="white-space: nowrap;">specificdata_key_t
- key</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">module_getspecific</code>(<var class="Fa" style="white-space: nowrap;">module_t
- *mod</var>, <var class="Fa" style="white-space: nowrap;">specificdata_key_t
- key</var>);</p>
-<p class="Pp"><var class="Ft">void *</var>
- <br/>
- <code class="Fn">module_setspecific</code>(<var class="Fa" style="white-space: nowrap;">module_t
- *mod</var>, <var class="Fa" style="white-space: nowrap;">specificdata_key_t
- key</var>, <var class="Fa" style="white-space: nowrap;">void
- *data</var>);</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">Modules are sections of code that can be independently linked and
- selectively loaded into or unloaded from a running kernel. This provides a
- mechanism to update the module without having to relink the kernel and
- reboot. Modules can be loaded from within the kernel image, provided by the
- boot loader, or loaded from the file system.</p>
-<p class="Pp">The <code class="Nm">module</code> subsystem includes two data
- types:</p>
-<ol class="Bl-enum Bd-indent">
- <li>The <var class="Vt">module_t</var> type provides storage to describe a
- module.</li>
- <li>The <var class="Vt">modinfo_t</var> type resides within
- <var class="Vt">module_t</var> and contains module header info.</li>
-</ol>
-<p class="Pp">The module subsystem is protected by the global
- <var class="Va">kernconfig_mutex</var>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FUNCTIONS"><a class="permalink" href="#FUNCTIONS">FUNCTIONS</a></h1>
-<dl class="Bl-tag">
- <dt id="MODULE"><a class="permalink" href="#MODULE"><code class="Fn">MODULE</code></a>(<var class="Fa">class</var>,
- <var class="Fa">name</var>, <var class="Fa">required</var>)</dt>
- <dd>The <code class="Fn">MODULE</code>() macro creates and initializes a
- <var class="Vt">modinfo_t</var> structure. The <var class="Fa">class</var>
- argument identifies the class of module, and must be one of the following
- (note that <code class="Dv">MODULE_CLASS_ANY</code> should not be used
- here):
- <div class="Bd-indent">
- <dl class="Bl-tag">
- <dt id="MODULE_CLASS_VFS"><a class="permalink" href="#MODULE_CLASS_VFS"><code class="Dv">MODULE_CLASS_VFS</code></a></dt>
- <dd>The module provide a virtual file system - see
- <a class="Xr">vfs(9)</a></dd>
- <dt id="MODULE_CLASS_DRIVER"><a class="permalink" href="#MODULE_CLASS_DRIVER"><code class="Dv">MODULE_CLASS_DRIVER</code></a></dt>
- <dd>The module is a device driver - see <a class="Xr">driver(9)</a></dd>
- <dt id="MODULE_CLASS_EXEC"><a class="permalink" href="#MODULE_CLASS_EXEC"><code class="Dv">MODULE_CLASS_EXEC</code></a></dt>
- <dd>The module provides an alternate execution environment - see the
- various <code class="Dv">COMPAT_xxx</code> options in
- <a class="Xr">options(4)</a></dd>
- <dt id="MODULE_CLASS_SECMODEL"><a class="permalink" href="#MODULE_CLASS_SECMODEL"><code class="Dv">MODULE_CLASS_SECMODEL</code></a></dt>
- <dd>The module provides a security model - see
- <a class="Xr">secmodel(9)</a></dd>
- <dt id="MODULE_CLASS_BUFQ"><a class="permalink" href="#MODULE_CLASS_BUFQ"><code class="Dv">MODULE_CLASS_BUFQ</code></a></dt>
- <dd>The module provides a buffer queue strategy - see
- <a class="Xr">bufq(9)</a></dd>
- <dt id="MODULE_CLASS_MISC"><a class="permalink" href="#MODULE_CLASS_MISC"><code class="Dv">MODULE_CLASS_MISC</code></a></dt>
- <dd>The module provides miscellaneous kernel services</dd>
- </dl>
- </div>
- <p class="Pp">The <var class="Fa">name</var> argument provides the name of
- the module. Loaded modules, including those that are built-in to the
- kernel, must all have unique names.</p>
- <p class="Pp">The <var class="Fa">required</var> argument is a quoted string
- containing a comma-separated list of module names that are required by
- this module. The list must not contain any white-space. When a module is
- loaded, all of its required modules are auto-loaded and initialized
- before the module itself is loaded. Loading of required modules is a
- recursive operation.</p>
- <p class="Pp">If there are no required modules, this argument should be
- specified as <code class="Dv">NULL</code>.</p>
- <p class="Pp" id="MODULE~2">In addition to the explicit arguments, the
- <a class="permalink" href="#MODULE~2"><code class="Fn">MODULE</code></a>()
- macro creates a reference to the module's
- <code class="Fn">modcmd</code>() function. This function is defined
- as:</p>
- <div class="Bd-indent">
- <dl class="Bl-tag">
- <dt id="xxx_modcmd"><var class="Ft">int</var></dt>
- <dd><a class="permalink" href="#xxx_modcmd"><code class="Fn">xxx_modcmd</code></a>(<var class="Fa">modcmd_t
- cmd</var>, <var class="Fa">void *data</var>)</dd>
- </dl>
- </div>
- <p class="Pp">(where xxx is the name of the module, from the
- <code class="Dv">MODULE</code> macro).</p>
- <p class="Pp">The <var class="Fa">cmd</var> argument requests one of the
- following operations:</p>
- <div class="Bd-indent">
- <dl class="Bl-tag">
- <dt id="MODULE_CMD_INIT"><a class="permalink" href="#MODULE_CMD_INIT"><code class="Dv">MODULE_CMD_INIT</code></a></dt>
- <dd>Perform module-specific initialization when the module is loaded.</dd>
- <dt id="MODULE_CMD_FINI"><a class="permalink" href="#MODULE_CMD_FINI"><code class="Dv">MODULE_CMD_FINI</code></a></dt>
- <dd>Perform module-specific clean-up before the module is unloaded.</dd>
- <dt id="MODULE_CMD_AUTOUNLOAD"><a class="permalink" href="#MODULE_CMD_AUTOUNLOAD"><code class="Dv">MODULE_CMD_AUTOUNLOAD</code></a></dt>
- <dd>Notify the module that it is about to be unloaded.</dd>
- <dt id="MODULE_CMD_STAT"><a class="permalink" href="#MODULE_CMD_STAT"><code class="Dv">MODULE_CMD_STAT</code></a></dt>
- <dd>Request the module to provide status information (not currently
- implemented).</dd>
- </dl>
- </div>
- <p class="Pp" id="modcmd">All modules'
- <a class="permalink" href="#modcmd"><code class="Fn">modcmd</code></a>()
- functions must implement the <code class="Dv">MODULE_CMD_INIT</code> and
- <code class="Dv">MODULE_CMD_FINI</code> commands. The other commands are
- optional, and should return <code class="Er">ENOTTY</code> if not
- implemented.</p>
- <p class="Pp">For the <code class="Dv">MODULE_CMD_INIT</code> command, the
- <var class="Fa">data</var> argument is used to pass a pointer to the
- module's <a class="Xr">prop_dictionary(3)</a>. For the
- <code class="Dv">MODULE_CMD_STAT</code> command, the
- <var class="Fa">data</var> argument points to a buffer where the status
- information should be placed.</p>
- <p class="Pp">The __link_set mechanism is used to enable the
- <code class="Nm">module</code> subsystem to locate the
- <var class="Vt">modinfo_t</var> structure.</p>
- </dd>
- <dt id="module_load"><a class="permalink" href="#module_load"><code class="Fn">module_load</code></a>(<var class="Fa">name</var>,
- <var class="Fa">flags</var>, <var class="Fa">props</var>,
- <var class="Fa">class</var>)</dt>
- <dd>Load a module, link it into the running kernel, and call the module's
- <code class="Fn">modcmd</code>() routine with a <var class="Fa">cmd</var>
- argument of <code class="Dv">MODULE_CMD_INIT</code>. If the specified
- module requires other modules, they are loaded first; if any required
- module cannot be loaded or if any of their
- <code class="Fn">modcmd</code>() control routines returns a non-zero
- status, loading of this module and the specific required module will fail.
- The required modules are marked for automatic unloading. Thus, if the
- loading of the module failed, the required modules will be automatically
- unloaded after a short delay.
- <p class="Pp" id="module_unload">The loader will look first for a built-in
- module with the specified <var class="Fa">name</var> that has not been
- disabled (see
- <a class="permalink" href="#module_unload"><code class="Fn">module_unload</code></a>()
- below). If a built-in module with that <var class="Fa">name</var> is not
- found, the list of modules prepared by the boot loader is searched. If
- the named module is still not found, an attempt is made to locate the
- module within the file system, provided it has been mounted by the
- initialization code.</p>
- <p class="Pp">The <var class="Fa">flags</var> argument can include:</p>
- <div class="Bd-indent">
- <dl class="Bl-tag">
- <dt id="MODCTL_NO_PROP"><a class="permalink" href="#MODCTL_NO_PROP"><code class="Dv">MODCTL_NO_PROP</code></a></dt>
- <dd>When loading a module from the file system, do not attempt to locate a
- corresponding prop_dictionary file.</dd>
- <dt id="MODCTL_LOAD_FORCE"><a class="permalink" href="#MODCTL_LOAD_FORCE"><code class="Dv">MODCTL_LOAD_FORCE</code></a></dt>
- <dd>Force loading of disabled built-in modules and modules built for a
- different version of the operating system.</dd>
- </dl>
- </div>
- <p class="Pp" id="modcmd~2">The <var class="Fa">props</var> argument points
- to an externalized property list which is passed to the module's
- <a class="permalink" href="#modcmd~2"><code class="Fn">modcmd</code></a>()
- routine. If a module is being loaded from the file system, and the
- <code class="Dv">MODCTL_NO_PROP</code> flag is not set, the system
- searches for a file with the same name as the module file, but with the
- suffix &#x201C;<span class="Pa">.plist</span>&#x201D;. If this file is
- found, the prop_dictionary it contains is loaded and merged with the
- prop_dictionary from the <var class="Fa">props</var> argument.</p>
- <p class="Pp">The <var class="Fa">class</var> argument can be any of:</p>
- <p class="Pp"></p>
- <div class="Bd-indent">
- <dl class="Bl-tag Bl-compact">
- <dt id="MODULE_CLASS_ANY"><a class="permalink" href="#MODULE_CLASS_ANY"><code class="Dv">MODULE_CLASS_ANY</code></a></dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt id="MODULE_CLASS_DRIVER~2"><a class="permalink" href="#MODULE_CLASS_DRIVER~2"><code class="Dv">MODULE_CLASS_DRIVER</code></a></dt>
- <dd>Device driver</dd>
- <dt id="MODULE_CLASS_EXEC~2"><a class="permalink" href="#MODULE_CLASS_EXEC~2"><code class="Dv">MODULE_CLASS_EXEC</code></a></dt>
- <dd>Executable image handler</dd>
- <dt id="MODULE_CLASS_MISC~2"><a class="permalink" href="#MODULE_CLASS_MISC~2"><code class="Dv">MODULE_CLASS_MISC</code></a></dt>
- <dd>Miscellaneous module</dd>
- <dt id="MODULE_CLASS_SECMODEL~2"><a class="permalink" href="#MODULE_CLASS_SECMODEL~2"><code class="Dv">MODULE_CLASS_SECMODEL</code></a></dt>
- <dd>Security model (see <a class="Xr">secmodel(9)</a> for more
- details)</dd>
- <dt id="MODULE_CLASS_VFS~2"><a class="permalink" href="#MODULE_CLASS_VFS~2"><code class="Dv">MODULE_CLASS_VFS</code></a></dt>
- <dd>Virtual file system</dd>
- </dl>
- </div>
- <p class="Pp" id="secmodel_register">If the class is not
- <code class="Dv">MODULE_CLASS_ANY</code>, the class of the module being
- loaded must match the requested <var class="Fa">class</var>. Except when
- verifying a module's class when it is being loaded, module classes other
- than <code class="Dv">MODULE_CLASS_SECMODEL</code> are transparent to
- the module subsystem. They are provided only for the benefit of the
- subsystem's clients. Modules with class
- <code class="Dv">MODULE_CLASS_SECMODEL</code> are automatically
- registered with
- <a class="permalink" href="#secmodel_register"><code class="Fn">secmodel_register</code></a>()
- after being successfully loaded, and automatically deregistered with
- <a class="permalink" href="#secmodel_deregister"><code class="Fn" id="secmodel_deregister">secmodel_deregister</code></a>()
- when being unloaded.</p>
- <p class="Pp" id="module_load~2">The
- <a class="permalink" href="#module_load~2"><code class="Fn">module_load</code></a>()
- routine is primarily intended as the implementation of the
- <code class="Dv">MODCTL_LOAD</code> option of the
- <a class="Xr">modctl(2)</a> system call.</p>
- </dd>
- <dt><code class="Fn">module_autoload</code>(<var class="Fa">name</var>,
- <var class="Fa">class</var>)</dt>
- <dd>Auto-load a module, making it available for automatic unloading. The
- <var class="Fa">name</var> and <var class="Fa">class</var> arguments are
- the same as for the <code class="Fn">module_load</code>() routine.
- <p class="Pp" id="module_autoload">The module subsystem uses a kernel thread
- to attempt to automatically unload modules a short time (currently, 10
- seconds) after being loaded by
- <a class="permalink" href="#module_autoload"><code class="Fn">module_autoload</code></a>().
- Before the module is unloaded by this thread, its
- <code class="Fn">modcmd</code>() is called with the
- <var class="Fa">cmd</var> argument specified as
- <code class="Dv">MODULE_CMD_AUTOUNLOAD</code>. A module can prevent
- itself from being unloaded by returning a non-zero value. Exception: If
- <code class="Li">kern.module.autounload_unsafe</code> is set, a module
- that returns <code class="Er">ENOTTY</code>, meaning it does not
- understand the command, may still be autounloaded.</p>
- <p class="Pp" id="module_autoload~2">The
- <a class="permalink" href="#module_autoload~2"><code class="Fn">module_autoload</code></a>()
- function is intended for use by kernel components to locate and load
- optional system components. The function is also used to load modules
- that are required by other modules.</p>
- <p class="Pp" id="modcmd~3">The directory from which the module is loaded
- will be searched for a file with the same name as the module file, but
- with the suffix &#x201C;<span class="Pa">.plist</span>&#x201D;. If this
- file is found, the prop_dictionary it contains will be loaded and passed
- to the module's
- <a class="permalink" href="#modcmd~3"><code class="Fn">modcmd</code></a>()
- routine. If this prop_dictionary contains a
- &#x201C;<span class="Pa">noautoload</span>&#x201D; property which is set
- to &#x201C;<span class="Pa">true</span>&#x201D; then the system will
- refuse to load the module.</p>
- </dd>
- <dt><code class="Fn">module_unload</code>(<var class="Fa">name</var>)</dt>
- <dd>Unload a module. If the module's reference count is non-zero, the function
- returns <code class="Er">EBUSY</code>. Otherwise, the module's
- <code class="Fn">modcmd</code>() routine is called with a
- <var class="Fa">cmd</var> argument of
- <code class="Dv">MODULE_CMD_FINI</code>. If the
- <code class="Fn">modcmd</code>() routine returns with an error, then the
- error is returned to the caller otherwise the module is unloaded.
- <p class="Pp" id="module_unload~2">The reference counts of all modules that
- were required by this module are decremented, but the required modules
- are not unloaded by the call to
- <a class="permalink" href="#module_unload~2"><code class="Fn">module_unload</code></a>().
- Instead, the required modules may be unloaded by subsequent calls to
- <code class="Fn">module_unload</code>().</p>
- <p class="Pp" id="module_load~3">Unloading a built-in module causes the
- module to be marked as disabled. This prevents the module from being
- re-loaded, except by the
- <a class="permalink" href="#module_load~3"><code class="Fn">module_load</code></a>()
- function with the <var class="Fa">flags</var> argument set to
- <code class="Dv">MODULE_FORCE_LOAD</code>.</p>
- <p class="Pp" id="module_unload~3">The
- <a class="permalink" href="#module_unload~3"><code class="Fn">module_unload</code></a>()
- function may be called by the <a class="Xr">modctl(2)</a> system call,
- by the module subsystem's internal auto-unload thread, or by other
- kernel facilities. Generally, other kernel facilities should not be
- calling this function.</p>
- </dd>
- <dt id="module_init_class"><a class="permalink" href="#module_init_class"><code class="Fn">module_init_class</code></a>(<var class="Fa">class</var>)</dt>
- <dd>Load and initialize all available modules of the specified
- <var class="Fa">class</var>. Any built-in modules that have not been
- disabled, and any modules provided by the boot loader are loaded.</dd>
- <dt id="module_hold"><a class="permalink" href="#module_hold"><code class="Fn">module_hold</code></a>(<var class="Fa">module</var>)</dt>
- <dd>Increment the reference count of a module. A module cannot be unloaded if
- its reference count is non-zero.</dd>
- <dt id="module_rele"><a class="permalink" href="#module_rele"><code class="Fn">module_rele</code></a>(<var class="Fa">module</var>)</dt>
- <dd>Decrement the reference count of a module.</dd>
- <dt id="module_find_section"><a class="permalink" href="#module_find_section"><code class="Fn">module_find_section</code></a>(<var class="Fa">name</var>,
- <var class="Fa">addr</var>, <var class="Fa">size</var>)</dt>
- <dd>Find the start address and size of linker section
- <var class="Ar">name</var> within a module. The miniroot module uses this
- routine to find the address and size of the embedded file system image.
- This routine can only examine the linker data for the module that is
- currently being initialized; it cannot examine data for any other
- module.</dd>
- <dt id="module_kernel"><a class="permalink" href="#module_kernel"><code class="Fn">module_kernel</code></a>(<var class="Fa">void</var>)</dt>
- <dd>Returns a pointer to a <var class="Ft">module_t</var> structure describing
- the kernel module.</dd>
- <dt id="module_name"><a class="permalink" href="#module_name"><code class="Fn">module_name</code></a>(<var class="Fa">module</var>)</dt>
- <dd>Returns a pointer to the module's name.</dd>
- <dt id="module_source"><a class="permalink" href="#module_source"><code class="Fn">module_source</code></a>(<var class="Fa">module</var>)</dt>
- <dd>Returns the source of the module, one of
- <code class="Dv">MODULE_SOURCE_KERNEL</code>,
- <code class="Dv">MODULE_SOURCE_BOOT</code>, or
- <code class="Dv">MODULE_SOURCE_FILESYS</code>.</dd>
- <dt id="module_init"><a class="permalink" href="#module_init"><code class="Fn">module_init</code></a>(<var class="Fa">void</var>)</dt>
- <dd>Initialize the module subsystem. Creates and initializes various data
- structures, locates all built-in modules, and establishes the sub-system's
- <a class="Xr">sysctl(8)</a> tree. <code class="Fn">module_init</code>() is
- called early in system initialization to facilitate use of security model
- modules.</dd>
- <dt id="module_start_unload_thread"><a class="permalink" href="#module_start_unload_thread"><code class="Fn">module_start_unload_thread</code></a>(<var class="Fa">void</var>)</dt>
- <dd>Create the thread that attempts to automatically unload modules that were
- loaded via the <code class="Fn">module_autoload</code>() routine. The
- function is called only once, after the scheduler and timer functions are
- initialized.</dd>
- <dt id="module_builtin_require_force"><a class="permalink" href="#module_builtin_require_force"><code class="Fn">module_builtin_require_force</code></a>(<var class="Fa">void</var>)</dt>
- <dd>Mark as &quot;disabled&quot; any built-in modules that have not been
- successfully initialized. Modules marked &quot;disabled&quot; can only be
- loaded if the <code class="Dv">MODCTL_LOAD_FORCE</code> is specified.
- <code class="Fn">module_builtin_require_force</code>() is called near the
- end of system initialization, after the <a class="Xr">init(8)</a> process
- is created.</dd>
- <dt id="module_load_vfs_init"><a class="permalink" href="#module_load_vfs_init"><code class="Fn">module_load_vfs_init</code></a>(<var class="Fa">void</var>)</dt>
- <dd>The module subsystem is initialized early, long before any file systems
- are available. After the root file system is mounted,
- <code class="Fn">module_load_vfs_init</code>(<var class="Fa">void</var>)
- is used to enable loading modules from the file system. Until this routine
- is called, modules can only be loaded if they were built-in to the kernel
- image or provided by the boot loader.</dd>
- <dt id="module_register_callbacks"><a class="permalink" href="#module_register_callbacks"><code class="Fn">module_register_callbacks</code></a>(<var class="Fa">void
- (*load)(struct module *)</var>, <var class="Fa">void (*unload)(struct module
- *)</var>)</dt>
- <dd>Register a new set of callbacks. The <var class="Fa">load</var> callback
- is invoked after any module (including this module) is successfully
- loaded; the <var class="Fa">unload</var> callback is invoked before any
- module is unloaded. Each load or unload event can result in multiple
- invocations of the callback routines. An opaque cookie is returned which
- can be passed to
- <a class="permalink" href="#module_unregister_callbacks"><code class="Fn" id="module_unregister_callbacks">module_unregister_callbacks</code></a>().</dd>
- <dt><code class="Fn">module_unregister_callbacks</code>(<var class="Fa">void
- *opaque</var>)</dt>
- <dd>Unregister a set of callback routines previously registered with
- <code class="Fn">module_register_callbacks</code>(). The
- <var class="Fa">opaque</var> argument should be the return value from the
- previous <code class="Fn">module_register_callbacks</code>() call.</dd>
- <dt id="module_specific_key_create"><a class="permalink" href="#module_specific_key_create"><code class="Fn">module_specific_key_create</code></a>(<var class="Fa">specificdata_key_t
- *keyp</var>, <var class="Fa">specificdata_dtor_t dtor</var>)</dt>
- <dd>Creates a new specificdata_key for use within the
- <code class="Nm">module</code> domain. The key identifier is returned in
- <var class="Fa">keyp</var>.</dd>
- <dt id="module_specific_key_delete"><a class="permalink" href="#module_specific_key_delete"><code class="Fn">module_specific_key_delete</code></a>(<var class="Fa">specificdata_key_t
- key</var>)</dt>
- <dd>Deletes the specified specificdata_key <var class="Fa">key</var> from the
- <code class="Nm">module</code> domain.</dd>
- <dt id="module_getspecific"><a class="permalink" href="#module_getspecific"><code class="Fn">module_getspecific</code></a>(<var class="Fa">module_t
- *mod</var>, <var class="Fa">specificdata_key_t key</var>)</dt>
- <dd>Retrieves the value associated with <var class="Fa">key</var> from module
- <var class="Fa">mod</var>.</dd>
- <dt id="module_setspecific"><a class="permalink" href="#module_setspecific"><code class="Fn">module_setspecific</code></a>(<var class="Fa">module_t
- *mod</var>, <var class="Fa">specificdata_key_t key</var>,
- <var class="Fa">void *data</var>)</dt>
- <dd>Stores <var class="Fa">data</var> as the value associated with
- <var class="Fa">key</var> for module <var class="Fa">mod</var>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PROGRAMMING_CONSIDERATIONS"><a class="permalink" href="#PROGRAMMING_CONSIDERATIONS">PROGRAMMING
- CONSIDERATIONS</a></h1>
-<p class="Pp">The module subsystem is designed to be called recursively, but
- only within a single LWP. This permits one module's
- <code class="Fn">modcmd</code>() routine to load or unload other
- modules.</p>
-<p class="Pp">Additional considerations:</p>
-<ul class="Bl-bullet Bd-indent">
- <li id="modcmd~4">A module is not permitted to load or unload itself. Attempts
- to load or unload a module from within its own
- <a class="permalink" href="#modcmd~4"><code class="Fn">modcmd</code></a>()
- routine will fail with <code class="Er">EEXIST</code> or
- <code class="Er">EBUSY</code>, respectively.</li>
- <li>Although a module can be loaded by using either
- <code class="Fn">module_load</code>() or
- <code class="Fn">module_autoload</code>(), it is not possible for the
- module's <code class="Fn">modcmd</code>() routine to distinguish between
- the two methods. Any module which needs to ensure that it does not get
- auto-unloaded must either handle the
- <code class="Dv">MODULE_CMD_AUTOUNLOAD</code> command in its
- <code class="Fn">modcmd</code>() routine, or use
- <code class="Fn">module_hold</code>() to increment its reference count.
- Note however that modules loaded manually with
- <a class="Xr">modload(8)</a> are never auto-unloaded.</li>
-</ul>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">A set of example modules is available in the
- <span class="Pa">src/sys/modules/examples</span> directory hierarchy.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="CODE_REFERENCES"><a class="permalink" href="#CODE_REFERENCES">CODE
- REFERENCES</a></h1>
-<p class="Pp">The core of the kernel module implementation is in
- <span class="Pa">sys/kern/kern_module.c</span> and
- <span class="Pa">sys/kern/kern_module_vfs.c</span>.</p>
-<p class="Pp">The routines for linking the module are in
- <span class="Pa">sys/kern/subr_kobj.c</span>.</p>
-<p class="Pp">The routines for reading a module from the file system are in
- <span class="Pa">sys/kern/subr_kobj_vfs.c</span>.</p>
-<p class="Pp">The header file
- <code class="In">&lt;<a class="In">sys/sys/module.h</a>&gt;</code> describes
- the public interface.</p>
-<p class="Pp" id="kobj_machdep">In addition, each architecture is expected to
- provide
- <a class="permalink" href="#kobj_machdep"><code class="Fn">kobj_machdep</code></a>(),
- <a class="permalink" href="#kobj_reloc"><code class="Fn" id="kobj_reloc">kobj_reloc</code></a>(),
- and
- <a class="permalink" href="#module_init_md"><code class="Fn" id="module_init_md">module_init_md</code></a>().
- <code class="Fn">kobj_machdep</code>() is for any machine dependent actions,
- such as flushing caches, that are needed when a module is loaded or
- unloaded. <code class="Fn">kobj_reloc</code>() deals with resolution of
- relocatable symbols. <code class="Fn">module_init_md</code>() is for finding
- modules passed in by the boot loader.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">modctl(2)</a>, <a class="Xr">module(7)</a>,
- <a class="Xr">specificdata(9)</a>, <a class="Xr">intro(9lua)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The kernel module subsystem first appeared in
- <span class="Ux">NetBSD 5.0</span>. It replaces the &#x201C;LKM&#x201D;
- subsystem from earlier releases.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">module</code> system was written by
- <span class="An">Andrew Doran</span>
- &lt;<a class="Mt" href="mailto:ad@NetBSD.org">ad@NetBSD.org</a>&gt;. This
- manual page was written by <span class="An">Paul Goyette</span>
- &lt;<a class="Mt" href="mailto:pgoyette@NetBSD.org">pgoyette@NetBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 21, 2021</td>
- <td class="foot-os">NetBSD 10.1</td>
- </tr>
-</table>