编译代码的modules-only.symvers检查可以去掉吗
时间: 2024-02-06 08:09:08 浏览: 21
在 Linux 内核编译中,modules-only.symvers 是用于检查模块编译时使用的符号表的文件。这个文件包含了内核中所有公开的符号,以及它们对应的版本信息。在编译模块时,需要使用这个文件来检查模块所使用的符号是否与内核中的符号匹配。
如果你想去掉 modules-only.symvers 的检查,可以在内核的 Makefile 中添加以下选项:
```
KBUILD_EXTRA_SYMBOLS :=
```
这个选项告诉内核编译器不要使用 modules-only.symvers 文件进行符号检查。这样做的风险是,编译出来的模块可能无法正确链接到内核中的符号,导致模块无法正常工作或者崩溃。
因此,建议在编译内核模块时保留 modules-only.symvers 的检查,以确保模块能够正确地链接到内核中的符号。
相关问题
出现这个 MODPOST modules-only.symvers ERROR: modpost: missing MODULE_LICENSE() in drivers/gpu/drm/bridge/ti-sn65dsi83.lto.o的解决办法
这个错误提示是因为在编译时缺少了对应模块的许可证信息。可以在模块的源代码文件中添加`MODULE_LICENSE("GPL");`或者`MODULE_LICENSE("Dual BSD/GPL");`等许可证信息。
具体的解决方法可以按照以下步骤:
1. 打开`drivers/gpu/drm/bridge/ti-sn65dsi83.c`文件(可能会有所不同,根据错误提示中的文件路径打开相应的文件)。
2. 在文件顶部的头文件下方添加对应的许可证信息,例如:
```
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/err.h>
#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/of_device.h>
#include <linux/of_gpio.h>
#include <linux/of_irq.h>
MODULE_LICENSE("Dual BSD/GPL");
```
3. 保存文件并重新编译模块即可。
如果还有其他类似的错误提示,也可以按照相同的方法添加许可证信息来解决。
编译make[1]: *** [/home/scm/Nereus/VENDOR_OSS_DIR/kernel_platform/msm-kernel/scripts/Makefile.modpost:158: modules-only.symvers] Error 1报错
这个错误通常是由于内核模块编译过程中出现了问题导致的。建议您检查一下相关模块的编译配置是否正确,以及是否缺少必要的依赖库。您可以尝试运行 `make clean` 命令清除之前的编译结果,然后重新运行 `make` 命令进行编译。如果问题仍然存在,您可以提供更多的错误信息和上下文,这样我才能更好地帮助您解决问题。