uboot步驟備課講稿_第1頁(yè)
uboot步驟備課講稿_第2頁(yè)
uboot步驟備課講稿_第3頁(yè)
uboot步驟備課講稿_第4頁(yè)
uboot步驟備課講稿_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Good is good, but better carries it.精益求精,善益求善。uboot步驟U-Boot實(shí)驗(yàn)指導(dǎo)書(shū)一、獲得U-Boot源碼我們的光盤(pán)中提供了直接從U-Boot的官方網(wǎng)站下載的源代碼,版本是1.3.2.,放在src目錄下。將u-boot-1.3.2.tar.bz2拷貝了工作目錄下,解壓源碼包:rootvm-dev2410-s#pwd/root/2410-srootvm-dev2410-s#cp/mnt/hgfs/e/u-boot-1.3.2.tar.bz2./rootvm-dev2410-s#tarjxvfu-boot-1.3.2.tar.bz2rootvm-dev

2、2410-s#cdu-boot.1.3.2二、建立板級(jí)支持包在board目錄下,每一塊開(kāi)發(fā)板都有一個(gè)對(duì)應(yīng)的目錄,因此我們需要為我們的開(kāi)發(fā)板建立一個(gè)目錄,名字叫做up2410,并創(chuàng)建相應(yīng)的文件:rootvm-devu-boot-1.3.2#cdboard/rootvm-devboard#mkdirup2410rootvm-devboard#cpsmdk2410/*up2410rootvm-devboard#cd./上面的步驟中,我們把smdk2410目錄下的所有文件都拷貝到了我們的up2410目錄下,因?yàn)槲覀兊拈_(kāi)發(fā)板和smdk2410開(kāi)發(fā)板的配置差不多。每個(gè)開(kāi)發(fā)板都有一個(gè)自己的配置文件,如smd

3、k2410開(kāi)發(fā)板的配置文件為include/configs/smdk2410.h,我們也需要為我們的開(kāi)發(fā)板建立自己的配置文件。可以直接從smdk2410開(kāi)發(fā)板的配置文件中修改而來(lái)。因此我們先把smdk2410的配置文件復(fù)制到我們開(kāi)發(fā)板的配置文件當(dāng)中:rootvm-devu-boot-1.3.2#cpinclude/configs/smdk2410.hinclude/configs/up2410.h然后,修改Makefile,使得可以配置我們的開(kāi)發(fā)板:rootvm-devu-boot-1.3.2#viMakefile在Makefile中找到下面兩行:smdk2400_config:unconfi

4、g$(MKCONFIG)$(:_config=)armarm920tsmdk2400NULLs3c24x0緊接這這兩行添加如下兩行:up2410_config:unconfig$(MKCONFIG)$(:_config=)armarm920tup2410NULLs3c24x0注意第二行開(kāi)始部分的空白是按TAB鍵獲得的!紅色的部分顯示了不同處!這樣,我們自己的板級(jí)支持包就建好了。三、添加代碼,支持從NandFlash啟動(dòng)由于我們的開(kāi)發(fā)板上沒(méi)有NorFlash,只能從NandFlash啟動(dòng)。而U-Boot默認(rèn)不支持從NandFlash啟動(dòng),所以需要我們自己添加代碼來(lái)實(shí)現(xiàn)從NandFlash啟動(dòng)。1

5、、修改start.S文件位于cpu/arm920t/目錄下的start.S文件是開(kāi)發(fā)板上電后運(yùn)行的第一段代碼,需要在這個(gè)文件中添加內(nèi)容,以支持從NandFlash啟動(dòng)。rootvm-devu-boot-1.3.2#vicpu/arm920t/start.S首先,刪掉start.S中的第181行和201行的下面內(nèi)容:#ifdefCONFIG_AT91RM9200#endif如果有這兩句,這兩句之間的內(nèi)容將不會(huì)被編譯。而我們的開(kāi)發(fā)板需要執(zhí)行這些內(nèi)容。然后,找到這一行:#ifndefCONFIG_SKIP_RELOCATE_UBOOT在緊接這這行的下面添加下面幾行:#ifdefCONFIG_S3C2

