[英]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.