日前小弟嘗試將本來在ADS寫好的USB device搬進armboot 1.0.2裡
porting的過程本來還OK,但是開機一跑,卻會遇到start.S
做完準備跳轉到C程式進入點時系統當掉的問題
查了很久,最後反組譯原本的binary與我加入USBD的function之後的binary一比較
才查到問題點: 我發覺有一個變數armboot_end 的值會不正常
,而這個值是用來判斷armboot的結尾,好讓start.S將armboot自己
relocate到RAM上用的,摘錄重點如下:
/*
* Note: armboot_end is defined by the (board-dependent) linker script
*/
.globl _armboot_end
_armboot_end:
.word armboot_end
這個值的定義在linker script裡面,摘錄重點如下:
SECTIONS
{
. = 0x00000000;
. = ALIGN(4);
.text :
{
cpu/arm940t/start.o (.text)
*(.text)
}
. = ALIGN(4);
.rodata : { *(.rodata) }
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
.got : { *(.got) }
. = ALIGN(4);
.bss : { *(.bss) }
armboot_end = .;
}
我的問題是一樣用arm-linux-ld 建立出來的map檔可以正確的認出這個
armboot_end的位置,但是實際反組譯出來start.S裡面看到的卻會是亂七
八糟的值,這個可能會是什麼問題,會是toolchain自己的bug嗎?
toolchain的版本是arm-linux-gcc (GCC) 3.4.4
感謝各位大大了~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.244.105.125
※ 編輯: askacis 來自: 60.244.105.125 (02/05 11:48)