基於tiny4412的u boot移植(一)

2021-09-08 17:44:31 字數 2487 閱讀 7379

開發環境: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-2015-12到tiny4412,採用的是spl的啟動方式,目前可以做到的是進入u-boot的命令終端,如下圖:

而且僅僅支援從sd卡啟動,以後會慢慢完善。

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

技術部落 (這個**對tiny4412的啟動、時鐘、串列埠以及記憶體初始化進行了詳細的講解)

嵌入式linux系統開發完全手冊_基於4412_上冊.pdf (這個文件是韋東山寫的,講的也非常好)

android_exynos4412_irom_secure_booting_guide_ver.1.00.00.pdf (這篇文件是samsung的,詳細介紹了這款soc的啟動)

sec_exynos4412_users manual_ver.1.00.00.pdf (這篇文件也是samsung的,是exynos4412的使用者手冊,有兩千八百多頁,包含了exynos4412的詳細資訊)

下面我簡要說明。

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

irom:這段位址空間對應exynos4412內部固化的一段程式,exynos4412啟動的第一條指令就存放在這裡。

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

dmc0:這段位址空間就是核心板上的ddr3對應的儲存空間(我的tiny4412有1gb的ddr3,所以位址空間是0x40000000-0x80000000),上電後需要初始化dram控制器才能使用。

可以有幾張圖:

圖一中,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中。

圖二中,顯示了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.

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

關於時鐘、dram、串列埠的初始化請參考上面列出的參考資料。

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

tiny4412 從u boot開始(一)

準備業餘時間把armv7 contex a9 的exynos4412從頭搞一下。之前學了一些簡單的彙編指令,現在開始在uboot啟動後進行裸板測試。原始碼 uboot tiny4412 20130729.tgz 先關閉mmu diff git a board samsung tiny4412 con...

tiny4412看門狗的禁用

看門狗所在位址為0x10060000 看門狗暫存器的最後一位是禁止位,當最後一位為0的時候將禁用看門狗 在arm架構下,資料從記憶體到cpu之間的移動只能通過ldr str指令來完成.而mov只能在暫存器之間移動資料,或者把立即數移動到暫存器中,並且資料的長度不能超過8位 define pwtcon...

Tiny4412 在linux下的dnw使用

將tiny4412的usb線 串列埠線與電腦連線,在win7 虛擬機器ubuntu的環境下,在win7環境中用驅動精靈裝上串列埠的驅動,在虛擬機器中應該就能檢測到串列埠,我這裡採用的是usb轉串列埠驅動,在ubuntu中用lsusb命令可以查詢到是否檢測到串列埠,如下圖 解壓縮,之後會看到dnw l...