版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。uboot步骤U-Boot实验指导书一、获得U-Boot源码我们的光盘中提供了直接从U-Boot的官方网站下载的源代码,版本是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二、建立板级支持包在board目录下,每一块开发板都有一个对应的目录,因此我们需要为我们的开发板建立一个目录,名字叫做up2410,并创建相应的文件:rootvm-devu-boot-1.3.2#cdboard/rootvm-devboard#mkdirup2410rootvm-devboard#cpsmdk2410/*up2410rootvm-devboard#cd./上面的步骤中,我们把smdk2410目录下的所有文件都拷贝到了我们的up2410目录下,因为我们的开发板和smdk2410开发板的配置差不多。每个开发板都有一个自己的配置文件,如smd
3、k2410开发板的配置文件为include/configs/smdk2410.h,我们也需要为我们的开发板建立自己的配置文件。可以直接从smdk2410开发板的配置文件中修改而来。因此我们先把smdk2410的配置文件复制到我们开发板的配置文件当中:rootvm-devu-boot-1.3.2#cpinclude/configs/smdk2410.hinclude/configs/up2410.h然后,修改Makefile,使得可以配置我们的开发板:rootvm-devu-boot-1.3.2#viMakefile在Makefile中找到下面两行:smdk2400_config:unconfi
4、g$(MKCONFIG)$(:_config=)armarm920tsmdk2400NULLs3c24x0紧接这这两行添加如下两行:up2410_config:unconfig$(MKCONFIG)$(:_config=)armarm920tup2410NULLs3c24x0注意第二行开始部分的空白是按TAB键获得的!红色的部分显示了不同处!这样,我们自己的板级支持包就建好了。三、添加代码,支持从NandFlash启动由于我们的开发板上没有NorFlash,只能从NandFlash启动。而U-Boot默认不支持从NandFlash启动,所以需要我们自己添加代码来实现从NandFlash启动。1
5、、修改start.S文件位于cpu/arm920t/目录下的start.S文件是开发板上电后运行的第一段代码,需要在这个文件中添加内容,以支持从NandFlash启动。rootvm-devu-boot-1.3.2#vicpu/arm920t/start.S首先,删掉start.S中的第181行和201行的下面内容:#ifdefCONFIG_AT91RM9200#endif如果有这两句,这两句之间的内容将不会被编译。而我们的开发板需要执行这些内容。然后,找到这一行:#ifndefCONFIG_SKIP_RELOCATE_UBOOT在紧接这这行的下面添加下面几行:#ifdefCONFIG_S3C2
6、410_NAND_BOOTblcopy_myself#else再找到blecopy_loop在它的下面添加一行:#endif做这些工作就是要完成一个简单的功能:如果我们定义了CONFIG_S3C2410_NAND_BOOT这个宏,那么就执行copy_myself这个子程序,否则就执行#else下面的程序。copy_myself这个子程序的功能就是把U-Boot自身的代码从NandFlash拷贝到SDRAM中,需要我们自己实现,U-Boot自身并没有为我们实现。我们把copy_myself也添加在start.S文件中。找到下面的一行:_start_armboot:.wordstart_armbo
7、ot在这一行的下面添加如下的内容:/*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的实现代码,添加完成以后,U-Boot启动时就会执行我们的这段代码,将U-Boot的内容从Flash中拷贝到SDRAM中。这样,start.S这个文件就修改完成了,保存刚才的修改。2、添加nand.c文件在co
9、py_mysel这段程序中,我们调用了nand_read_whole子程序。这个程序是用C程序实现的,我们新建一个文件,board/up2410/nand.c,在这个文件中实现它:#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文件的全部内容。为了使编译的时候能把这个文件编译进去,需要修改相应的Makefile:rootvm-devu-boot-1.3.2#viboard/up2410/Makefile找到这一行:COBJS:=smdk2410.oflash.o把这行的内容改为下面这行:COBJS:=smdk2410.ofla
12、sh.onand.o即在行尾加上了nand.o,这样,编译的时候就会把nand.c编译进去,并进行链接。3、修改up2410.h前面提到,up2410.h是开发板的配置文件。关于nand.c中用到的一些宏或者其他需要定义的,我们都放在up2410.h中。注意,这里只介绍和从Nand启动相关的配置,因为up2410.h中还有很多其他配置,将在后面介绍!rootvm-devu-boot-1.3.2#viinclude/configs/up2410.h光标移动到文件的末尾,在文件的最后一个#endif的前面添加如下内容:#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:这样就进入了D盘,运行如下命令进行烧写:D:sjf2410-s.exe/f:u-boot.bin这样就会启动烧写程序。在烧写程序中需要我们做一些选择,要分别输入三次0,然后才开始真正的烧写,烧写完毕后,输入2推出程序。如下面的内容: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:七、测试U-Boot现在U-Boot已经烧写到开发板上了,可以启动开发板检测是否烧写好。连接好开发板和主机之间的串口、网口,断开开发板的JTAG下载线,启动开发板。如果烧写成功,会在串口终端上出现如下内容:U-
22、Boot1.3.2(Dec52008-10:35:38)DRAM:64MBFlash:512kBNAND:64MiB*Warning-badCRCorNAND,usingdefaultenvironmentIn:serialOut:serialErr:serialHitanykeytostopautoboot:0UP-2410-S#注意上面内容中红色的部分,主要是因为我们没有把环境变脸写入Flash。运行如下命令将环境变量写入Flash中:UP-2410-S#saveenvSavingEnvironmenttoNAND.ErasingNand.WritingtoNand.doneUP-2410
23、-S#运行printenv查看环境变量: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#可以看到我们在up
24、2410.h中定义的环境变量都正确地保存下来了。然后检测网络功能:UP-2410-S#ping35NE2000-eepromESA:08:00:3e:26:0a:5bhost35isaliveUP-2410-S#返回host35isalive,说明网卡已经通了。另外,还可以运行help命令来查看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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度个人教育产品居间合同范本正规范4篇
- 二零二五年度车辆抵押贷款监管协议3篇
- 二零二五版幼儿园幼儿体育活动组织与指导合同4篇
- 建筑装饰设计合同(2篇)
- 工厂劳务合同范本(2篇)
- 全新业务2025年度融资租赁合同3篇
- 2025年度建筑工地挖掘机驾驶员劳动合同范本2篇
- 蘑菇水塔施工方案
- AI医疗应用研究模板
- 二零二五年度绿色环保抹灰材料供应承包合同4篇
- 深圳2024-2025学年度四年级第一学期期末数学试题
- 中考语文复习说话要得体
- 《工商业储能柜技术规范》
- 华中师范大学教育技术学硕士研究生培养方案
- 医院医学伦理委员会章程
- xx单位政务云商用密码应用方案V2.0
- 风浪流耦合作用下锚泊式海上试验平台的水动力特性试验
- 高考英语语法专练定语从句含答案
- 有机农业种植技术操作手册
- 【教案】Unit+5+Fun+Clubs+大单元整体教学设计人教版(2024)七年级英语上册
- 2024-2025学年四年级上册数学人教版期末测评卷(含答案)
评论
0/150
提交评论