Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/share/examples/modules/skel.c
39481 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2023 George V. Neville-Neil
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
8
* are met:
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25
* SUCH DAMAGE.
26
*
27
*/
28
29
/*
30
* SKEL Loadable Kernel Module for the FreeBSD Operating System
31
*
32
* The SKEL module is meant to act as a skeleton for creating new
33
* kernel modules.
34
*
35
* This module can be loaded and unloaded from * FreeBSD and is for
36
* use in teaching as well.
37
*
38
*/
39
40
#include <sys/param.h>
41
#include <sys/kernel.h>
42
#include <sys/systm.h>
43
#include <sys/module.h>
44
45
/*
46
* Every module can have a module specific piece of code that is
47
* executed whenever the module is loaded or unloaded. The following
48
* is a trivial example that prints a message on the console whenever
49
* the module is loaded or unloaded.
50
*/
51
52
static int
53
skel_mod_event(module_t mod, int type, void *data)
54
{
55
56
switch (type) {
57
case MOD_LOAD:
58
printf("SKEL module loading.\n");
59
return (0);
60
case MOD_UNLOAD:
61
printf("SKEL module unloading.\n");
62
return (0);
63
}
64
return (EOPNOTSUPP);
65
}
66
67
/*
68
* Modules can have associated data and the module data also contains
69
* an entry for the function called by the kernel on load and unload.
70
*/
71
72
static moduledata_t skel_mod = {
73
"skel",
74
skel_mod_event,
75
NULL,
76
};
77
78
/*
79
* Each module is declared with its name and module data. The
80
* ordering arguments at the end put this module into the device
81
* driver class, which is sufficient for our needs. The complete list
82
* of modules types and ording can be found in sys/kernel.h
83
*/
84
85
DECLARE_MODULE(skel, skel_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);
86
87
88