gpt4 book ai didi

c - 内核编译期间的奇怪错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:54 25 4
gpt4 key购买 nike

我编辑了 2.6.32.65 linux 内核的一些部分并编译了它。内核编译得很好并正常生成 bzImage。然而 make 然后继续如下:

Kernel: arch/x86/boot/bzImage is ready.  (#170)
Building modules, stage 2.
MODPOST 2414 modules.
ERROR: "external_page_start" [fs/cachefiles/cachefiles.ko] undefined!
ERROR: "variable_hash_start" [fs/cachefiles/cachefiles.ko] undefined!

不过这有两个问题。首先,这些变量在头文件include/linux/stthash.h中定义如下:

extern unsigned long fixed_hash_start;
extern unsigned long variable_hash_start;
extern unsigned long external_page_start;
extern unsigned long command_space_start;

mm/page_alloc.c中,它们的定义如下:

unsigned long fixed_hash_start;
unsigned long variable_hash_start;
unsigned long external_page_start;
unsigned long command_space_start;

然后根据需要为它们分配变量。他们确实通过了编译并创建了 bzImage,所以我不知道这有什么问题。

第二个问题是 variable_hash_start 没有在 fs/cachefiles 中的任何文件中使用,只有 external_page_start 被访问(读取自,未写入)在 fs/cachefiles/rdrw.c 中。

我不知道是什么导致了这个错误,我猜测变量在 cachefiles.ko 中没有正确链接,但我不知道如何解决这个问题。有帮助吗?

最佳答案

默认情况下,Linux 内核的动态模块无法访问内核中的全局变量和函数(头文件中的函数除外)。您需要专门为模块导出它。

EXPORT_SYMBOL 宏是最常用的一个。您还可以通过使用 EXPORT_SYMBOL_GPL 导出变量和函数来限制仅 GPL 模块访问您的变量和函数。

详情: http://tuxthink.blogspot.in/2011/07/exporting-symbols-from-module.html

关于c - 内核编译期间的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com