【问题标题】:Build a linux module without source code构建一个没有源代码的linux模块
【发布时间】:2012-05-14 11:00:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: linux module kernel system opensuse


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      目前尚不清楚您在谈论什么行业。他们为什么使用linux?在哪里 - 在服务器上,在客户端上?作为桌面系统?

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

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多