第一个linux内核模块

一、安装linux内核头文件

yum install kernel-devel.x86_64

安装完成后头文件被放置在目录(因系统不同而不同):/usr/src/kernels/3.10.0-1062.4.3.el7.x86_64

二、编写模块代码

在任一目录下新建文件hello_module.c,内容如下:

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

static int __init hello_init(void)
{
    printk("---------my %s---------\n", __FUNCTION__);
    return 0;
}

static void __exit hello_exit(void)
{
    printk("---------my %s---------\n", __FUNCTION__);
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

三、编写Makefile

在和hello_module.c同级目录下创建Makefile文件,内容如下:

KERNEL_DIR=/usr/src/kernels/3.10.0-1062.4.3.el7.x86_64
CUR_DIR=$(shell pwd)
obj-m = hello_module.o

build:
        make -C $(KERNEL_DIR) M=$(CUR_DIR) modules

clean:
        make -C $(KERNEL_DIR) M=$(CUR_DIR) clean

load:
        insmod hello_module.ko

unload:
        rmmod hello_module.ko 

其中KERNEL_DIR变量指向内核头文件目录。

四、编译

运行make编译:

[work@vm kernel]$ make
make -C /usr/src/kernels/3.10.0-1062.4.3.el7.x86_64 M=/home/work/test/kernel modules
make[1]: 进入目录“/usr/src/kernels/3.10.0-1062.4.3.el7.x86_64”
  CC [M]  /home/work/test/kernel/hello_module.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/work/test/kernel/hello_module.mod.o
  LD [M]  /home/work/test/kernel/hello_module.ko
make[1]: 离开目录“/usr/src/kernels/3.10.0-1062.4.3.el7.x86_64”

编译后当前目录内文件包含:

[work@vm kernel]$ ll
总用量 220
-rw-rw-r--. 1 work work    320 11月 20 20:45 hello_module.c
-rw-rw-r--. 1 work work 102144 11月 20 20:53 hello_module.ko
-rw-rw-r--. 1 work work    856 11月 20 20:53 hello_module.mod.c
-rw-rw-r--. 1 work work  58768 11月 20 20:53 hello_module.mod.o
-rw-rw-r--. 1 work work  44944 11月 20 20:53 hello_module.o
-rw-rw-r--. 1 work work    275 11月 20 20:43 Makefile
-rw-rw-r--. 1 work work     46 11月 20 20:53 modules.order
-rw-rw-r--. 1 work work      0 11月 20 20:53 Module.symvers

查看模块信息:

[work@vm kernel]$ modinfo hello_module.ko
filename:       /home/work/test/kernel/hello_module.ko
license:        GPL
retpoline:      Y
rhelversion:    7.7
srcversion:     D105845B0514D2D8892F4A0
depends:
vermagic:       3.10.0-1062.4.3.el7.x86_64 SMP mod_unload modversions

五、加载和卸载

运行sudo make load加载:

[work@vm kernel]$ sudo make load
insmod hello_module.ko

运行sudo make unload卸载:

[work@vm kernel]$ sudo make unload
rmmod hello_module.ko

查看系统日志文件:/var/log/messages

[root@vm work]# tail -f /var/log/messages
Nov 20 20:55:31 vm kernel: ---------my hello_init---------
Nov 20 20:56:07 vm kernel: ---------my hello_exit---------

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值