我可以检测我的定制内核是否是使用模块支持构建的吗?

我可以检测我的定制内核是否是使用模块支持构建的吗?

我已经获得了供应商提供的最小 Linux 安装。从对上一个问题的回答中,我发现可以构建带有或不带有模块支持的内核。我有一个需要连接的 CANBUS 设备,该设备附带 .ko 文件形式的驱动程序。我希望能够使用提供的安装脚本来安装它们,但首先我需要知道我的内核是否是使用模块支持构建的 - 我是否可以从命令行检测到这一点?

当我运行时lsmod它不会返回任何内容,所以我知道目前没有 .ko 文件 - 但这是否意味着内核不允许我安装 .ko 文件?

答案1

如果您有一个文件系统,当且仅当内核使用模块支持进行编译时,/proc该文件才存在。/proc/modules如果该文件存在但为空,则您的内核支持模块,但目前尚未加载任何模块。如果该文件不存在,您的内核将无法加载任何模块。

从技术上讲,无需/proc.您可以检查内核二进制文件中是否存在init_module和系统调用。delete_module如果您只有压缩的二进制文件(例如vmlinuzuImage),这可能并不容易。看如何将 vmlinuz 解压缩到 vmlinux?为了vmlinuz。一旦您成功解压了大部分内核,就可以搜索字符串sys_init_module.

请注意,如果支持模块,您将需要额外的文件来编译您自己的模块:内核头文件。这些是 C 头文件 ( *.h),其中一些是在编译内核时生成的(因此您不能只从内核源代码中获取它们)。看内核源代码树包含什么?这与 Linux 内核头文件有关吗?

答案2

大多数发行版都会在某处存储带有内核配置的文本文件。在 Debian 系统上,您可以在/boot/config-<kernel_version>.

然后你可以简单地运行grep该文件:

grep CONFIG_MODULES /boot/config-<kernel_version>

相关内容