久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

內(nèi)存版u-boot制作

 WUCANADA 2013-01-30
內(nèi)存版u-boot制作 2009-06-29 19:31:33

分類: LINUX

       我這里的設(shè)備上,,一般都是在NOR-Flash上跑U-boot,但有時(shí)候?yàn)榱苏{(diào)試等的方便,,要讓u-boot在內(nèi)存中跑,。 Flash版本的u-boot是不能直接在內(nèi)存中跑的(至少我這里的情況是這樣)。

 

       下面,,主要按照我這的情況,,簡單說說內(nèi)存版u-boot的制作。制作出來的u-boot,,可以:

1)用仿真器下載到內(nèi)存中運(yùn)行,;

2)通過設(shè)備中已經(jīng)有的u-boot,用tftp下載到內(nèi)存中,,再用go 0xxxx運(yùn)行,。

 

內(nèi)存版u-boot的制作簡單地說,就是注釋掉不需要運(yùn)行的相關(guān)代碼,,主要是:

1)內(nèi)存,,flash的初始化

2ARM的內(nèi)存重映射

3)相關(guān)時(shí)鐘初始化

 

這里,,我是這樣做的:

修改u-boot-1.0.2/cpu/arm940t/start.S,注釋相關(guān)代碼:

,。,。。,。,。。

reset:

       //bl platformsetup         

/*這里的platformsetup是具體設(shè)備的內(nèi)存,、Flash相關(guān)初始化,;注釋掉這個(gè)步驟,因?yàn)閮?nèi)存版u-boot運(yùn)行時(shí),,內(nèi)存,、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執(zhí)行

,。,。。,。。,。

 

       再注釋board_init函數(shù)中調(diào)用的時(shí)鐘初始化函數(shù)init_clk

void init_clk(void)

{

       icache_disable();

#if 0

       PMUSetFCS(PLL_331776000);

       PMUSetTurboMode(1); // 1: On, 0: Off

       PMUSetPLL3();

#endif

       icache_enable();

} 

 

【轉(zhuǎn)】u-boot 內(nèi)存中調(diào)試的實(shí)現(xiàn)方法

方法產(chǎn)生的原因:

    公司ARM11的板子需要移植yaffs2文件系統(tǒng),linux驅(qū)動已移植完成,現(xiàn)需要移植u-boot的yaffs2文件系統(tǒng)燒寫

    u-boot版本1.1.6    linux版本2.6.22   flash AM29LV040B   nand flash 三星256MB

方法產(chǎn)生的經(jīng)過:

     在網(wǎng)上找了幾個(gè)u-boot移植代碼,使用flash燒寫器燒進(jìn)去后都起不來,串口無輸出,而且該產(chǎn)品板并沒有買JATG調(diào)試器,flash燒寫器 是生產(chǎn)部門的,u-boot掛了,總是要打斷燒寫MM的正常工作,十分不好意思.在嘗試危險(xiǎn)的熱插拔后,決定尋找更方便的方法去調(diào)試(熱插拔:公司的 flash芯片并不是直接焊在板子上,而是使用插座.所以我使用兩片flash,總是保留一片正常的flash,在另一片flash掛掉后,使用正常的 flash啟動,然后上電狀態(tài)下?lián)Q上壞的flash用u-boot直接燒寫,這個(gè)和電腦主板的BIOS修復(fù)類似,實(shí)際上該操作十分危險(xiǎn),而且成功率不 高,u-boot總是死機(jī))

方法產(chǎn)生的思路:

    既然linux內(nèi)核可以在內(nèi)存中啟動,為什么u- boot不可以呢,回顧一下u-boot的啟動順序和工作原理,發(fā)現(xiàn)理論上是可行的,u-boot本身就是復(fù)制到內(nèi)存中運(yùn)行的,所以改變u-boot在內(nèi) 存中運(yùn)行的地址,就可以用一個(gè)u-boot啟動另外一個(gè)u-boot.

方法:

    首先將內(nèi)存u- boot的TEXT_BASE改為和flash u-boot不一樣的地址,然后使用tftp將內(nèi)存u-boot下載到其對應(yīng)的地址,go TEXT_BASE,這里我發(fā)現(xiàn)死機(jī)了,第一次嘗試失敗,回顧u-boot的啟動過程,前期有flash to ram的過程,而內(nèi)存的uboot并不需要復(fù)制(雖然代碼有判斷uboot自身是否在內(nèi)存中運(yùn)行).所以我這里參考了編譯好的內(nèi)存u-boot的map, 找到 start_armboot所在內(nèi)存的地址(*.map文件中可以找到),然后go start_armboot,啟動成功,但是nand flash識別錯(cuò)誤,之后我也沒分析其原因,我直接換了go的地址,使用了內(nèi)存搬移后的動作---堆棧初始化stack_setup這個(gè)地址,go之后一 切正常,因?yàn)槭窃趦?nèi)存中啟動,環(huán)境變量使用了默認(rèn)值,但不影響我的調(diào)試,之后的調(diào)試,我發(fā)現(xiàn)是yaffs2的mkyaffs2image這個(gè)程序有 BUG,他沒有生成壞塊標(biāo)志0xff,修bug后,在內(nèi)存中運(yùn)行的u-boot可以正常燒寫yaffs2文件系統(tǒng).

結(jié)束語:

    本文為拋磚引玉,該方法在arm系列平臺應(yīng)該都適用,u-boot內(nèi)存調(diào)試,不僅僅是為了解決移植yaffs2燒寫問題,是提供了開發(fā)u-boot驅(qū)動時(shí)的新方法,既減少了芯片的燒寫次數(shù),而且省去了jtag調(diào)試工具.

文章內(nèi)容為原創(chuàng),轉(zhuǎn)載請注明出處,若有火星之處請見諒,本身也是第一次調(diào)試U-boot

                                           馬桶吸盤

                                于2010年7月26日arm11 u-boot調(diào)試手札

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多