警告“[something]”没有 CRC

警告“[something]”没有 CRC

我正在尝试从源代码编译 Linux 内核(https://github.com/UDOOboard/linux_kernel)在 ubuntu 虚拟机上。

当我跑步时:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make modules

我收到一堆警告,例如:

WARNING: "do_sync_read" [fs/nfs/nfs.ko] has no CRC!

这些模块尚未构建。我该如何解决这个问题?

答案1

该线程看起来与您的错误消息相关,标题为:kbuild: bogus 没有 CRC 警告:

# 2004/08/15 11:54:27+02:00 sam@xxxxxxxxxxxxxxxxx 
# kbuild: Bogus "has no CRC" in external module builds
# 
# From: Pavel Roskin <proski@xxxxxxx>
# The recent fixes for the external module build have fixed the major
# breakage, but they left one annoyance unfixed. If CONFIG_MODVERSIONS is
# disabled, a warning is printed for every exported symbol that is has no
# CRC. For instance, I see this when compiling the standalone Orinoco
# driver on Linux 2.6.6-rc3:
# 
# *** Warning: "__orinoco_down" [/usr/local/src/orinoco/spectrum_cs.ko] has
# no CRC!
# *** Warning: "hermes_struct_init" [/usr/local/src/orinoco/spectrum_cs.ko]
# has no CRC!
# *** Warning: "free_orinocodev" [/usr/local/src/orinoco/spectrum_cs.ko] has
# no CRC!
# [further warnings skipped]

从此线程中,如果您搜索“CONFIG_MODVERSIONS linux”,您将最终看到标题为:的页面:内核符号和 CONFIG_MODVERSIONS。该页面摘录:

CONFIG_MODVERSIONS是一个为了让人们的生活更轻松而提出的概念。从本质上讲,它的目的是实现的是,如果您有一个模块,您可以尝试将该模块加载到任何内核中,因为您知道如果该模块的任何内核数据结构、类型或函数被加载,它将无法加载。模块用途已改变。

如果你的内核不是用CONFIG_MODVERSIONS启用后,您将只能加载专门为该内核版本编译的模块以及在未启用 MOVERSIONS 的情况下编译的模块。

但是,如果您的内核是用CONFIG_MODVERSIONS启用后,您将能够加载为同一内核版本编译且 MOVERSIONS 关闭的模块。但是 - 这是重要的部分,伙计们 - 只要模块使用的内核 API 没有改变,您还可以加载打开 MDOVERSIONS 编译的任何模块。

该页面内是这样的:

如果您只要求不导出任何模块的符号,您可以使用EXPORT_NO_SYMBOLS宏。

我会使用这套系统进行构建,因为我认为您不打算将编译后的模块从该系统带到任何其他系统。

笔记:您可以在 .config 文件中或在make menuconfig.

参考

相关内容