天天看點

實作u-boot在SDRAM中調試

首先,手頭上要有的軟硬體:

1、移植好的uboot(具有tftp和go功能),可選用開發闆配套的,這裡我使用的是自己移植的(比較有成功感)

2、tftp就要有網線,這裡這調試局限,要有網絡,如果沒有,可以使用AXD調試,詳情請看另一文章

3、序列槽線當然要,超級終端也是必須

開始:

1、下載下傳移植好的uboot(不是調試的,是成功的)

可下載下傳到nor也可以nand

2、下載下傳要調試的uboot到記憶體中,需要了解幾個資訊

(1)記憶體的大小:SDRAM:64M(開發闆不同而不同)

了解到記憶體是從30000000開始的,那64M就是3000,0000~3400,0000,這裡有個問題,你uboot從nor或者nand運作時,再經過一系列拷貝之類,就在記憶體中運作,在哪裡運作?就是_TEXT_BASE=33f80000的位置後512K中運作,是以移植如果超過512就要注意,這時可以修改board\開發闆檔案\config.mk那時指定,當然現在不是這問題。現在是什麼問題呢?現在的問題是如果我還是把uboot用tftp下載下傳到33f80000裡可不可以,解決這問題前,還有一個問題,我為什麼下載下傳到33f80000?我們先看一段代碼start.S裡:

***************** CHECK_CODE_POSITION ******************************************/

adr r0, _start  

ldr r1, _TEXT_BASE  

cmp r0, r1    

beq stack_setup

這段代碼是檢測你現在是否運作在RAM中,它怎麼知道?就是看你開始的代碼是不是為text_base的值,如果你移植的不是,那當然會再執行下面的nor或者flash拷貝了

解決上面這問題,重新回到為什麼不下載下傳到33f80000?我們知道,它現在運作在33f80000,如果你再tftp進去,那不是把現在的執行中的代碼都清除了?有什麼後果?當機!!!

是以不能下載下傳到33f80000裡,那麼應該下載下傳到哪裡?我應該是要下載下傳到TEXT_BASE指定的位址裡的,是以我們要執行這樣的操作:修改TEXT_BASE的值!!!

修改\board\開發闆目錄\config.mk

将TEXT_BASE改成33000000這個雖然順便改,但是不能改到别的什麼堆啊什麼棧空間裡,這樣程式也執行不下去,最好的就是修改到後面,面不影響原來的就可以。

(2)還有一個問題,就是底層初始化,底層初始化會将記憶體清空一次的,是以不應該讓它執行,是以在開發闆頭檔案中應該定義:CONFIG_SKIP_LOWLEVEL_INIT

要解決的問題解決了,現在是下載下傳

先打開開發闆,執行移植好的uboot,然後不tftp下載下傳uboot到指定記憶體中33000000,然後執行

go 33000000

就可以運作了!!!

繼續閱讀