修改内核后,编译内核ko到底哪里不同
本文用到的所有文件在此下载
这里使用最简单hello world的驱动,分为以下4种情况做了测试
- 未修改代码,相同配置
- 修改代码,相同配置
- 未修改代码,不同配置
- 修改代码,不同配置
过程记录
创建了以下几种ko文件
- configAio_codeAio.ko(aio的配置,aio的代码)
- configApc_codeAio.ko(apc的配置,aio的代码)
- configApc_codeApc.ko(apc的配置,apc的代码)
- configOther_codeAio.ko(其他配置,aio的代码)
为了防止调试代码的干扰 使用objcopy -g 去除调试代码
ELF头
对比下来所有文件头都是相同的
文件如下
configAio_codeAio.elf
configApc_codeAio.elf
configApc_codeApc.elf
configOther_codeAio.elf
反汇编
对比下来不同的地方主要在这个段

这是一个比较特殊的段,表示编译时候的软件id(可以接文件指定)在这里就是表示对应的内核二进制文件不同由连
configAio_codeAio.dump
configApc_codeAio.dump
configApc_codeApc.dump
configOther_codeAio.dump
总结
试验中得出结论,elf头基本是一致的,代表文件信息基本相同
但是反汇编代码不同,但是不同的地方并不影响驱动的加载和执行
但之前在调试5g的时候 确实出现过mt7601新编译的ko在老内核上加载出错的问题
故基本可以得出结论,在只改变配置文件的情况下,不改变相关驱动引用的代码的情况下大概率不会影响ko文件的编译使用。但若改变驱动需要引用的代码的情况下,新的ko就无法用在旧的内核上

浙公网安备 33010602011771号