1

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

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

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

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

4

3 回答 3

3

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

于 2012-05-04T21:59:53.383 回答
0

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

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

如果您只是为了内部使用而这样做,那么您将面临技术挑战。很可能对于未经修改的上游支持的体系结构,您可以从 Suse 甚至上游树中获得足够接近的一组内核头文件,只要您弄清楚您需要什么。但是,如果您的主板具有不受官方支持的硬件(缺少公共数据表)并且依赖于未发布的内核补丁和/或未发布的 gcc 补丁,那么您将处于困境 - 使用基于系统的系统可能没有完全光明的路径在这样的芯片上,除非您可以对足够的硬件独特性进行逆向工程,以便能够使用可以从源代码构建的编译器来构建您自己的内核形式源代码。现在有很多灰色市场的安卓平板电脑陷入了这种困境。

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

于 2012-05-05T20:49:48.163 回答
0

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

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

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

于 2012-05-05T19:05:31.870 回答