linux内核之-----内核模块文件格式

本文详细介绍了Linux内核中ELF文件的各个section,包括.text、.data、.bss等,以及section header table的作用。通过readelf工具展示了如何查看ELF文件的sections,并解释了各section的属性如Address、Offset、Size、Align和Flag,强调了不同section在程序运行时的角色,特别是Allocable与non-Allocable的区别。

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

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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值