6、410_NAND_BOOTblcopy_myself#else再找到blecopy_loop在它的下面添加一行:#endif做這些工作就是要完成一個(gè)簡(jiǎn)單的功能:如果我們定義了CONFIG_S3C2410_NAND_BOOT這個(gè)宏,那么就執(zhí)行copy_myself這個(gè)子程序,否則就執(zhí)行#else下面的程序。copy_myself這個(gè)子程序的功能就是把U-Boot自身的代碼從NandFlash拷貝到SDRAM中,需要我們自己實(shí)現(xiàn),U-Boot自身并沒(méi)有為我們實(shí)現(xiàn)。我們把copy_myself也添加在start.S文件中。找到下面的一行:_start_armboot:.wordstart_armbo

7、ot在這一行的下面添加如下的內(nèi)容:/*copyu-boottoram*/#ifdefCONFIG_S3C2410_NAND_BOOTcopy_myself:movr10,lrsavereturnaddresstor10ldrsp,DW_STACK_STARTmovfp,#0blNF_Initldrr0,=UBOOT_RAM_BASEmovr1,#0 x0movr2,#0 x30000blnand_read_wholetstr0,#0 x0beqok_nand_read1:b1bok_nand_read:movr0,#0 x00000000ldrr1,=UBOOT_RAM_BASEmovr2,#

8、0 x400go_next:ldrr3,r0,#4ldrr4,r1,#4teqr3,r4bnenotmatchsubsr2,r2,#4beqdone_nand_readbnego_nextnotmatch:1:b1bdone_nand_read:movpc,r10#endifDW_STACK_START:.wordSTACK_BASE+STACK_SIZE-4上面是copy_myself的實(shí)現(xiàn)代碼,添加完成以后,U-Boot啟動(dòng)時(shí)就會(huì)執(zhí)行我們的這段代碼,將U-Boot的內(nèi)容從Flash中拷貝到SDRAM中。這樣,start.S這個(gè)文件就修改完成了,保存剛才的修改。2、添加nand.c文件在co

9、py_mysel這段程序中,我們調(diào)用了nand_read_whole子程序。這個(gè)程序是用C程序?qū)崿F(xiàn)的,我們新建一個(gè)文件,board/up2410/nand.c,在這個(gè)文件中實(shí)現(xiàn)它:#include#include#include#defineTACLS0#defineTWRPH03#defineTWRPH10#defineU32unsignedintexternunsignedlongnand_probe(unsignedlongphysadr);staticvoidNF_Reset(void)inti;NF_nFCE_L();NF_CMD(0 xFF);for(i=0;i10;i+);NF_

10、WAITRB();NF_nFCE_H();voidNF_Init(void)rNFCONF=(115)|(114)|(113)|(112)|(111)|(TACLS8)|(TWRPH04)|(TWRPH10);NF_Reset();intnand_read_whole(unsignedchar*buf,unsignedlongstart_addr,intsize)inti,j;if(start_addr&NAND_BLOCK_MASK)|(size&NAND_BLOCK_MASK)return1;NF_nFCE_L();for(i=0;i10;i+);i=start_addr;while(i9

11、)&0 xff;rNFADDR=(i17)&0 xff;rNFADDR=(i25)&0 xff;NF_WAITRB();for(j=0;jNAND_SECTOR_SIZE;j+,i+)*buf=(rNFDATA&0 xff);buf+;NF_nFCE_H();return0;上面就是nand.c文件的全部?jī)?nèi)容。為了使編譯的時(shí)候能把這個(gè)文件編譯進(jìn)去,需要修改相應(yīng)的Makefile:rootvm-devu-boot-1.3.2#viboard/up2410/Makefile找到這一行:COBJS:=smdk2410.oflash.o把這行的內(nèi)容改為下面這行:COBJS:=smdk2410.ofla

