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>.

Debian                                          February 13, 2018                              DECLARE_MODULE(9)