0
点赞
收藏
分享

微信扫一扫

Linux:Hello World 模块

诗尚凝寒 2022-03-15 阅读 58

前言

Linux 系统为应用程序提供了功能强大且容易扩展的 API,但在某些情况下,这还远远不够。与硬件交互或进行需要访问系统中特权信息的操作时,就需要一个内核模块。下面从 Hello World 模块来说明模块的建立与运行。

环境搭建

开始编写Linux内核模块之前,我们首先要准备一些工具。最重要的是,你需要有一台Linux机器,尽管可以使用任何Linux发行版,但本文中,我使用的是Ubuntu 16.04 LTS,如果你使用的其他发行版,可能需要稍微调整安装命令。

建立

1、创建目录

mkdir -p ~/src/lkm_example

2、跳转到模块目录下

cd ~/src/lkm_example

3、创建模块文本

touch lkm_example.c

4、编写文本

vi lkm_example.c

5、文本内容

#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
	printk(KERN_ALERT "Hello, world\n");
	return 0;
}
static void hello_exit(void)
{
	printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

模块分析
hello_init():模块加载
hello_exit():模块卸载
module_init(hello_init): hello_init 函数为模块加载角色
module_init(hello_exit):hello_exit 函数为模块卸载角色
printk():与 printf() 相似
MODULE_LICENSE:Hello Would 模块带有自由的许可证
KERN_ALERT:消息的优先级

编译

1、在当前目录下创建 Makefile 文件

touch Makefile

2、编写 Makefile 文件

vim Makefile

3、Makefile 文件内容

obj-m += lkm_example.o
all:
make -C /lib/modules/ ( s h e l l u n a m e − r ) / b u i l d M = (shell uname -r)/build M= (shellunamer)/buildM=(PWD) modules
clean:
make -C /lib/modules/ ( s h e l l u n a m e − r ) / b u i l d M = (shell uname -r)/build M= (shellunamer)/buildM=(PWD) clean

运行

1、make 指令

make

2、将 Hello World 模块加载到内核

sudo insmod lkm_example.ko

3、查询内核日志输出 printk 结果

sudo dmsge
内核日志输出结果
在这里插入图片描述

4、将 Hello World 模块从内核卸载

sudo rmmod lkm_example

5、查询内核日志输出 printk 结果

sudo dmsge
内核日志输出结果
在这里插入图片描述

举报

相关推荐

0 条评论