一份技术资料说Linux重视兼容性,另一份却说Linux没有稳定的内核驱动接口,两者看似矛盾,实际可能在谈不同对象。操作系统资料整理首先应把应用使用的接口,与驱动在内核内部依赖的接口分开,不能只留下“稳定”两个字。

本次读取的Linux上游《The Linux Kernel Driver Interface》,页面标识为7.3.0-rc6文档。文章开头专门限定,讨论的是内核内部接口,而非内核到用户空间的接口。用户空间应用所使用的系统调用接口被作者描述为长期稳定;这段说明没有向所有内核内部数据结构作同样的承诺。[1]

即使源代码中看到相同函数名称,也不能据此证明一个驱动二进制文件能够跨环境通用。文档列出的因素包括C编译器版本造成的结构体对齐或填充差异、内核构建选项使结构体字段与函数实现发生变化,以及处理器架构的不同。它们影响的是二进制文件所依赖的具体布局与行为,问题并非只剩一个内核版本号。

源码接口还涉及另一层变化。上游开发者在修复缺陷、改进实现或处理安全问题时,可能调整函数名称、参数和结构体;主线树内相应调用会随接口变化一起修改。文档据此讨论将驱动纳入主线的维护优势。这里说明的是协同维护机制,不能进一步推导某台设备在任意发行版升级后必定可用。

对整理设备支持材料的团队,这一区分可以落实到资料表述:应用依赖的系统调用兼容说明、驱动源码所针对的内核接口、已交付二进制对应的构建环境,分别属于不同证据。某一栏已有官方介绍,不应替另一栏补写“已验证”。例如只有发行版名称和设备型号,却没有实际内核构建身份,就不足以证明拿到的驱动二进制与目标环境匹配。

上游原文也讨论了特定发行版、特定内核配置与相同编译器下构建模块的条件。本文引用这些条件帮助理解兼容声明的范围,没有编译、安装或升级驱动,也不把上游的发展说明替代发行版厂商或设备厂商的实际支持材料。读准接口的两端,再读其稳定承诺,才能避免把应用兼容性直接移到内核内部。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。