引導加載程序分爲2個階段。第一階段用匯編語言編寫,只加載第二階段,第二階段用C語言編寫。Stage1加載C語言中的代碼到地址0x0500:0,然後跳轉到那裏。 Stage2必須編寫「hello消息」並停止。設置開始地址以執行原始二進制文件
我嘗試不同的方式來起始地址設置爲原始二進制所作:(但沒有奏效)
cc -nostartfiles -nostdlib -c stage2.c
ld -s -T scrptfile.ld stage2.o /* I'm using ld just to set starting address of executable */
objcopy -O binary stage2 stage2.bin /* delete all unuseful data */
鏈接腳本
SECTIONS
{
. = 0x0500;
.text : { *(.text)}
.data : { *(.data)}
.bss : { *(.bss)}
}
也許我objcopy把somethnig是shouldt刪除刪除。
那麼我該如何執行這個stage2.bin呢?
據我所知,使用32位長指令編寫C代碼時,原始二進制只允許16位?
P.S.參數-set-start(objcopy)返回錯誤:無效的bfd目標。這是因爲輸出文件是二進制的?
謝謝你的答案。
你能告訴我們你的鏈接腳本嗎?如果你拆解它,你的代碼看起來合理嗎? – 2012-07-16 23:52:51