修改内核后,编译内核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就无法用在旧的内核上

posted @ 2020-08-26 19:14  GeekerFeng  阅读(728)  评论(0)    收藏  举报