Linux 内核的模块如此“脆弱”并且需要经常重新编译,这让我有点惊讶。在两台不同的机器(例如不同版本的 gcc)上使用相同的源代码树会产生不与内核(机器 B)一起工作的模块(机器 A)。
如果我不想要臭名昭著的no symbol version for module_layout
错误消息,添加虚拟系统调用显然也需要重新编译。
更令我惊讶的是,在 kernel/ 中添加了一个仅 .c 文件,它不涉及任何 ABI(即一个独立的函数,它不会导出、使用或更新任何内部结构)。
在那个新的 .c 文件中添加一个虚拟文本字符串让所有模块都保持不变。
那么这里的规则和理由到底是什么?(我专注于 x86,32 位架构,如果重要的话)