【问题标题】:Dynamically load a function while cross compiling in Linux在 Linux 中交叉编译时动态加载函数
【发布时间】:2022-07-20 22:37:42
【问题描述】:

如果我有一个函数在一个 Linux 内核中,而不在其他内核中,我将如何使用相同的源代码为不同的内核编译?

例如,如果functionA 是两个内核都支持的旧函数,但functionB 仅在较新的内核中受支持,我想在支持它的系统上使用functionB,我该怎么做只有一段代码?

有没有办法通过名称functionB动态尝试加载函数,如果失败,继续动态加载functionA

【问题讨论】:

    标签: linux dynamic linux-kernel cross-compiling


    【解决方案1】:

    您只能为特定内核版本编译模块,其他内核将拒绝加载它。因此,您需要为需要支持的每个内核版本编译一次,因此您可以简单地使用编译时宏,例如 LINUX_VERSION_CODEKERNEL_VERSION()

    static void do_something(void)
    {
    #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0)
            functionB();
    #else
            functionA();
    #endif
    }
    

    此外,请确保检查 functionB() 是否在某个 CONFIG_ 选项的后面:在这种情况下,您还希望将所有内容包装在 #ifdef CONFIG_THAT_ENABLES_FUNCTION_B 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      相关资源
      最近更新 更多