<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è) > 電源與新能源 > 設計應用 > U-Boot從NAND Flash啟動(dòng)的實(shí)現

U-Boot從NAND Flash啟動(dòng)的實(shí)現

作者: 時(shí)間:2010-08-05 來(lái)源:網(wǎng)絡(luò ) 收藏

2 支持的代碼修改
2.1 添加 Hash的初始化函數
中關(guān)于 Hash的初始化流程如下:在上電后最先運行的匯編程序cpu\arm920t\start.S中調用start_armboot函數,而star-t_armboot該函數則調用了一系列的關(guān)于設備的初始化函數。這一系列的函數中包含一個(gè)名為nand_init的函數,nand_init就是完成NAND Ha-sh的初始化工作。
在1.1.6版本的的include\linux\mtd\nand.h中定義了nand_chip結構體,該結構體中定義了關(guān)于NAND Hash操作的所有函數,包括讀、寫(xiě)、ECC校驗等,而這些函數在中都有完整編寫(xiě),只是有些個(gè)別函數需要根據自己的要求重新編寫(xiě)。而NAND 初始化的nand_init函數主要任務(wù)就是完成這些需要重新編寫(xiě)的函數和用這些函數連同U-Boot中其他默認函數來(lái)初始化nand_chip結構體。NAND-_init中的board_nand_init函數在U-Boot中并未,顯然需要重新編寫(xiě)的函數就在其內添加。
先在cpu\arm920t\s3c24x0中添加nand.c文件,然后在該文件中所需要的初始化函數。一般只需要重新編寫(xiě)nand_ehip結構體中相對應的hweontrol、dev_ready和select_chip函數。這些函數的構建可參照l(shuí)inux內核2.6版本里的drivers\mtd\nand\s3e2410.e文件來(lái)進(jìn)行編寫(xiě),如內核文件中的s3c2440_nand_hwcontrol,s3c2440_nand_devready,s3c2410nand_select_chip函數,然后將其賦值給nand_chip結構體中對應的函數。


2.2 實(shí)現NAND
由于NAND的自身特點(diǎn),對NAND 的操作不能像對NOR 那樣方便地直接對地址進(jìn)行操作,而是通過(guò)讀寫(xiě)NAND Flash控制器的寄存器來(lái)完成。三星公司的S3C2440自帶NAND Flash控制器,寄存器的地址是從nGCS4的地址開(kāi)始。S3C2440處理器有NOR和NAND兩種模式,當選擇從NAND模式啟動(dòng)時(shí),S3C2440會(huì )把NAND Hash的前4K數據搬運到內部稱(chēng)為Steppingstone的硬件中,同時(shí)把Steppingstone映射到地址0X00處,從而啟動(dòng),啟動(dòng)完成后處理器會(huì )把Steppingstone釋放掉以作為他用。U-Boot的一般大小都上100 K,遠大于4 K,所以實(shí)現從NAND啟動(dòng)的原理就是讓前4K代碼完成基本初始化,重要的是把NAND Flash中的U-Boot代碼復制到SDRAM中,從而跳到SDRAM中去執行。分析可知,S3C2440的該特點(diǎn)為U-Boot從NAND Flash啟動(dòng)提供了可能。本文討論的實(shí)現思路就是依據此原理。
源代碼中有/board/smdk2410/U-boot/lds,該文件是U-Boot代碼的鏈接腳本,有如下代碼:

可以看到Text段也就是程序代碼段,被編譯鏈接到OX00地址處,同時(shí)start.S編譯后的目標文件start.O被放到text段的第一個(gè)文件處,所以start.S就是程序上電運行的第一段代碼,而/cpu/arm920t/start.S這個(gè)匯編文件正是U-Boot的程序代碼入口。因此代碼修改和添加主要在start.S中完成,以此來(lái)保證NAND啟動(dòng)代碼可以在最終程序編譯鏈接所生成的文件的前4K內。
NAND Flash讀寫(xiě)操作比較復雜,匯編實(shí)現較為麻煩,沒(méi)有C語(yǔ)言簡(jiǎn)單容易,因此用C語(yǔ)言實(shí)現對NAND的操作復制工作,最后在start.S中調用編寫(xiě)的C程序即可。



評論


相關(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>