Provided by: freebsd-manpages_12.2-1_all bug

NAME

     DECLARE_MODULE — kernel module declaration macro

SYNOPSIS

     #include <sys/param.h>
     #include <sys/kernel.h>
     #include <sys/module.h>

     DECLARE_MODULE(name, moduledata_t data, sub, order);

     DECLARE_MODULE_TIED(name, moduledata_t data, sub, order);

DESCRIPTION

     The DECLARE_MODULE() macro declares a generic kernel module.  It is used to register the
     module with the system, using the SYSINIT() macro.  DECLARE_MODULE() is usually used within
     other macros, such as DRIVER_MODULE(9), DEV_MODULE(9) and SYSCALL_MODULE(9).  Of course, it
     can also be called directly, for example in order to implement dynamic sysctls.

     A module declared with DECLARE_MODULE_TIED() will load only if the running kernel version
     (as specified by __FreeBSD_version) is identical to that on which it was built.  This
     declaration should be used by modules which depend on interfaces beyond the stable kernel
     KBI (such as ABI emulators or hypervisors that rely on internal kernel structures).
     DECLARE_MODULE() will behave like DECLARE_MODULE_TIED() when compiled with modules built
     with the kernel. This allows locks and other synchronization primitives to be inlined
     safely.

     The arguments are:

     name    The module name, which will be used in the SYSINIT() call to identify the module.

     data    A moduledata_t structure, which contains two main items, the official name of the
             module name, which will be used in the module_t structure and a pointer to the event
             handler function of type modeventhand_t.

     sub     An argument directed to the SYSINIT() macro.  Valid values for this are contained in
             the sysinit_sub_id enumeration (see <sys/kernel.h>) and specify the type of system
             startup interfaces.  The DRIVER_MODULE(9) macro uses a value of SI_SUB_DRIVERS here
             for example, since these modules contain a driver for a device.  For kernel modules
             that are loaded at runtime, a value of SI_SUB_EXEC is common.

     order   An argument for SYSINIT().  It represents the KLDs order of initialization within
             the subsystem.  Valid values are defined in the sysinit_elem_order enumeration
             (<sys/kernel.h>).

SEE ALSO

     DEV_MODULE(9), DRIVER_MODULE(9), module(9), SYSCALL_MODULE(9)

     /usr/include/sys/kernel.h, /usr/share/examples/kld

AUTHORS

     This manual page was written by Alexander Langer <alex@FreeBSD.org>, inspired by the KLD
     Facility Programming Tutorial by Andrew Reiter <arr@watson.org>.