Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DECLARE_MODULE(9)	   Kernel Developer's Manual	     DECLARE_MODULE(9)

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 run-
       ning 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  syn-
       chronization 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	inter-
	       faces.	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>.

FreeBSD	15.0		       February	13, 2018	     DECLARE_MODULE(9)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=DECLARE_MODULE&sektion=9&manpath=FreeBSD+15.0-RELEASE+and+Ports>

home | help