基於tiny4412的u-boot移植(一)


作者信息

作者:彭東林

郵箱:pengdonglin137@163.com

QQ: 405728433


平台介紹

開發環境:win7 64位 + VMware11 + Ubuntu14.04 64位

開發板:tiny4412ADK + S700 + 4GB eMMC + 1G DDR3

工具鏈:友善之臂提供的 arm-linux-  (gcc version 4.5.1)

要移植的u-boot版本:u-boot-2015-10

參考u-boot版本:友善之臂提供的 u-boot-2010-12

摘要

本博文簡要分析了移植u-boot-2015-12到tiny4412,采用的是spl的啟動方式,目前可以做到的是進入u-boot的命令終端,如下圖:

image

而且僅僅支持從SD卡啟動,以后會慢慢完善。

移植

要移植u-boot到tiny4412,首先我們需要對這塊板子的啟動方式地址空間分配有清楚的認識。此外,由於剛開始只需要做到進入u-boot的命令行(如上圖),其中至少涉及到了系統時鍾初始化內存初始化以及串口初始化,做到這三點,就為以后的各種工作鋪平了道路。

下面是一些參考資料:

  1. 技術部落 (這個網站對tiny4412的啟動、時鍾、串口以及內存初始化進行了詳細的講解)
  2. 嵌入式Linux系統開發完全手冊_基於4412_上冊.pdf (這個文檔是韋東山寫的,講的也非常好)
  3. Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf (這篇文檔是Samsung的,詳細介紹了這款SOC的啟動)
  4. SEC_Exynos4412_Users Manual_Ver.1.00.00.pdf (這篇文檔也是Samsung的,是exynos4412的用戶手冊,有兩千八百多頁,包含了exynos4412的詳細信息)

下面我簡要說明。

  • exynos4412的地址空間

image

我們需要關注的主要是上面三個。

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

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

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

  • exynos4412的啟動

可以有幾張圖:

image

圖一

圖一中,iROM首先運行,然后根據OM的值判斷從哪個存儲設備加載BL1到iRAM,然后BL1再根據OM的值判斷從哪個存儲設備加載OS到DRAM中。注意:以tiny4412從sdcard啟動為例,iROM固化在SOC內部,BL1是Samsung提供的鏡像文件E4412_N.bl1.bin,OS在這里可以認為是BL2,這部分是u-boot代碼中編譯生成的SPL,BL2是由BL1加載到iRAM中運行的。最后,BL2再根據OM值,從sdcard中將u-boot代碼拷貝到DRAM中。

image

圖二

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

image

圖三

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

關於時鍾、DRAM、串口的初始化請參考上面列出的參考資料。

有了上面的基礎知識,下面開始移植。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM