看板 LinuxDev 關於我們 聯絡資訊
日前小弟嘗試將本來在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)