繁体   English   中英

内核编译期间出现奇怪的错误

[英]Strange error during kernel compilation

我编辑了2.6.32.65 linux内核的某些部分并进行了编译。 内核可以正常编译并正常生成bzImage。 但是,制造商将继续如下:

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

首先,在构建内核模块时会遇到错误,这些模块是独立于主内核映像生成的,因此模块中的错误将停止编译,但仍会为您提供bzImage。

另外,随意浏览内核2.6.32.65表示mm / page_alloc.c中不存在变量external_page_start和command_space_start。

https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/mm/page_alloc.c?id=refs/tags/v2.6.32.65

但是,您还没有告诉我们您所做的修改,这些变量是您添加的吗?

无论如何,包括在其中定义了这些变量的正确的头文件,都将停止未定义的变量错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM