162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * This module emits "Hello, world" on printk when loaded.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * It is designed to be used for basic evaluation of the module loading
662306a36Sopenharmony_ci * subsystem (for example when validating module signing/verification). It
762306a36Sopenharmony_ci * lacks any extra dependencies, and will not normally be loaded by the
862306a36Sopenharmony_ci * system unless explicitly requested by name.
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <linux/init.h>
1462306a36Sopenharmony_ci#include <linux/module.h>
1562306a36Sopenharmony_ci#include <linux/printk.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic int __init test_module_init(void)
1862306a36Sopenharmony_ci{
1962306a36Sopenharmony_ci	pr_warn("Hello, world\n");
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	return 0;
2262306a36Sopenharmony_ci}
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cimodule_init(test_module_init);
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistatic void __exit test_module_exit(void)
2762306a36Sopenharmony_ci{
2862306a36Sopenharmony_ci	pr_warn("Goodbye\n");
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cimodule_exit(test_module_exit);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciMODULE_AUTHOR("Kees Cook <keescook@chromium.org>");
3462306a36Sopenharmony_ciMODULE_LICENSE("GPL");
35