编写第一个内核模块 - LKMs 第一部分
探索 LKMs
简单来说,内核模块是一种无需在核心源代码树中工作就能提供内核级功能的方法。想象一下,你需要为 Linux 内核添加一个支持功能,比如一个新的设备驱动程序以使用特定的硬件外设芯片、一个新的文件系统或一个新的 I/O 调度程序。一种方法很明显:用新代码更新内核源代码树,编译它,然后测试。
虽然这看起来很直接,但实际上工作量很大。我们编写的代码中的每一个更改,无论多么微小,都需要我们重新编译内核映像,然后重新启动系统以进行测试。一定有更简洁、更简单的方法,确实有,那就是 LKM 框架!
LKM 框架
LKM 框架是一种在核心源代码树之外编译一段内核代码的方法,通常被称为“树外”代码,在一定程度上使其与内核保持独立,然后将其插入或加载到内核内存中,让它运行并执行其任务,然后从内核内存中移除(或卸载)它。
内核模块的源代码通常由一个或多个 C 源文件、头文件和一个 Makefile 组成,通过 make(1) 编译成一个内核模块。内核模块本身只是一个二进制目标文件,而不是一个二进制可执行文件。在 Linux 2.4 及更早版本中,内核模块的文件名后缀为 .o ;在现代的 2.6 及更高版本的 Linux 中,它的后缀为 .ko (内核对象)。编译完成后,你可以在运行时将这个 .ko 文件(即内核模块)插入到正在运行的内核中,使其成为内核的一部分。
需要注意的是,并非所有内核功能都可以通过 LKM 框架提供。一些核心功能,如核心 CPU 调度器代码、内
超级会员免费看
订阅专栏 解锁全文
1097

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



