• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > GNU ARM匯編--(十九)u-boot-nand-spl啟動過程分析

    GNU ARM匯編--(十九)u-boot-nand-spl啟動過程分析

    作者: 時間:2016-11-26 來源:網絡 收藏
    在理解bootloader后,花些時間重新學習了開源軟件的makefile和相關腳本之后,自己的u-boot移植工作也比較順利的完成了:

    移植環境:

    本文引用地址:http://www.czjhyjcfj.com/article/201611/321712.htm

    ubuntu 12.04

    U-Boot 2012.07 (Nov 28 2012 - 20:05:48)
    arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2009q1-203) 4.3.3
    GNU ld (Sourcery G++ Lite 2009q1-203) 2.19.51.20090205

    我移植的uboot只支持nand flash,原因是手頭沒辦法燒寫nor flash,所以不敢去動.支持tftp下載各種鏡像文件.

    給出patch下載的地址:http://download.csdn.net/detail/dndxhej/4833784

    因為是采用的nand_spl方式從nand flash啟動,將前面4K的鏡像執行過程和后面252K大小的鏡像執行過程做一個大概的描述性的分析,不想寫的過于具體,因為知道過程后和必備的知識后,如果哪里出了問題,那時候也可以一句一句代碼的查問題.

    前面4K代碼在內部sram中執行的步驟是:

    1.設置cpu為svc模式

    2.關閉開門狗和中斷

    3.初始化系統時鐘

    4.禁用MMU和Cache

    5.初始化sdram控制器

    6.設置sp,跳到剛才提到的nand_boot.c里面的nand_boot函數,這個函數初始化nand的控制器,并將4K之后的u-boot.bin image從nand中load到sdram中,然后跳轉到u-boot.bin image的開始處繼續后續的工作

    后面252K代碼在sdram中執行的步驟是:

    1.依舊是從start.S匯編開始call_board_init_f,設置好sp后跳到arch/arm/lib/board.c中的board_init_f函數

    2.board_init_f完成部分初始化工作后跳轉到匯編寫的relocate_code

    3.relocate_code完成重定位工作后跳轉到board_init_r

    4.board_init_r函數完成后續的初始化工作后跳轉到main_loop,根據延時進入引導os的過程,如果打斷這個過程,就進入uboot的命令行模式

    簡短的分析到這里了,對uboot移植做一個小結:

    首先,要有信心解決移植過程中遇到的各種問題

    其次,要具備解決各種問題的知識要點,大概列舉有makefile,shell腳本,簡單的正則表達式,編譯鏈接和鏈接腳本的寫法,arm體系結構和匯編語言,仔細閱讀相關的datasheet.

    雖然uboot移植成功了,但是uboot作為一款強大的bootloader,還有很多有意思的東西值得我們去學習,比如說:

    1.hush的實現,uboot的命令行模式就是基于hush實現的,linux下的shell也是基于這個的,這個處理還是相當復雜的.

    2.uboot下的網絡實現了物理層(DM9000),網絡層(ICMP),傳輸層(UDP)和應用層(tftp)的具體實現,以后要深入學習網絡,可以從uboot實現的簡單網絡協議棧入手,再深入到linux下的網絡.

    還有很多值得說道的地方,就不詳細說了,路漫漫,但是路在腳下



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 古浪县| 霞浦县| 斗六市| 缙云县| 曲沃县| 星子县| 克什克腾旗| 郓城县| 蓬溪县| 普兰县| 永顺县| 平度市| 炉霍县| 社旗县| 平舆县| 迁安市| 长葛市| 宁化县| 嘉义市| 离岛区| 老河口市| 青河县| 华蓥市| 邻水| 叶城县| 泽库县| 穆棱市| 巨鹿县| 进贤县| 外汇| 瑞丽市| 金寨县| 彰武县| 六盘水市| 巧家县| 延庆县| 彰武县| 无为县| 米易县| 皋兰县| 聂拉木县|