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

FreeBSD Manual Pages


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

     DECLARE_MODULE -- kernel module declaration macro

     #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);

     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

     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 emu-
     lators 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 synchro-
     nization 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 ini-
	     tialization within	the subsystem.	Valid values are defined in
	     the sysinit_elem_order enumeration	(<sys/kernel.h>).


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

     This manual page was written by Alexander Langer <>,
     inspired by the KLD Facility Programming Tutorial by Andrew Reiter

FreeBSD	Ports 11.2	       February	13, 2018	    FreeBSD Ports 11.2


Want to link to this manual page? Use this URL:

home | help