linux内核之-----内核模块文件格式
linux内核驱动有两种加载方式,一种是编译进内核文件即uImage或者zImage文件中,另一种是编译成内核模块形式,即XXX.ko。在分析内核模块文件格式之前,最好先认识一下ELF(Executable and Linking Format)文件格式。
ELF(Executable and Linking Format)是一种对象文件的格式,它自最早在 System V 系统上出现后,被 UNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。可以说,ELF是构成众多UNIX系统的基础之一,不管你是Windows或者Linux应用程序开发,还是Linux内核驱动成都开发人员,最好熟悉并掌握ELF。
TISC(Tool Interface Standard Committee)委员会定义了一套ELF标准。你可以从这里(
http://refspecs.freestandards.org/elf/)找到详细的标准文档。
WiKi上对ELF文件也有相关的介绍,我们着重关注WiKi上给定的链接:
https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
首先,你需要知道的是所谓对象文件(Object files)有三个种类:
1) 可重定位的对象文件(Relocatable file)
这是由汇编器汇编生成的 .o 文件。后面的链接器(link editor)拿一个或一些 Relocatable object files 作为输入,经链接处理后,生成一个可执行的对象文件 (Executable file) 或者一个可被共享的对象文件(Shared object file)。我们可以使用 ar 工具将众多的 .o Relocatable object files 归档(archive)成 .a 静态库文件。另外,可以预先告诉大家的是我们的内核可加载模块 .ko 文件也是 Relocatable object file。

</