<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏
在理解bootloader后,花些時(shí)間重新學(xué)習了開(kāi)源軟件的makefile和相關(guān)腳本之后,自己的u-boot移植工作也比較順利的完成了:

移植環(huán)境:

本文引用地址:http://dyxdggzs.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,原因是手頭沒(méi)辦法燒寫(xiě)nor flash,所以不敢去動(dòng).支持tftp下載各種鏡像文件.

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

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

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

1.設置cpu為svc模式

2.關(guān)閉開(kāi)門(mén)狗和中斷

3.初始化系統時(shí)鐘

4.禁用MMU和Cache

5.初始化sdram控制器

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

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

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

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

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

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

簡(jiǎn)短的分析到這里了,對uboot移植做一個(gè)小結:

首先,要有信心解決移植過(guò)程中遇到的各種問(wèn)題

其次,要具備解決各種問(wèn)題的知識要點(diǎn),大概列舉有makefile,shell腳本,簡(jiǎn)單的正則表達式,編譯鏈接和鏈接腳本的寫(xiě)法,arm體系結構和匯編語(yǔ)言,仔細閱讀相關(guān)的datasheet.

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

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

2.uboot下的網(wǎng)絡(luò )實(shí)現了物理層(DM9000),網(wǎng)絡(luò )層(ICMP),傳輸層(UDP)和應用層(tftp)的具體實(shí)現,以后要深入學(xué)習網(wǎng)絡(luò ),可以從uboot實(shí)現的簡(jiǎn)單網(wǎng)絡(luò )協(xié)議棧入手,再深入到linux下的網(wǎng)絡(luò ).

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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>