我只是想知道,是否可以在没有源代码的情况下构建/插入模块。假设我已经下载了一个openSuse操作系统,并且内核源代码没有随附。如何在不重新编译内核的情况下编译模块并插入模块?
对于没有内核源代码的openSuse,很难找到完全相同的源代码版本。即使内核的配置不同,也无法将模块插入当前的openSuse中。
但这不可能在行业内发生,不是吗?我们无法编写驱动程序并让用户下载最新版本的源代码并找出正确的配置。
业界如何解决这个问题?我好奇。我对此比较陌生。
答案 0 :(得分:3)
要构建模块,您需要内核头文件而不是整个源代码。 NVidia以这种方式重建它的内核模块,因此这将是行业如何解决问题的一种方式。 Linux对二进制模块不是很友好,实际上内核开发人员习惯于常规地更改ABI和结构来破坏仅二进制模块。
答案 1 :(得分:0)
目前还不清楚你在说什么行业。他们为什么使用linux?在哪里 - 在服务器上,在客户端?作为桌面系统?
如果他们知道他们可能需要构建模块 - 他们为什么不拥有内核源代码?
我不是专门针对OpenSuse,但对于Ubuntu,您可以下载内核当前补丁级别的内核头文件。然后你可以编译模块。在软件存储库管理程序synaptic中找到它们并不难。
答案 2 :(得分:0)
如果您是硬件制造商,理想情况下您可以在官方的Linux开发树中获取驱动程序,因此所有发行版最终都会继承它。毫无疑问,您会对原始提交内容获得一些相当坦率的反馈,并且要求将其包含在内,这将需要制作维护者所坚持的编码风格/质量,界面选择等变更。
如果你是一个小批量集成商购买已经上面只有二进制发行版的主板,那么除了技术挑战之外,你可能会对最终客户感到悲伤(或者更糟),他们知道他们应该能够请求获取它的来源。
如果您只是在内部使用,那么您只是面临技术挑战。可能对于未修改的上游支持的体系结构,一旦找到所需内容,就可以获得足够接近的内核头文件集,可能来自Suse,甚至是上游树。但是,如果您的主板具有未经官方支持的硬件(缺少公共数据表)并且依赖于未发布的内核补丁和/或未发布的gcc补丁,那么您就处于困境 - 使用基于系统的系统可能没有全面的路径在这样的芯片上,除非您可以使用可以从源构建的编译器对可以构建自己的内核形式源的足够的硬件唯一性进行反向工程。现在有很多灰色市场的Android平板电脑陷入了困境。
最终,如果您的项目依赖于Linux或gcc等软件库的二进制文件,您无法从源代码重新创建,那么您处于不稳定的位置。如果它是一个旨在用于偶然内部使用的项目,您应该考虑切换到一个平台,在该平台上发布必要的支持代码 - 或者至少是重新实现它所需的数据表细节。