基于Linux Ubuntu
1.安装内核头文件
1.1查看Linux内核版本
usname -r
1.2安装Linux内核头文件
sudo apt-get install linux-headers-`uname -r`
默认安装目录:/lib/modules/"内核版本号"

2.编写HelloWord
2.1 编写hello.c
随便进入一个目录,
使用:touch hello.c 新建一个hello.c文件。
使用:vim hello.c 编辑新建好的hello.c文件的内容,如下:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
/* 非必需内容*/
MODULE_LICENSE("Dual BSD/GPL");//许可证
MODULE_AUTHOR("xushuzhan");//作者
MODULE_DESCRIPTION("hello demo");//模块描述
MODULE_VERSION("1.0");//
/* 入口函数 */
static int hello_init(void)
{
printk(KERN_ALERT "hello_init is called\n");
}
/* 退出函数 */
static void hello_exit(void)
{
printk(KERN_ALERT "hello_exit is called\n");
}
/* 注册 */
module_init(hello_init);
module_exit(hello_exit);
可以看到,自己写的入口函数和出口函数都通过最后两个函数完成了注册,因此,在安装和卸载模块的时候,会分别调用这两个函数,并输出相应的内容到日志文件中,用dmesg命令即可查看。
2.2 编写Makefile
使用:touch Makefile创建Makefile文件(Makefile文件主要用来定义编译的规则,创建的时候要注意文件名大小写。):
obj-m := hello.o
default:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
obj-m的意思是将目标文件编译成模块。
$(shell uname -r)代表内核的版本号。
$(shell pwd)代表当前目录。

2.3 编译模块
sudo make
编译成功即可看到当前目

这篇博客介绍了如何在Ubuntu上进行Linux内核编程,从安装内核头文件到编写HelloWorld驱动,然后详细讲解了NetFilter框架,包括其五个Hook点和钩子函数的定义。作者通过实例演示了如何使用NetFilter实现对HTTP GET/POST流量的分类,通过定义结构体、hook函数和注册函数,完成流量监控并输出到日志。
最低0.47元/天 解锁文章
748

被折叠的 条评论
为什么被折叠?



