[Linux] [Kernelmodul] Erstellen und laden Sie ein einfaches ladbares Kernelmodul

Ein Memo zum Erstellen und Laden des Kernelmoduls Sie können Stacktrace mit dump_stack () erhalten.

Quelle

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

wichtiger Punkt:

Ausführungsbeispiel

Überprüfen Sie den Betrieb mit 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

Beziehung

Zusammenfassung zum Überprüfen der Kernelmodulinformationen - Qiita [Linux] [Kernelmodul] Übergeben von Parametern als Argumente beim Laden eines ladbaren Kernelmoduls --Qiita [Linux] [Kernelmodul] Erstellen Sie kthread im Kernelmodul --Qiita

Referenz

Compiling Kernel Modules Erstellen eines Linux-Kernelmoduls für ARM-Seriously makefile - Cross compiling a kernel module - Stack Overflow

Recommended Posts

[Linux] [Kernelmodul] Erstellen und laden Sie ein einfaches ladbares Kernelmodul
Erstellen Sie einen einfachen WebDAV-Server unter Linux
[Linux] [Kernelmodul] Übergeben von Parametern als Argumente beim Laden eines ladbaren Kernelmoduls
Linux Kernel Build für DE10nano
[Hinweis] Aufbau und Verwendung des WSL2-Kernels
[Linux] [Kernelmodul] Erstellen Sie kthread im Kernelmodul
Erstellen Sie mit Docker eine CentOS Linux 8-Umgebung und starten Sie Apache HTTP Server
Erstellen Sie eine Drohnen-Simulator-Umgebung und versuchen Sie einen einfachen Flug mit Mission Planner
Erstellen Sie Linux in einer Windows-Umgebung. Schritte zum Installieren und Migrieren von Laradock
[UE4] Erstellen Sie DedicatedServer unter Windows und Linux
Erstellen Sie einen Samba-Server unter Arch Linux
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
[Linux] Aufbau einer Docker-Umgebung mit Amazon Linux 2
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers ―― 1. Einführung in Apache
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --2 PHP-Einführung
Effektive und einfache Webserver-Sicherheitsmaßnahmen "Linux"
Erstellen einer einfachen virtuellen Python-Umgebung ohne Verwendung von pyenv
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Laden Sie lokal erstellte Pakete mit Go Module
Erstellen Sie eine mruby-Entwicklungsumgebung für ESP32 (Linux Edition)
Erstellen Sie Server in Linux und lokalen Netzwerken mit Raspberry Pi NextCloud und Desktop-Sharing