2013-03-20 75 views
0

我正在使用32位保護模式內核。我正在嘗試生成其文本區域從0x100000開始的代碼。我發出以下命令:=linux ld -Ttext無法使用正確的組織生成可執行文件

LD -melf_i386 $(OBJS)-o內核-Ttext的0x100000

當我檢查該e_entry是的0x100000所產生的32位ELF文件我的期望。 但是,這不是,這是我的問題,因爲我不知道爲什麼。內核 有一部分寫在nasm中,正在64位linux上編譯,目標是32位ELF。上述ld命令由 生成的實際e_entry值爲0x116D5A。我想知道這是否與編譯器 選項,我需要像-fpic或與nasm生成的代碼不兼容或 也許有ld中的錯誤嗎?有人可以請幫忙。由於

應當指出的是,同時-r選項上面LD爲:= LD -r -melf_i386 $(OBJS)-o內核-Ttext的0x100000

生成輸出,其中e_entry是的0x100000然而,該文件不是可執行文件。 我需要它是一個可執行文件。

回答

0

你有鏈接腳本嗎?最好編寫自己的代碼來覆蓋默認的鏈接器腳本,因爲您希望對輸出進行精細的控制。

這樣的事情,

ENTRY(entry) 

SECTIONS 
{ 
    . = 0x100000; 

    .text : { 
     *(.text) 
    } 
    ... 

以上可以不啓用MMU時使用。

如果您啓用了MMU,那麼以下內容將您的內核鏈接到0xC0000000(3GB),同時仍將其加載到0x100000處。

. = 0xC0100000; 

.text : AT(0x100000) { 
    *(.text) 
}