内存版u-boot制作
我這里的設備上,一般都是在NOR-Flash上跑U-boot,但有時候為了調試等的方便,要讓u-boot在內存中跑。?Flash版本的u-boot是不能直接在內存中跑的(至少我這里的情況是這樣)。
?
???????下面,主要按照我這的情況,簡單說說內存版u-boot的制作。制作出來的u-boot,可以:
1)用仿真器下載到內存中運行;
2)通過設備中已經有的u-boot,用tftp下載到內存中,再用go 0xxxx運行。
?
內存版u-boot的制作簡單地說,就是注釋掉不需要運行的相關代碼,主要是:
1)內存,flash的初始化
2)ARM的內存重映射
3)相關時鐘初始化
?
這里,我是這樣做的:
修改u-boot-1.0.2/cpu/arm940t/start.S,注釋相關代碼:
。。。。。。
reset:
???????//bl platformsetup?????????
/*這里的platformsetup是具體設備的內存、Flash相關初始化;注釋掉這個步驟,因為內存版u-boot運行時,內存、Flash已初始化好。*/
。。。。。。
。。。。。。
clbss_l:
????str???r2, [r0]
???????add??r0, r0, #4
???????cmp?r0, r1
???????bne??clbss_l
???????ldr???pc, _start_armboot
_start_armboot:??????.word start_armboot?????????????//跳到C程序start_armboot執行
。。。。。。
?
???????再注釋board_init函數中調用的時鐘初始化函數init_clk:
void init_clk(void)
{
???????icache_disable();
#if 0
???????PMUSetFCS(PLL_331776000);
???????PMUSetTurboMode(1);?// 1: On, 0: Off
???????PMUSetPLL3();
#endif
???????icache_enable();
}?
【轉】u-boot 內存中調試的實現方法
方法產生的原因:
公司ARM11的板子需要移植yaffs2文件系統,linux驅動已移植完成,現需要移植u-boot的yaffs2文件系統燒寫
u-boot版本1.1.6??? linux版本2.6.22?? flash AM29LV040B?? nand flash 三星256MB
方法產生的經過:
在網上找了幾個u-boot移植代碼,使用flash燒寫器燒進去后都起不來,串口無輸出,而且該產品板并沒有買JATG調試器,flash燒寫器 是生產部門的,u-boot掛了,總是要打斷燒寫MM的正常工作,十分不好意思.在嘗試危險的熱插拔后,決定尋找更方便的方法去調試(熱插拔:公司的 flash芯片并不是直接焊在板子上,而是使用插座.所以我使用兩片flash,總是保留一片正常的flash,在另一片flash掛掉后,使用正常的 flash啟動,然后上電狀態下換上壞的flash用u-boot直接燒寫,這個和電腦主板的BIOS修復類似,實際上該操作十分危險,而且成功率不 高,u-boot總是死機)
方法產生的思路:
既然linux內核可以在內存中啟動,為什么u- boot不可以呢,回顧一下u-boot的啟動順序和工作原理,發現理論上是可行的,u-boot本身就是復制到內存中運行的,所以改變u-boot在內 存中運行的地址,就可以用一個u-boot啟動另外一個u-boot.
方法:
首先將內存u- boot的TEXT_BASE改為和flash u-boot不一樣的地址,然后使用tftp將內存u-boot下載到其對應的地址,go TEXT_BASE,這里我發現死機了,第一次嘗試失敗,回顧u-boot的啟動過程,前期有flash to ram的過程,而內存的uboot并不需要復制(雖然代碼有判斷uboot自身是否在內存中運行).所以我這里參考了編譯好的內存u-boot的map, 找到 start_armboot所在內存的地址(*.map文件中可以找到),然后go start_armboot,啟動成功,但是nand flash識別錯誤,之后我也沒分析其原因,我直接換了go的地址,使用了內存搬移后的動作---堆棧初始化stack_setup這個地址,go之后一 切正常,因為是在內存中啟動,環境變量使用了默認值,但不影響我的調試,之后的調試,我發現是yaffs2的mkyaffs2image這個程序有 BUG,他沒有生成壞塊標志0xff,修bug后,在內存中運行的u-boot可以正常燒寫yaffs2文件系統.
結束語:
本文為拋磚引玉,該方法在arm系列平臺應該都適用,u-boot內存調試,不僅僅是為了解決移植yaffs2燒寫問題,是提供了開發u-boot驅動時的新方法,既減少了芯片的燒寫次數,而且省去了jtag調試工具.
http://www.360doc.com/content/13/0130/04/7775902_263163496.shtml
總結
以上是生活随笔為你收集整理的内存版u-boot制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u-boot命令解释
- 下一篇: u-boot移植第一弹——制作可用的BL