我正在尝试从源代码编译 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
.