簡體   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