[英]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。
但是,您还没有告诉我们您所做的修改,这些变量是您添加的吗?
无论如何,包括在其中定义了这些变量的正确的头文件,都将停止未定义的变量错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.