linux内核模块调试,linux内核实验教程
1.什么是内核模块?
内核是Linux内核对外提供的一个套接字,全称为可加载内核模块(LKM),我们简称模块。Linux内核之所以提供模块机制,是因为它是一个单片内核。单片内核最大的优点是效率高,因为所有的内容都集成在一起了,缺点是扩展性和可维护性比较差。模块机制就是为了弥补这个缺陷。
模块是具有独立功能的程序。可以单独编译,但不能独立运行。它在运行时链接到内核,作为内核的一部分运行在内核空间,与运行在用户空间的进程不同。模块通常由一组函数和数据结构组成,用于实现文件系统、驱动程序或其他上层内核的功能。
简而言之,模块就是为内核(某种意义上,内核也是一个模块)或其他内核模块提供功能的代码块。
二、内核模块编写
编写内核模块时必须具备的两个功能:
__init和__exit是Linux内核的一个宏定义,使系统在初始化后释放这个函数及其占用的内存。因此,它的优势是显而易见的。在编写入口函数和出口函数时,建议使用后一种方法。
此外,内核编程中使用的库函数不同于用户模式中使用的库函数。比如模块程序中使用的printk函数对应的是用户态的printf函数,printk是内核态的信息打印函数,类似于printf,但是printk也有信息打印级别。
装载和卸载模块:
1模块初始化(你好初始化)
A.告诉内核你写的模块程序会从那里执行。
B.b.module_init()函数中的参数是注册函数的函数名。
2模块_出口(hello _出口)
A.告诉内核你写了模块程序离开那里。
B.b.module_exit()中的参数名是卸载函数的函数名。
三、内核模块编译:
第一步:模块源代码,如果用vi更好,直接用wq保存退出就行了!
步骤2:编写Makefile文件。
Makefile做的工作就是编译生成。o,ko等模块相关文件!
四。实验步骤:
1.编写模块代码HelloWorld.c
其次,编写Makefile文件
第三,编译模块
四。加载和卸载HelloWorld模块
动词(verb的缩写)检查模块信息
6.卸载HelloWorld模块
七、查看模块信息
动词(verb的缩写)实验演示:
进入Linux终端控制台,创建HelloWorld.c文件,该文件可以由Vihelloworld.c创建和编写。
//HelloWorld.c:
图HelloWorld模块代码
创建一个Makefile文件(注意文件名区分大小写)
图2-2模块HelloWorld的Makefile配置文件
注意:
“makec/lib…”语句
make语句前面的空格是tab(按tab),而-C中的C是大写的,不是小写的。
保存后,在编译终端的当前目录下进行make操作,如下图所示:
图2-3模块HelloWorld的make操作
编译后会生成许多文件:
图2-4模块HelloWorld的编译内容
最后,加载和卸载模块:
在终端的当前目录中,输入命令insmod。/hello world . ko;
输入命令lsmod,可以找到名为HelloWorld的模块,表示该模块已经加载;
图2-5模块HelloWorld已经加载到内核中。
输入命令dmesg,检查最后一行,就会有模块加载时调用的函数的输出;
输入命令rmmod HelloWorld,卸载模块(注意与加载时不同),然后输入lsmod。找不到HelloWorld模块,说明该模块已被卸载;
输入命令dmesg查看模块卸载调用的函数的输出。
图2-6加载和卸载模块HelloWorld时内核模块的记录
不及物动词实验总结:
LMakefile是一个脚本,主要用于编译多个文件。
Lmake程序可以维护相互依赖的源文件,但当某些文件发生变化时,它可以自动识别,只自动编译相应的文件。
上面这个简单例子中的Makefile的内容是:obj-m:=helloworld.o在这里,我要提醒大家,网上有很多方法可以编写Makefile,但是都太麻烦了。如果写内核模块,obj-m:=*。o就够了(*是你的模块文件名,比如上面的hellworld.c文件)。以后再用。
make-Wall-C/lib/modules/` uname-r `/build M=` pwd ` modules
命令生成helloworld.o、helloworld.ko等文件,有人直接用。
make-C/lib/modules/` uname-r `/build M=` pwd `模块
中间省略了-wall,W all可以看成W all,W代表警告,所以用-Wall就是显示所有警告!
l加载模块命令:insmod helloworld.ko
l卸载模块命令:rmmod helloworld.ko
查看模块信息:dmesg
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。