S3C6410嵌入式應用平臺構建(二)

【2014-4/11~4/14】通過以前的實驗,對Uboot已經有了大致的瞭解,前咱們已經把led燈給點亮,但這不是咱們的根本目的,咱們是要進入boot啓動,通過兩天的分析代碼和反覆的實驗,終於能夠進入正常的uboot啓動了。linux

         接下來,咱們看看關閉MMU,至於爲何要關閉MMU,網上你們都說的很清楚,我就再也不重述,但關於關閉MMU有以下代碼:函數


      我嘗試不去註釋掉if0的內容,可是連燈都亮不起來,我不是太清楚這是問什麼,反正mcr p15, 0, r0, c1, c0, 0將MMU關閉清楚就好了。this

      接下來就進入bl    lowlevel_init        /* go setup pll,mux,memory */,進行系統時鐘,nandflash控制器,ddr內存控制室,led等簡單的 初始化。spa

     接下來也是大多數移植過程當中須要改的地方了:指針

     重定位代碼->從nandflash複製到DDR中並執行!code

     我本身寫的代碼以下:blog


     首先比較r0,r1, 你們能夠用反彙編來看看代碼執行過程(反彙編生成方法爲:arm-linux-objdump –D uboot > uboot.dis),反彙編後發現,內存

r0 存放的是程序當前指令地址,即r0 =0,而r1 = 0x57e00000,所以須要重定位。而關鍵在於,我想經過r0,r1來把代碼的起始地址和終止地址傳入nandcopy2ram函數,這樣就靈活了,可是奇怪的是,傳參並傳不進去,會致使啓動不來,後來咱們把這些零零碎碎的判斷啊,重定位什麼的都不要了,就兩句代碼:設置棧指針,跳入c函數的copy_nand2ram ,而copy_nand2ram 函數複製uboot代碼大小固定死了,爲0x3c000,結果燒進去,咦!終於看到但願,終於起來了!!!!文檔

甚是高興,後來咱們又改回r0,r1來傳參,仍是不行,算了,這確定是由某個緣由致使的。get

      咱們對於彙編指令不是特別熟悉,特別是adr,ldr,還有ldr, =XXX、tst,beq, bnq這些指令太陌生了。後面須要去深刻理解。

     我同窗的這個想法很好,什麼都不用作,咱們最終的結果不就是去nandflash複製到ram嘛,乾脆用如下兩句:


    有時咱們爲了達到目的,確實能夠去簡化過程,達到目的後再來添加詳細過程和步驟。今天總算有點進展了,加油!!!

因爲下班回來思路沒有理清,過段時間把思考的過程文檔化寫出來。

相關文章
相關標籤/搜索