12、sh.onand.o即在行尾加上了nand.o,這樣,編譯的時(shí)候就會(huì)把nand.c編譯進(jìn)去,并進(jìn)行鏈接。3、修改up2410.h前面提到,up2410.h是開(kāi)發(fā)板的配置文件。關(guān)于nand.c中用到的一些宏或者其他需要定義的,我們都放在up2410.h中。注意,這里只介紹和從Nand啟動(dòng)相關(guān)的配置,因?yàn)閡p2410.h中還有很多其他配置,將在后面介紹!rootvm-devu-boot-1.3.2#viinclude/configs/up2410.h光標(biāo)移動(dòng)到文件的末尾,在文件的最后一個(gè)#endif的前面添加如下內(nèi)容:#defineCONFIG_S3C2410_NAND_BOOT1#defineS

13、TACK_BASE0 x33f00000#defineSTACK_SIZE0 x8000#defineUBOOT_RAM_BASE0 x33f80000#defineCFG_NAND_BASE0 x4E000000#defineCFG_MAX_NAND_DEVICE1#defineSECTORSIZE512#defineNAND_SECTOR_SIZESECTORSIZE#defineNAND_BLOCK_MASK(NAND_SECTOR_SIZE-1)#defineADDR_COLUMN1#defineADDR_PAGE2#defineADDR_COLUMN_PAGE3#defineNAND

14、_ChipID_UNKNOWN0 x00#defineNAND_MAX_FLOORS1#defineNAND_MAX_CHIPS1#defineWRITE_NAND_COMMAND(d,adr)dorNFCMD=d;while(0)#defineWRITE_NAND_ADDRESS(d,adr)dorNFADDR=d;while(0)#defineWRITE_NAND(d,adr)dorNFDATA=d;while(0)#defineREAD_NAND(adr)(rNFDATA)#defineNAND_WAIT_READY(nand)while(!(rNFSTAT&(10);#defineNA

15、ND_DISABLE_CE(nand)rNFCONF|=(111);#defineNAND_ENABLE_CE(nand)rNFCONF&=(111);#defineNAND_CTL_CLRALE(nandptr)#defineNAND_CTL_SETALE(nandptr)#defineNAND_CTL_CLRCLE(nandptr)#defineNAND_CTL_SETCLE(nandptr)#defineCONFIG_MTD_NAND_VERIFY_WRITE1#definerNFCONF(*(volatileunsignedint*)0 x4e000000)#definerNFCMD(

16、*(volatileunsignedchar*)0 x4e000004)#definerNFADDR(*(volatileunsignedchar*)0 x4e000008)#definerNFDATA(*(volatileunsignedchar*)0 x4e00000c)#definerNFSTAT(*(volatileunsignedint*)0 x4e000010)#definerNFECC(*(volatileunsignedint*)0 x4e000014)#definerNFECC0(*(volatileunsignedchar*)0 x4e000014)#definerNFEC

17、C1(*(volatileunsignedchar*)0 x4e000015)#definerNFECC2(*(volatileunsignedchar*)0 x4e000016)#defineNF_CMD(cmd)rNFCMD=cmd;#defineNF_ADDR(addr)rNFADDR=addr;#defineNF_nFCE_L()rNFCONF&=(111);#defineNF_nFCE_H()rNFCONF|=(111);#defineNF_RSTECC()rNFCONF|=(112);#defineNF_RDDATA()(rNFDATA)#defineNF_WRDATA(data)

18、rNFDATA=data;#defineNF_WAITRB()while(!(rNFSTAT&(1D:D:這樣就進(jìn)入了D盤(pán),運(yùn)行如下命令進(jìn)行燒寫(xiě):D:sjf2410-s.exe/f:u-boot.bin這樣就會(huì)啟動(dòng)燒寫(xiě)程序。在燒寫(xiě)程序中需要我們做一些選擇,要分別輸入三次0,然后才開(kāi)始真正的燒寫(xiě),燒寫(xiě)完畢后,輸入2推出程序。如下面的內(nèi)容:D:sjf2410-s.exe/f:u-boot.bin+|SECJTAGFLASH(SJF)v0.7|(S3C2410X&SMDK2410B/D)|PROVIDEDBYKENT20050628|kent|+Usage:SJF/f:/d=S3C2410X(ID=

