构建一个没有源代码的linux模块

构建一个没有源代码的linux模块,linux,module,kernel,system,opensuse,Linux,Module,Kernel,System,Opensuse,我只是想知道,是否有可能在没有源代码的情况下构建/插入一个模块。假设我下载了一个openSuse操作系统,但是内核源代码没有附带。如何在不重新编译内核的情况下编译模块并插入模块 对于没有内核源代码的openSuse,很难找到完全相同版本的源代码。即使内核的配置不同,也不能在当前openSuse中插入模块 但这不可能发生在这个行业,是吗?我们不能编写驱动程序,让用户下载最新版本的源代码并找出正确的配置 这个问题在业界是如何解决的?我很好奇。我对这个比较陌生 要构建模块,需要的是内核头文件,而不是整

我只是想知道,是否有可能在没有源代码的情况下构建/插入一个模块。假设我下载了一个openSuse操作系统,但是内核源代码没有附带。如何在不重新编译内核的情况下编译模块并插入模块

对于没有内核源代码的openSuse,很难找到完全相同版本的源代码。即使内核的配置不同,也不能在当前openSuse中插入模块

但这不可能发生在这个行业,是吗?我们不能编写驱动程序,让用户下载最新版本的源代码并找出正确的配置


这个问题在业界是如何解决的?我很好奇。我对这个比较陌生

要构建模块,需要的是内核头文件,而不是整个源代码。NVidia以这种方式重建其内核模块,因此这将是业界解决问题的一种方式。Linux对纯二进制模块不太友好,事实上,内核开发人员习惯于定期更改ABI和结构以打破纯二进制模块。

不清楚您所说的是什么行业。他们为什么使用linux?何处-在服务器上,在客户端上?作为桌面系统

如果他们知道可能需要构建模块,为什么他们没有内核源代码


我不知道是否专门针对OpenSuse,但对于Ubuntu,您可以下载内核当前补丁级别的内核头。然后就可以编译模块了。在软件存储库管理程序synaptic中不难找到它们。

如果你是硬件制造商,理想情况下你会在正式的linux开发树中找到你的驱动程序,因此所有发行版最终都会继承它。毫无疑问,您将获得一些关于原始提交内容的相当坦率的反馈,并且要使其被接受并包含进来,需要对维护人员坚持的任何编码风格/质量、接口选择等进行更改

如果你是一个小批量集成商,购买的主板上已经有一个二进制发行版,那么除了技术挑战之外,你可能会从最终客户那里得到一些悲伤(或者更糟),他们知道他们应该能够请求获得它的源代码

如果您只是为了内部使用,那么您就面临着技术挑战。对于未经修改的支持上游的体系结构,一旦您确定了需要什么,您可能会从Suse甚至上游树获得足够接近的内核头集。但是,如果您的董事会拥有未得到官方支持的硬件(缺少公共数据表),并且依赖于未发布的内核补丁和/或未发布的gcc补丁,那么您就陷入了困境——使用基于这种芯片的系统可能没有完全光明正大的途径,除非您能够对足够的硬件唯一性进行反向工程,以便能够使用可以从源代码构建的编译器构建自己的内核源代码。现在有很多灰色市场的安卓平板电脑陷入了这样的困境

最终,如果您的项目依赖于无法从源代码重新创建的软件库(如linux或gcc)的二进制文件,那么您将处于不稳定的状态。如果这是一个不仅仅是偶然内部使用的项目,那么您可能应该考虑切换到一个发布了必要的支持代码(或者至少是重新实现它所需的数据表细节)的平台