一个简单的内核模块编程实例

本文详细介绍了如何使用Linux内核模块和NetFilter进行模块编程,并提供了实例代码。通过安装、运行和卸载内核模块,读者可以了解模块的生命周期和内核日志打印信息。此外,还展示了如何利用make命令构建和安装模块,以及如何通过dmesg命令检查日志以验证模块是否正确加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习netfilter的使用,需要用到模块编程,所以先学习写个模块的例子。

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

static int __init hello_init(void)
{
    printk(KERN_INFO "call hello_init\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO "call hello_exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("tonybuaa");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("hello module");
MODULE_ALIAS("a smiplest module");

Makefile文件是这样的:

ifeq ($(KERNELRELEASE),)
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
    rm -rf *.o *.mod.c *.ko modules.order Module.symvers
else
    obj-m := hello.o
endif

执行make:

tony@ubuntu-a:~/code/module_test$ make
make -C /lib/modules/3.8.0-19-generic/build M=/home/tony/code/module_test modules
make[1]: 正在进入目录 `/usr/src/linux-headers-3.8.0-19-generic'
  CC [M]  /home/tony/code/module_test/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/tony/code/module_test/hello.mod.o
  LD [M]  /home/tony/code/module_test/hello.ko
make[1]:正在离开目录 `/usr/src/linux-headers-3.8.0-19-generic'

安装内核模块:

tony@ubuntu-a:~/code/module_test$ sudo insmod ./hello.ko

使用dmesg | tail查看内核日志打印信息:

tony@ubuntu-a:~/code/module_test$ dmesg | tail
[13270.772001] call hello_init

卸载内核模块:

tony@ubuntu-a:~/code/module_test$ sudo rmmod hello

再次查看内核日志:

tony@ubuntu-a:~/code/module_test$ dmesg | tail
[13270.772001] call hello_init
[13337.794110] call hello_exit

 

 

转载于:https://www.cnblogs.com/tonybuaa/archive/2013/04/30/3052107.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值