嵌入式BootLoader移植實驗三_第1頁
嵌入式BootLoader移植實驗三_第2頁
嵌入式BootLoader移植實驗三_第3頁
嵌入式BootLoader移植實驗三_第4頁
嵌入式BootLoader移植實驗三_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

合肥學(xué)院嵌入式系統(tǒng)設(shè)計實驗報告(2013-2014第二學(xué)期)專業(yè):實驗項目:實驗三BootLoader移植實驗實驗時間:2014年5月7實驗成員:___指導(dǎo)老師:干開峰電子信息與電氣工程系2014年4月制一、實驗?zāi)康?、熟悉Bootloader工作原理。2、了解U-Boot的代碼結(jié)構(gòu)。3、掌握U-Boot移植過程。二、實驗內(nèi)容本實驗熟悉Bootloader工作原理,了解U-Boot源碼結(jié)構(gòu),基于S3C2440處理器,完成U-Boot移植,并在目標(biāo)開發(fā)板上測試通過。三、移植環(huán)境u-boot版本:u-boot-2011-03Linux平臺:Fedora14交叉編譯工具:arm-linux-gcc-4.3.3arm開發(fā)板:micro2440CPU:S3C2440SDRAM:64M1NorFlash:2MNandFlash:256M網(wǎng)卡:DM9000EP四、實驗過程1、建立Micro2440配置(1)按下圖所示命令解壓u-boot-2011.03-micro2440.tar壓縮包(2)輸入命令:geditboards.cfg打開boards.cfg文件。在boards.cfg中添加一行:micro2440armarm920t-samsungs3c24x0語句。(3)創(chuàng)建板級支持文件輸入命令:cp-rboard/samsung/smdk2410board/samsung/micro2440cdboard/samsung/micro2440/mvsmdk2410.cmicro2440.cgeditMakefile將COBJS:=smdk2410.oflash.o改為COBJS:=micro2440.oflash.o輸入命令:cd../../..cpinclude/configs/smdk2410.hinclude/configs/micro2440.hgeditinclude/configs/micro2440.h修改內(nèi)容一:#defineCONFIG_SYS_PROMPT"[Micro2440]#"/*MonitorCommandPrompt*/修改內(nèi)容二:#defineCONFIG_SYS_SDRAM_BASEPHYS_SDRAM_1#defineCONFIG_SYS_INIT_SP_ADDR(CONFIG_SYS_SDRAM_BASE+0x1000-GENERATED_GBL_DATA_SIZE)(4)測試編譯環(huán)境輸入命令:makemicro2440_config出現(xiàn):Configuringformicro2440board...輸入命令:makeGeneratinginclude/autoconf.mkGeneratinginclude/autoconf.mk.deparm-linux-objcopy-Osrecu-bootu-boot.srecarm-linux-objcopy--gap-fill=0xff-Obinaryu-bootu-boot.bin2、在RAM中運(yùn)行(1)在根目錄下進(jìn)入include/configs文件夾輸入命令:geditmicro2440.h,打開micro2440.h文件。(2)在micro2440.h中刪除:#defineCONFIG_S3C24101/*specificallyaSAMSUNGS3C2410SoC*/#defineCONFIG_SMDK24101/*onaSAMSUNGSMDK2410Board*/添加:#defineCONFIG_S3C24401/*specificallyaSAMSUNGS3C2440SoC*/#defineCONFIG_MICRO2440#defineCONFIG_SKIP_LOWLEVEL_INIT(3)在根目錄下進(jìn)入arch/arm/cpu/arm920t文件夾輸入命令:geditstart.S按下圖所示進(jìn)行修改部分內(nèi)容:(4)在根目錄board/samsung/micro2440下中輸入geditmicro2440.c命令(5)測試在根目錄下輸入命令:make編譯完成后將u-boot.bin下載到SDRAM的0x33f80000地址處,u-boot已經(jīng)能在RAM中運(yùn)行。3、支持DM900(1)在根目錄下打開include/configs文件夾,執(zhí)行g(shù)editmicro2440.h命令刪除:#defineCONFIG_CS8900/*wehaveaCS8900on-board*/添加:#defineCONFIG_CMD_NET#defineCONFIG_DRIVER_DM90001#defineCONFIG_DM9000_NO_SROM1#defineCONFIG_DM9000_BASE0x20000300#defineDM9000_IOCONFIG_DM9000_BASE#defineDM9000_DATA(CONFIG_DM9000_BASE+4)#defineCONFIG_CMD_PING#defineCONFIG_ETHADDR08:00:3e:26:0a:5b//開發(fā)板MAC地址#defineCONFIG_IPADDR26//開發(fā)板IP地址#defineCONFIG_SERVERIP24//主機(jī)IP地址(2)在根目錄下進(jìn)入board/samsung/micro2440文件夾執(zhí)行g(shù)editmicro2440.c命令(3)在根目錄下進(jìn)入arch/arm/lib文件夾執(zhí)行g(shù)editeabi_compat.c命令(4)在根目錄下進(jìn)入drivers/net文件夾執(zhí)行g(shù)editdm9000x.c命令在修改staticintdm9000_init(structeth_device*dev,bd_t*bd)函數(shù)中內(nèi)容,如下圖所示:(5)測試在根目錄下輸入命令:make編譯完成后將u-boot.bin下載到SDRAM的0x33f80000地址處,u-boot已經(jīng)能在RAM中運(yùn)行。測試結(jié)果如下圖所示:4、支持內(nèi)核啟動(1)在根目錄下進(jìn)入include/configs文件夾執(zhí)行g(shù)editmicro2440.h命令添加:#defineCONFIG_SETUP_MEMORY_TAGS1//如果沒有定義這個參數(shù),則uboot參數(shù)必須加入men=內(nèi)存大?。?)在根目錄下進(jìn)入arch/arm/lib文件夾執(zhí)行g(shù)editbootm.c命令在staticvoidannounce_and_cleanup(void)函數(shù)中添加:#ifndefCONFIG_MICRO2440cleanup_before_linux();#endif(3)自動啟動內(nèi)核如果要自動啟動內(nèi)核,需要include/conskfigs/micro2440.h定義CONFIG_BOOTCOMMAND,類似如下內(nèi)容:#defineCONFIG_BOOTCOMMAND"nandread0x300080000x600000x300000;bootm0x30008000"(4)測試在根目錄下輸入命令:make編譯完成后將u-boot.bin下載到SDRAM的0x33f80000地址處,u-boot已經(jīng)能在RAM中運(yùn)行。測試結(jié)果如下圖所示:5、支持NandFlash(1)添加s3c2440_nand.c文件在根目錄下輸入touchdrivers/mtd/nand/s3c2440_nand.c指令進(jìn)行文件的創(chuàng)建,在根目錄下輸入geditdrivers/mtd/nand/s3c2440_nand.c命令打開文件。在DEBUGN("board_nand_init()/n");下面修改如圖所示的三句內(nèi)容:(2)在根目錄下進(jìn)入drivers/mtd/nand文件夾中執(zhí)行g(shù)editMakefile命令添加:#COBJS-$(CONFIG_NAND_S3C2440)+=s3c2440_nand.o如下圖所示:(3)在根目錄下進(jìn)入include/conskfigs文件夾打開micro2440.h文件添加:#defineCONFIG_MTD_DEVICE#defineCONFIG_NAND_S3C2440#defineCONFIG_CMD_NAND#ifdefined(CONFIG_CMD_NAND)#defineCONFIG_SYS_NAND_BASE0x4E000000//Nand配置寄存器基地址#defineCONFIG_SYS_MAX_NAND_DEVICE1#defineCONFIG_MTD_NAND_VERIFY_WRITE1#endif#defineCONFIG_ENV_IS_IN_NAND1#defineCONFIG_ENV_OFFSET0x40000//將環(huán)境變量保存到nand中的0x40000位置#defineCONFIG_ENV_SIZE0x10000/*TotalSizeofEnvironmentSector*/(4)測試在根目錄下輸入命令:make編譯完成后將u-boot.bin下載到SDRAM的0x33f80000地址處,u-boot已經(jīng)能在RAM中運(yùn)行。測試結(jié)果如下圖所示:6、支持yaffs下載(1)在根目錄下進(jìn)入include/conskfigs文件夾執(zhí)行g(shù)editmicro2440.h命令添加:#defineCONFIG_CMD_NAND_YAFFS(2)在根目錄下進(jìn)入drivers/mtd/nand文件夾打開nand_util.c文件修改部分內(nèi)容:if(!need_skip&&!withoob){……}ops.mode=MTD_OOB_RAWrval=nand->write_oob(nand,offset,&ops);if(rval)break;(3)下載yaffs鏡像下載yaffs鏡像的時候要注意分區(qū)的第一塊不能寫,比如友善之臂的默認(rèn)分區(qū)如下:Numberofpartitions:4name:offsetsizeflagvivi:0x000000000x000400000param:0x000400000x000200000kernel:0x000600000x005000000root:0x005600000x3fa800000也就是說yaffs鏡像所在分區(qū)的起始地址在0x560000,因此使用nandwrite.yaffs命令下載yaffs時要寫的地址為0x560000+0x20000(NandFlash每塊的大小)=0x580000,即下載命令類似如下:tftp0x30008000uImagenandwrite.yaffs0x300080000x5800000x3000007、支持NandFlash啟動(1)創(chuàng)建nand_read.c在根目錄下執(zhí)行touchboard/samsung/micro2440/nand_read.c命令,在根目錄下執(zhí)行g(shù)editboard/samsung/micro2440/nand_read.c命令,將下列內(nèi)容復(fù)制到nand_read.c文件中#definerNFCONF(*(volatileunsigned*)0x4E000000)#definerNFCONT(*(volatileunsigned*)0x4E000004)#definerNFCMD(*(volatileunsigned*)0x4E000008)#definerNFADDR(*(volatileunsigned*)0x4E00000C)#definerNFDATA8(*(volatileunsignedchar*)0x4E000010)#definerNFSTAT(*(volatileunsigned*)0x4E000020)#defineCMD_READ10x00/*頁讀命令周期1*/#defineCMD_READ20x30/*頁讀命令周期2*/#defineCMD_RESET0xFF/*復(fù)位*/#defineNF_CMD(cmd){rNFCMD=(cmd);}/*寫命令*/#defineNF_ADDR(addr){rNFADDR=(addr);}/*寫地址*/#defineNF_RDDATA8()(rNFDATA8)/*讀8位數(shù)據(jù)*/#defineNF_nFCE_L(){rNFCONT&=~(1<<1);}/*片選使能*/#defineNF_nFCE_H(){rNFCONT|=(1<<1);}/*片選禁用*/#defineNF_WAITRB(){while(!(rNFSTAT&(1<<1)));}/*等待就緒*/#defineNF_CLEAR_RB(){rNFSTAT|=(1<<2);}/*清除就緒/忙位*/#defineNF_DETECT_RB(){while(!(rNFSTAT&(1<<2)));}/*等待就緒*/#defineTACLS1#defineTWRPH02#defineTWRPH11voiddelay(inti){while(i-->0);}voidNand_Init(void){rNFCONF=(TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<0);rNFCONT=(1<<4)|(1<<1)|(1<<0);}staticvoidNand_Reset(void){NF_nFCE_L();/*片選使能*/NF_CLEAR_RB();/*清除就緒/忙位*/NF_CMD(CMD_RESET);/*寫復(fù)位命令*/NF_DETECT_RB();/*等待就緒*/NF_nFCE_H();/*片選禁用*/}unsignedcharNand_ReadPage(constintpage,unsignedchar*constbuffer){inti;Nand_Reset();NF_nFCE_L();NF_CLEAR_RB();NF_CMD(CMD_READ1);NF_ADDR(0x0);NF_ADDR(0x0);NF_ADDR(page&0xff);NF_ADDR((page>>8)&0xff);NF_ADDR((page>>16)&0xff);NF_CMD(CMD_READ2);NF_DETECT_RB();for(i=0;i<2048;i++){buffer[i]=NF_RDDATA8();}NF_nFCE_H();}intnand_read(intstart_page,intread_pages,unsignedchar*buffer){inti;Nand_Init();for(i=0;i<read_pages;i++){Nand_ReadPage(start_page,buffer+2048*i);start_page++;}return0;}(2)在根目錄下進(jìn)入board/samsung/micro2440文件夾執(zhí)行g(shù)editMakefile命令修改COBJS:=micro2440.oflash.onand_read.o(3)在根目錄下執(zhí)行g(shù)editarch/arm/cpu/arm920t/u-boot.lds命令修改:.text:{arch/arm/cpu/arm920t/start.o(.text)board/samsung/micro2440/libmicro2440.o(.text)*(.text)}(4)在根目錄下執(zhí)行g(shù)editarch/arm/cpu/arm920t/start.S命令添加下面藍(lán)色字體的內(nèi)容,黑色字體用于定位#ifndefCONFIG_SKIP_LOWLEVEL_INITblcpu_init_crit#endif#ifdefCONFIG_S3C2440_NAND_BOOTldrsp,=0x30008000ldrr0,=0x0;ldrr1,_end_ofsmovr1,r1,LSR#11addr1,r1,#1ldrr2,=(CONFIG_SYS_TEXT_BASE)blnand_readldrpc,=relocations#endifcopy_loop:ldmiar0!,{r9-r10}/*copyfromsourceaddress[r0]*/stmiar1!,{r9-r10}/*copytotargetaddress[r1]*/cmpr0,r2/*untilsourceendaddress[r2]*/blocopy_loop#ifdefCONFIG_S3C2440_NAND_BOOTrelocations:ldrr6,=CONFIG_SYS_TEXT_BASE#endif#ifndefCONFIG_PRELOADER/**fix.rel.dynrelocations*/clbss_l:strr2,[r0]/*clearloop...*/addr0,r0,#4cmpr0,r1bneclbss_lblcoloured_LED_initblred_LED_on#endif#ifdefCONFIG_S3C2440_NAND_BOOTldrsp,=(CONFIG_SYS_INIT_SP_ADDR)bicsp,sp,#7/*8-bytealignmentforABIcompliance*/ldrr0,=0x00000000ldrpc,=board_init_f#endif/**Wearedone.Donotreturn,insteadbranchtosecondpartofboard*initialization,nowrunningfromRAM.*/#ifdefCONFIG_NAND_SPL(5)在根目錄下進(jìn)入include/configs文件夾執(zhí)行g(shù)editmicro2440.h命令#defineCONFIG_S3C2440_NAND_BOOT/*#defineCONFIG_SKIP_LOWLEVEL_INIT*/(6)在根目錄下進(jìn)入arch/arm/lib文件夾執(zhí)行g(shù)editboard.c命令修改一下內(nèi)容:voidboard_init_f(ulongbootflag){gd->mon_len=_bss_end_ofs+0x100000;/*why*//*relocate_code(addr_sp,id,addr);*/#ifdefCONFIG_S3C2440_NAND_BOOT/*addbywzc*/__asm____volatile__("movsp,%0"::"r"(addr_sp):"sp");/*addbywzc*/board_init_r(id,addr);#elserelocate_code(addr_sp,id,addr);/*NOTREACHED-relocate_code()doesnotreturn*/#endif}(7)下載到NandFlash將生成的bin文件下載到開發(fā)板就可以NandFlash啟動了。五、實驗小結(jié)本次實驗做的是關(guān)于BootLoader移植,在實驗前的理論課中我們

溫馨提示

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

最新文檔

評論

0/150

提交評論