[Linux] [module de noyau] Construire et charger un module de noyau chargeable simple

Un mémo sur la construction et le chargement du module noyau Vous pouvez obtenir stacktrace avec dump_stack ().

La source

testmod.c


#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>

MODULE_LICENSE("MIT");

static int testmod_init(void)
{
	printk(KERN_INFO "driver loaded\n");
	dump_stack();
	return 0;
}

static void testmod_exit(void)
{
	printk(KERN_INFO "driver unloaded\n");
}

module_init(testmod_init);
module_exit(testmod_exit);

Makefile


KERNELSRCDIR = /lib/modules/$(shell uname -r)/build
ARCH=x86
#ARCH=arm
#CROSS_COMPILE=arm-none-linux-gnueabi-
VERBOSE = 0

obj-m := testmod.o

all:
	make -C $(KERNELSRCDIR) \
		M=$(PWD) \
		KBUILD_VERBOSE=$(VERBOSE) \
		ARCH=$(ARCH) \
		CROSS_COMPILE=$(CROSS_COMPILE) \
		modules

clean:
	make -C $(KERNELSRCDIR) M=$(PWD) KBUILD_VERBOSE=$(VERBOSE) ARCH=$(ARCH) clean

point important:

Exemple d'exécution

Vérifiez le fonctionnement par insmod


$ make
$ sudo insmod testmod.ko
$ sudo rmmod testmod
$ dmesg
[20487.308696] testmod: module license 'MIT' taints kernel.
[20487.308709] Disabling lock debugging due to kernel taint
[20487.310110] driver loaded
[20487.310116] Pid: 32263, comm: insmod Tainted: P           O XXXXX.x86_64 #1
[20487.310121] Call Trace:
[20487.310130]  [<ffffffffa00f8000>] ? 0xffffffffa00f7fff
[20487.310138]  [<ffffffffa00f801c>] testmod_init+0x1c/0x20 [testmod]
[20487.310146]  [<ffffffff8100212a>] do_one_initcall+0x12a/0x180
[20487.310213]  [<ffffffff810b60a6>] sys_init_module+0x10f6/0x20b0
[20487.310220]  [<ffffffff815f38e9>] system_call_fastpath+0x16/0x1b
[20487.383930] driver unloaded

Relation

Résumé de la vérification des informations sur les modules du noyau - Qiita [Linux] [module noyau] Comment passer des paramètres comme arguments lors du chargement d'un module noyau chargeable --Qiita [Linux] [module noyau] Créer kthread dans le module noyau --Qiita

référence

Compiling Kernel Modules Création d'un module de noyau Linux pour ARM-Serously makefile - Cross compiling a kernel module - Stack Overflow

Recommended Posts

[Linux] [module de noyau] Construire et charger un module de noyau chargeable simple
Construisez un serveur WebDAV simple sur Linux
[Linux] [module noyau] Comment passer des paramètres comme arguments lors du chargement d'un module noyau chargeable
Compilation du noyau Linux pour DE10nano
[Note] Construction et utilisation du noyau WSL2
[Linux] [module du noyau] Créer kthread dans le module du noyau
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
Construisez un environnement de simulateur de drone et essayez un vol simple avec Mission Planner
Construisez Linux sur un environnement Windows. Étapes pour installer Laradock et migrer
[UE4] Construire DedicatedServer sous Windows et Linux
Construire un serveur Samba sur Arch Linux
[Linux] Créer un environnement Jenkins avec Docker
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
Source compilez Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web ―― 1. Introduction à Apache
Source compile Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web --2 introduction PHP
Mesures de sécurité du serveur Web efficaces et simples «Linux»
Créer un environnement virtuel Python simple sans utiliser pyenv
Créez un environnement virtuel avec pyenv et venv
Charger les packages créés localement avec le module Go
Créer un environnement de développement mruby pour ESP32 (édition Linux)
Créez des serveurs sur Linux et des réseaux locaux avec Raspberry Pi NextCloud et le partage de bureau