Re: git: b2e41172bdc0 - main - A skeleton kernel module suitable for creating new such modules.
Date: Wed, 15 Nov 2023 05:52:27 UTC
On 11/14/23 15:11, George V. Neville-Neil wrote:
> The branch main has been updated by gnn:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=b2e41172bdc00f177f7de4d4f4963cc4d99a3178
>
> commit b2e41172bdc00f177f7de4d4f4963cc4d99a3178
> Author: George V. Neville-Neil <gnn@FreeBSD.org>
> AuthorDate: 2023-10-05 20:05:31 +0000
> Commit: George V. Neville-Neil <gnn@FreeBSD.org>
> CommitDate: 2023-11-14 21:08:13 +0000
>
> A skeleton kernel module suitable for creating new such modules.
> ---
> share/examples/modules/Makefile | 6 +++
> share/examples/modules/skel.c | 87 +++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 93 insertions(+)
>
> diff --git a/share/examples/modules/Makefile b/share/examples/modules/Makefile
> new file mode 100644
> index 000000000000..0f0a2fb01e8a
> --- /dev/null
> +++ b/share/examples/modules/Makefile
> @@ -0,0 +1,6 @@
> +.PATH: ${SRCTOP}/sys/skel
> +
> +KMOD= skel
> +SRCS= skel.c
> +
> +.include <bsd.kmod.mk>
> diff --git a/share/examples/modules/skel.c b/share/examples/modules/skel.c
> new file mode 100644
> index 000000000000..fc99e13ab444
> --- /dev/null
> +++ b/share/examples/modules/skel.c
> @@ -0,0 +1,87 @@
> +/*-
> + * SPDX-License-Identifier: BSD-2-Clause
> + *
> + * Copyright (c) 2023 George V. Neville-Neil
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + */
> +
> +/*
> + * SKEL Loadable Kernel Module for the FreeBSD Operating System
> + *
> + * The SKEL module is meant to act as a skeleton for creating new
> + * kernel modules.
> + *
> + * This module can be loaded and unloaded from * FreeBSD and is for
> + * use in teaching as well.
> + *
> + */
> +
> +#include <sys/cdefs.h>
> +#include <sys/param.h>
> +#include <sys/kernel.h>
> +#include <sys/systm.h>
> +#include <sys/module.h>
> +
sys/systm.h should be after sys/{param,types}.h with the rest sorrted
alphabetically after that.
> +/*
> + * Every module can hav ea module specific piece of code that is
> + * executed whenever the module is loaded or unloaded. The following
> + * is a trivial example that prints a message on the console whenever
> + * the module is loaded or unloaded.
> + */
> +
"hav ea" -> "have a"
> +static int
> +skel_mod_event(module_t mod, int type, void *data)
> +{
> +
> + switch (type) {
> + case MOD_LOAD:
> + printf("SKEL module loading.\n");
> + return (0);
> + case MOD_UNLOAD:
> + printf("SKEL module unloadin.\n");
> + return (0);
> + }
> + return (EOPNOTSUPP);
> +}
> + > +/*
> + * Modules can have associated data and the module data also contains
> + * an entry for the function called by the kernel on load and unload.
> + */
> +
> +static moduledata_t skel_mod = {
> + "skel",
> + skel_mod_event,
> + NULL,
> +};
> +
> +/*
> + * Each module is declared with its name and module data. The
> + * ordering arguments at the end put this module into the device
> + * driver class, which is sufficient for our needs. The complete list
> + * of modules types and ording can be found in sys/kernel.h
> + */
> +
"modules" -> "module"
"ording" -> "ordering"
It probably makese sense to stylize sys/kernel.h as either
<sys/kernel.h> or src/sys/sys/kernel.h to make it clear that we're
either referencing a relative path that could be found inside your
standard include path, or a location in the tree that one can quickly
browse to.
> +DECLARE_MODULE(skel, skel_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);
> +
Thanks,
Kyle Evans