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

FreeBSD Manual Pages

  
 
  

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

NAME
       module -- structure describing a	kernel module

DESCRIPTION
       Each  module  in	 the kernel is described by a module_t structure.  The
       structure contains the name of  the  device,  a	unique	ID  number,  a
       pointer to an event handler function and	to an argument,	which is given
       to  the	event  handler,	 as well as some kernel	internal data.	If the
       event handler function is NULL, the  module  will  use  a  no-operation
       function	handler	instead.

       The DECLARE_MODULE(9) macro registers the module	with the system.

       When  the  module  is loaded, the event handler function	is called with
       the what	argument set to	MOD_LOAD.

       On unload it is first called with what set to MOD_QUIESCE.  If the  un-
       load  was  not  forced,	a non-zero return will prevent the unload from
       happening.

       If the unload continues what is set to MOD_UNLOAD.  If the  module  re-
       turns non-zero to this, the unload will not happen.

       The  difference	between	 MOD_QUIESCE and MOD_UNLOAD is that the	module
       should fail MOD_QUIESCE if it is	currently in use,  whereas  MOD_UNLOAD
       should only fail	if it is impossible to unload the module, for instance
       because	there  are memory references to	the module which cannot	be re-
       voked.

       When  the  system  is  shutting	down,  what  contains  the  value   of
       MOD_SHUTDOWN.

       The  module  should  return EOPNOTSUPP for unsupported and unrecognized
       values of what.

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

       static int foo_handler(module_t mod, int	/*modeventtype_t*/ what,
			      void *arg);

       static moduledata_t mod_data= {
	       "foo",
	       foo_handler,
	       NULL
       };

       MODULE_VERSION(foo, 1);
       MODULE_DEPEND(foo, bar, 1, 3, 4);

       DECLARE_MODULE(foo, mod_data, SI_SUB_EXEC, SI_ORDER_ANY);

SEE ALSO
       DECLARE_MODULE(9), DEV_MODULE(9),  DRIVER_MODULE(9),  MODULE_DEPEND(9),
       MODULE_PNP_INFO(9), MODULE_VERSION(9), SYSCALL_MODULE(9)

       /usr/share/examples/kld

AUTHORS
       This manual page	was written by Alexander Langer	<alex@FreeBSD.org>.

FreeBSD	14.3		       November	11, 2021		     MODULE(9)

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

home | help