tiny4412移植u-boot-2019.01(一)

本文主要參考彭東林大神的博客:https://www.cnblogs.com/pengdonglin137/p/5080309.html

最近打算將最新的u-boot-2019.01移植到tiny4412開發板上。

要移植u-boot到tiny4412上,首先就要對着塊板子的啓動方式、地址空間分配有清楚的認識。看芯片手冊Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf可以瞭解到。Exynos4412的地址空間分佈如下:

上面主要需要關注三個:

iROM:這段地址空間對應exynos4412內部固化的一段程序,exynos啓動的第一條指令就存放在這裏。

iRAM:這段地址空間對應的是exynos4412內部的一個存儲器,這段存儲器特點是一上電就可以使用,不用初始化。

DMC0:這段地址空間就是核心板上的DDR3對應的存儲空間(tiny4412上有1GB的DDR3,因此地址空間爲0x40000000-0x80000000),上電後需要初始化DRAM控制器才能使用。

exynos4412的啓動:

上面意思就是:iROM首先運行,然後根據OM的值判斷從哪個存儲設備加載BL1到iRAM,然後BL1再根據OM的值判斷從哪個存儲設備加載OS到DRAM中。

OM pin Setting 如下:

以tiny4412從sdcard啓動爲例,iROM固化在SOC內部,BL1是Samsung提供的鏡像文件E4412_N.bl1.bin,os這裏可以認爲是BL2,這部分是u-boot中編譯生成的SPL,BL2是BL1加載到iRAM中運行的。最後一,BL2再根據OM值,從SDCARD中將u-boot代碼拷貝到DRAM中。

上圖顯示了,iROM、BL1和BL2的運行地址空間,iRAM的地址空間是0x02020000-0x02060000。由於iROM是隻讀存儲器,所以把iRAM的0x0202000-0x02021400的5kB地址空間分配給iROM用,用於存放iROM的全局變量(ZI/RW,分別存放全局未初始化變量、全局已初始化變量)、局部變量等等。從0x02021400-0x02023400的8KB地址空間屬於BL1,可以認爲BL1的第一條指令就存放在0x02021400地址單元,緊接着的0x02023400-0x02027400的16KB地址空間屬於BL2,即:BL2的第一條指令存放的地址就是0x02023400,這個值很重要,如果我們的SPL中有“非位置無關碼”,那麼就必須將SPL加載到其運行地址處,否則在執行那些非位置無關碼的時候會出錯,我們知道,SPL這段程序是由BL1負責加載到iRAM0x02023400地址處運行的,但是BL1是samsung提供的並沒有源碼,只有二進制鏡像,所以在SPL有“非位置無關碼 的時候”必須將SPL的鏈接地址設置爲0x02023400.

上圖是從sdcard啓動時,程序在sdcard中的佈局,其中sdcard的扇區大小是512B,第0個扇區是保留扇區,從第1到16扇區是共8kB空間存放BL1(也就是E4412_N.bl1.bin),從第17到48扇區的16KB空間用於存放BL2(也就是u-boot-spl.bin)之後的扇區可以根據實際需求自己安排。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章