linux内核模块隔离,编写最简单Linux内核模块HelloWorld

准备工作

在进行以下操作前,首先我准备了一台电脑,并且安装了虚拟机,系统是Ubuntu16.04。如果是开发板,那么需要安装交叉编译器,但是目前我只在虚拟机的Ubuntu16.04系统里完成驱动模块的加载和卸载,实现了一个最最简单的内核模块,并且通过这个最简单的驱动,学习最基本的概念。

需要先安装对应的开发支持

yum install kernel-headers kernel-devel gcc glibc gcc-c++ -y //等,autoconfig, make等工具。

什么是内核模块

模块是可以根据实际需要可以动态加载和卸载到内核中的代码。它们扩展了内核的功能,而无需重启系统,就可以进行模块加载,并工作。例如,一种类型的模块是设备驱动程序,它允许内核访问连接到系统的硬件。没有模块,我们必须构建整个内核并将新功能直接添加到内核映像中。除了拥有更大的内核之外,这还有一个缺点,就是每次我们想要新功能时都需要我们重新编译内核并烧录到设备。

编写 hello.c

#include

//所有模块都会需要这个头文件

#include

//下面的宏需要

#include

//内核常用库函数

static int __init hello_init(void){

printk(KERN_INFO "module init success\n");

return 0;

}

static void __exit hello_exit(void){

printk(KERN_INFO "module exit success\n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_LICENSE("GPL");

//开源协议

MODULE_AUTHOR("作者");

MODULE_DESCRIPTION("功能描述");

这是一个简单内核模块程序,可以动态加载和卸载。虽然没有实际的功能。

模块加载的时候系统会打印module init success\n

模块卸载的时候系统会打印module exit success\n

模块编译

Makefile

obj-m := hello.o

PWD := $(shell pwd)

KVER := $(shell uname -r)

KDIR :=/lib/modules/$(KVER)/build/

all:

$(MAKE) -C $(KDIR) M=$(PWD)

clean:

rm -rf *.o *.mod.c *.mod.o *.ko *.symvers *.order *.a

将hello.c和Makefile放在同一路径下进行编译,编译成功,会在当前路径下生成hello.ko,这就是我们将要加载到内核的模块。

相关指令

name

function

lsmod

查看已经加载到内核中的模块

insmod

加载模块到内核中

rmmod

从内核卸载模块

depmod

生成模块所需要的依赖

modprobe

很强大的指令(-h)

测试结果

模块加载

加载hello.ko模块到内核中

如果模块加载成功的话,可以查看模块

lsmod | grep hello

成功加载会显示以下结果

并且可以查看内核打印的消息

dmesg | grep "init success"

[ 4160.003247] module init success

模块卸载

rmmod hello.ko

成功卸载hello模块后,可以查看内核是否正常打印出我们预设在程序的打印信息。

dmesg | grep "exit success"

可以看到终端上显示module exit success,说明通过rmmod成功卸载hello.ko

[ 7160.003247] module exit success

这时候,如果再通过lsmod去查看当前的内核模块,就会发现hello.ko已经消失不见了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值