type
Post
status
Published
slug
2023/07/05/Hands-on-practice---insertion-and-deletion-of-kernel-modules
summary
tags
工具
Linux
Arch
category
Linux
icon
password
new update day
Property
Oct 22, 2023 01:31 PM
created days
Last edited time
Oct 22, 2023 01:31 PM

Hello World kernel module

今天开始学习内核模块的 hello world 的编写。在整个过程中,我们需要完成 helloworld 模块的编写,并且对它进行插入和删除操作。

编码

helloworld.c

在编写Linux内核模块的时候,我们首先要编写自己的.c文件,然后需要编写自己的Makefile文件,之后使用make命令来对自己的.c文件进行编译,生成.ko文件,最后的.ko文件就是我们最后所需要的模块了,我们就是对它进行插入和删除。
首先我们来编写自己的.c文件
#include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> // 支持Linux的模块机制 static int __init lkm_init(void) // 入口函数 { printk("Hello world!\n"); return 0; } static void __exit lkm_exit(void) // 出口函数 { printk("Goodbye\n"); } module_init(lkm_init); // 指定一下入口点 module_exit(lkm_exit); // 声明许可证 MODULE_LICENSE("GPL");

Makefile

obj-m:=helloworld.o CURRENT_PATH:=$(shell pwd) LINUX_KERNEL:=$(shell uname -r) LINUX_KERNEL_PATH:=/usr/src/linux-zen # 需要根据自己的需要,进行修改 all: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules clean: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean

加载测试

加载

sudo insmod helloworld.ko

查看加载结果

sudo lsmod | grep helloworld helloworld 12288 0

查看内核日志

sudo dmesg | grep ello [ 237.298841] helloworld: loading out-of-tree module taints kernel. [ 237.298843] helloworld: module verification failed: signature and/or required key missing - tainting kernel [ 237.299466] Hello world!

删除

sudo rmmod helloworld sudo lsmod | grep helloworld sudo dmesg [ 969.537110] Goodbye
 
欢迎加入喵星计算机技术研究院,原创技术文章第一时间推送。
notion image
 
QEMU 调试 Linux 内核环境搭建调用Linux系统调用 fork() 创建进程实验