2019年8月5日 星期一

[ARM Boot Loader ] code 說明


有個問題請教一下
Linker Start up code那個章節 56分:28秒的那一段
1. For broad com的bootloader,是不是也應該會把vector table copy to RAM 0x00的位置?
2. Power on and Reset 是一樣的嗎? 都會直接執行RAM上面0x00的位置? 還是Power on的時候會從走一次bootloader,然後copy vector table to RAM 0x00.
是會有誰把vector table copy過去才對。但影片中說reset一開始就跑0x00,0x00要有instructions.讓我聽得有點模糊。reset的時候 , RAM的內容都還保留著? 只有Power on and Power on的情況才會重新從bootloader copy vector table to RAM?

 每個系統有其 PowerOn 流程,如從ROM, EEPROM, NOR Flash或特定bootable devcie開機,而這些地方就是要先放好Exception Vector Table的地方,Power on 即觸發ARM Reset Exception , 故立即進行ARM Reset Handler 的工作。而這個Reset 工作的執行 (Stage 1 boot ),是屬於XIP (Excute In Place) ,即boot code是在ROM或Nor Flash 內被執行的。
Reset 工作初始化SDARM, SDRAM  , ROM 分別映射到CPU定址空間的一塊位址, 如SDRAM 位於 0x0, 若啓用CPU virtual address , 舉例 0x8000 (使用CPU virtual) 也是對應到SDRAM 。接著copy 一份完整的boot code 到SDRAM (頭幾行的內容當然也會是Exception Vector )。

將CPU的PC 指向ARM Reset Handler ( Stage 2 boot ) , 而此時的Reset Handler 是在SDRAM內。並且這時候的ARM Reset Handler 和前面一開始開機的ARM Reset 做不一樣的事了。前面ARM reset 可以只作少量的事, 後面的Reset 做更多事, 如驅動裝置,如 UART, LED, 等, 還有準備好OS載入的相關工作。



我想知道一般broadcom的bootloader,不含我們bootloader的流程。到底有沒有copy vector table to RAM 0x00,以及power on/off and reset是否一樣?

ARM Reset時, 做copy o RAM (可參考上課實作的程式碼)

 如果不一樣,是否power on/off, bootloader會重新copy vector table to RAM, 至於reset是用之前已經copy過存留在RAM的vector table.

  

還有一個問題,RAM and ROM share 相同的位置空間嗎? 不同空間 
課程中常提到 0x8000 and 0x0。這個位置 是RAM 還是 ROM。當我拿到一個位置的時候,我怎麼知道他是RAM還是ROM還是某個peripheral?
   
    0x8000 and 0x0 都可以對應到RAM 

   詳看SoC 晶片手冊..一般 memory map 會告訴你address指的是什麼....

    

沒有留言 :

張貼留言