【问题标题】: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_CODE 和 KERNEL_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 中。