内核开发学习手册-内核驱动接口
针对内核,无论是开发还是用户,我们所希望的是稳定的驱动功能,而稳定的驱动和有稳定的内核接口之间的联系,需要我们去思考,有助于理解linux的开发哲学。
下文解释了:
这个二进制接口可以理解为固定的驱动二进制驱动模块文件,即md5sum 是相同的。下面探讨的是作为一个驱动开发者,如果你的驱动没有释放到内核,但是想为不同架构,不同内核版本下的内核都提供稳定正确的二进制驱动模块文件是否是值得的。
二进制内核接口
首先从一个疑问开始:稳定的源代码接口是否意味着稳定的二进制内核接口,实际上并不是这样的,因为包括以下几点
- 编译工具链不同版本会导致数据结构内部的对齐问题
- 内核配置选项会导致数据结构成员不同,函数实现不同等。
- 内核使用的内存会以不同的方式对齐
这些都会导致一个特定内核下编译的二进制驱动程序大概率无法在另外一个架构下正确运行,因此避免在多环境下的令人头大的编译,最好的方法就是释放到内核
内核的源代码接口不稳定
内核开发是快速迭代的,发现bug,有更好的实现方式,需要增加功能优化,或者安全性,稳定性,就需要进行接口修改,这就涉及到结构体的修改,函数成员的修改,甚至API的删除或者增加,如果保持维护旧的接口,会导致稳定性问题,设计到安全会更加严重,而且会浪费不必要的时间,毕竟开源人员的时间是宝贵的。
当一个接口被重写时,我们需要对涉及的所有驱动代码进行修改,保证内核的正确运行
结果
如果被授予了将源代码放入内核的权限,而且是GPL许可下的,最好释放到内核,不然可能需要自己去为每一个linux内核来维护二进制模块,而且释放到内核有如下优点
- 驱动质量提升,开发者的维护成本降低
- 代码的稳定性问题/性能问题/bug都会有其他人修复
- 新功能特性的增加
- 随时和内核版本是适配的,当驱动接口改变时,第一个提交的会同步修改驱动并保证正确运行
- 不需要联系开发商去适配二进制驱动