19、0 x0032409d)isdetected.SJFMainMenu0:K9S1208prog1:K9F2808prog2:28F128J3Aprog3:AM29LV800Prog4:MemoryRd/Wr5:ExitSelectthefunctiontotest:0K9S1208NANDFlashJTAGProgrammerK9S1208isdetected.ID=0 xec760:K9S1208Program1:K9S1208PrBlkPage2:ExitSelectthefunctiontotest:0SMC(K9S1208V0M)NANDFlashWritingProgramSourc

20、esize:0h21237hAvailabletargetblocknumber:04095Inputtargetblocknumber:0targetstartblocknumber=0targetsize(0 x4000*n)=0 x24000STATUS:EppppppppppppppppppppppppppppppppEppppppppppppppppppppppppppppppppEppppppppppppppppppppppppppppppppEppppppppppppppppppppppppppppppppEppppppppppppppppppppppppppppppppEppp

21、pppppppppppppppppppppppppppppEppppppppppppppppppppppppppppppppEppppppppppppppppppppppppppppppppEpppppppppppppppppppppppppppppppp0:K9S1208Program1:K9S1208PrBlkPage2:ExitSelectthefunctiontotest:2D:七、測(cè)試U-Boot現(xiàn)在U-Boot已經(jīng)燒寫(xiě)到開(kāi)發(fā)板上了,可以啟動(dòng)開(kāi)發(fā)板檢測(cè)是否燒寫(xiě)好。連接好開(kāi)發(fā)板和主機(jī)之間的串口、網(wǎng)口,斷開(kāi)開(kāi)發(fā)板的JTAG下載線,啟動(dòng)開(kāi)發(fā)板。如果燒寫(xiě)成功,會(huì)在串口終端上出現(xiàn)如下內(nèi)容:U-

22、Boot1.3.2(Dec52008-10:35:38)DRAM:64MBFlash:512kBNAND:64MiB*Warning-badCRCorNAND,usingdefaultenvironmentIn:serialOut:serialErr:serialHitanykeytostopautoboot:0UP-2410-S#注意上面內(nèi)容中紅色的部分,主要是因?yàn)槲覀儧](méi)有把環(huán)境變臉寫(xiě)入Flash。運(yùn)行如下命令將環(huán)境變量寫(xiě)入Flash中:UP-2410-S#saveenvSavingEnvironmenttoNAND.ErasingNand.WritingtoNand.doneUP-2410

23、-S#運(yùn)行printenv查看環(huán)境變量:UP-2410-S#printenvbootargs=root=/dev/mtdblock3init=/linuxrcconsole=ttySAC0,115200bootcmd=tftp;bootmbootdelay=3baudrate=115200ethaddr=08:00:3e:26:0a:5bipaddr=31serverip=32netmask=bootfile=uImagestdin=serialstdout=serialstderr=serialEnvironmentsize:265/16380bytesUP-2410-S#可以看到我們?cè)趗p

24、2410.h中定義的環(huán)境變量都正確地保存下來(lái)了。然后檢測(cè)網(wǎng)絡(luò)功能:UP-2410-S#ping35NE2000-eepromESA:08:00:3e:26:0a:5bhost35isaliveUP-2410-S#返回host35isalive,說(shuō)明網(wǎng)卡已經(jīng)通了。另外,還可以運(yùn)行help命令來(lái)查看U-Boot提供的命令及其作用:UP-2410-S#help?-aliasforhelpautoscr-runscriptfrommemorybase-printorsetaddressoffsetbdinfo-printBoardInfostructureboot-bootdefault,i.e.,r

25、unbootcmdbootd-bootdefault,i.e.,runbootcmdbootelf-BootfromanELFimageinmemorybootm-bootapplicationimagefrommemorybootp-bootimagevianetworkusingBootP/TFTPprotocolbootvx-BootvxWorksfromanELFimagecmp-memorycompareconinfo-printconsoledevicesandinformationcp-memorycopycrc32-checksumcalculationdate-get/set

26、/resetdate&timedcache-enableordisabledatacacheecho-echoargstoconsoleerase-eraseFLASHmemoryflinfo-printFLASHmemoryinformationgo-startapplicationataddressaddrhelp-printonlinehelpicache-enableordisableinstructioncacheiminfo-printheaderinformationforapplicationimageimls-listallimagesfoundinflashitest-returntrue/fal

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論