日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内存版u-boot制作

發布時間:2024/9/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存版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的初始化

2ARM的內存重映射

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

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的内存版u-boot制作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。