APPLIED 0120-92751
APPLIED0120-92751在操作系统启动前,要先运行一段程序.这段程序就是BootLoader,即启动装载程序,它相当于PC机上的BIOS。通过这段程序,可以实现硬件设备的初始化,建立内存卒问映射等一系列初始化工作,从而将系统的软硬件环境初始化为一个合适的状态.以便为装载操作系统作好准备。在系统加电或复位后,CPU通常都是从一个预先定义的地址上取指令,而在嵌入式系统中,通常将某种类型的固态存储设备(如ROM、FIash等)映射到此地址处。通过烧写工具把BootLoader的映像烧写到这种固态存储设备上,在系统加电或复位后CPU就可以从这种固态存储设备上取指令执行BootLoader以实现系统的启动。由于在ROM及Flash等存储设备中程序的执行速度与效率不及程序在RAM中的执行速度与效率,因此在嵌入式程序设计中,通常都会有程序拷贝的操作。所谓程序拷贝,就是在程序运行过程中,通过软件的方法将周化在ROM或Flash中的程序拷贝到RAM中,然后再跳转到RAM相应地址继续执行程序。1系统硬件平台及VIVI简介本实验平台的处理器采用的是SamSung公司的S3C2410.它是基于AR***20T内核的处理器,片外存储器采用了64MB的SDRAM、32MB的NandFlash、2MB的NorFlash及4KB的片上SRAM,其中SDRAM映射到基地址为Ox30000000的存储空间,本实验平台支持两种方式启动,即NandFIash启动和NorFlash启动,这两种启动方式以跳线方式进行选择。VIVI是由韩国Mizi公司开发的一种针对AR***的BootLoader,支持S3C2410。与其它的Bootloader相比,它具有容易理解,易于移植等优点。它有两种工作模式:启动加载模式和***模式。它的启动分为两个阶段,Stage1阶段和Stage2阶段。Stage1主要用汇编语言编写,主要进行与CPU核有关的一些寄存器的配置以及进行一些必要的初始化工作,这部分代码与具体的CPU体系结构依赖性很大。Stage2用一般的C语言编写,用来实现一些初始化工作,如建立内存映射,初始化驱动等,这部分代码会被拷贝到RAM中执行。本文要研究和论述的主要在Stage1阶段。2NandFlash启动过程分析NandFlash使用I/O口串行地存取数据,它不映射到存储空间中任何一个BANK区域上.对NandFlash的渎写操作通过串行数据总线进行传输。NandFlash以页(page)为单位进行读写,以块(block)为单位进行擦除,本文用到的NandFlash页(page)大小为(512+16)Byte,块(block)大小等于32个页的大小。每页的***后16Byte不用于存储程序数据,它主要用于存储ECC校验、标志位等信息。对NandFlash的操作主要是通过向NandF1ash控制器发送命令来进行的,对不同型号的NandFlash,其命令有所不同。由于NandFlash以块(block)为单位进行擦除,以页为单位进行写入,所以擦除与写入的速度都很快。由于NandFlash不能芯片内执行,S3C2410必须提供一种机制支持从NandFlash启动。S3C2410提供了这样一种机制,当设置为Nandflash启动时,系统加电或复位后,使能NandFlash控制器的自动启动模式,NandFlash中的前4KB代码自动地被拷贝到位于CPU内部的称为Steppingstone的SRAM中,这是启动代码的***次拷贝,这次拷贝由硬件自动完成.然后这块SRAM被映射到存储空间中的000000000处,CPU从这个地址处开始执行启动代码。由于CPU内部的SRAM仅有4KB,不能保证整个VIVI都被从NandFlash中拷贝到CPU内部的SRAM中,所以这前4KB的代码要保证完成把整个VIVI从NandFlash拷贝到执行效率更高的RAM中运行以及程序的跳转任务,此时从NandFlash到SDARM的拷贝过程就是所谓的软件拷贝。3程序拷贝过程分析3.1VIVI的编译与链接编泽器对程序的处理要经过预编译阶段、编译阶段、汇编阶段及链接阶段,每个目标文件都有一系列段(section),输入文件的段(section)称为输入段(inputsection).输出文件的段(section)则称为输出段(outputsection)。在VIVI的链接过程中,用到了一个链接脚本文件,它描述了各个输入文件的各个段(section)如何映射到输出文件的各个(section)中,并控制输出文件中secrion和符号的内存布局,此内存布局决定了VlVI的运行时域。在此阶段,链接器LD利用链接脚本把各种目标文件和库文件链接起来,并重定向它们的数据,完成符号解析,***后把所有的目标文件链接成为一个可执行的目标文件,即为可烧写到Flash中的VIVI映像。针对本系统开发板的VIVI链接脚本对原链脚本进行了改进,添加了第<6>行,下文的论述会用到此处的变量viviend。<1>SECTI***{<2>.=033f00000;<3>.text:{*(.text)}<4>.dataALlGN(4):{*(.data)}<5>.bssALIGN(4):{*(.bss)*(COMMON)}<6>vivi_end=.:<7>}其中:SECTI***表示段。第<2>行表示当前地址为033f00000,它是text段的起始地址,也是运行时域的起始地址。第<3>行用了通配符*表示所有字符,这里的意思就是说指定的每个目标文件的textsection的内容都放到同一个.text中。第<4>行表示指定的每个目标文件的datasection的内容都放到问一个.data中,而且要四字节对齐。每<5>行表示指定的每个目标文件的bsssection的内容都放到同一个.bss中,所有的普通符号都放到COMMON中,也要四字节对齐。第<6>行是把当前地址赋值给变量vivi_end,它也是运行时域的末地址。CI615K013BSE000756R1CI6303BSE011000R1CI630K023BSE011002R1CI6703BHT300017R1CI810B3BSE020520R1CI820-23BSE013202A1CS5123BUR980009R1CS5133BSE000435R1CS513K023BSE004773R1CS513K043BSE055760R1DI6213BHT300012R1DO6103BHT00006R1DO6303BHT300007R1DSAI13357120001-PSDSAI11057120001-DPDSAI1455712001-HADSAI1463BSE007949R1DSAI15557120001-HZDSAI155A3BSE014162R1DSAO11057120001-ATDSAO120A3BSE018293R1DSAX11057120001-PC/5,57120001-PC/6DSAX110A3BSE018291R1DSAX452ABBAdvantOCSDSBB12048980002-ADSBC17357310001-KHDSBC173A3BSE005883R1DSBC1743BSE012211R1DSCS14057520001-EVDSDI11057160001-A/13,57160001-ADSDI110A57160001-AAADSDO12057160001-AKDSDO131ABBAdvantOCSDSDO11057160001-KDSDP15057160001-GFDSDX1803BSE003859R1DSDX180A3BSE018297R1DSDX4525716075-PDSPC45257310303-ADSPU1313BSE000355R1DSRF1863BSE004383R1DSRF1873BSE004985R1DSRF1993BSE019299R1DSSS1713BSE005003R1DSTA00157120001-PXDSTA001B3BSE018316R1DSTA002B3BSE018317R1DSTA13157120001-CVDSTAN0133BNP000177R1DSTA002A3BSE015196R1DSTA002P3BSE018331R1DSTC12057520001-A/2IN5752-1001-E/03DSTC19057520001-ER/1IN5752-1001-BP/01DST***0657520001-DX/1DST***525751017-A/2DSTD10857160001-ABDDSTD120A57160001-UD2668180-99/1DSTD1903BSE004723R1DSTD1973BSE004726R1DSTX1803BUR980025R1GJR5250000R035307KR91BGJR5250200R107SK90R1GJR5250200R0001GJR5250500R510123KT92,RTU510GJR5250800R020207DO90-SGJR5251063P1ABBAdvantOCSGJR5251500R110107MK92GJR5252100R010107KT94GJR5252100***6107KT94GJR5252200R010107DC92,07DC92E,07DC***,07DC92BGJR5252300R010107AC91GJR5252800R010007KT95GJR5252800R020007KT95GJR5253000R016007KT97C3BSC950019R1TK520V0303BSC950055R1TK576V0503BSC950056R1TK576V1153BSC950073R273BSC950098R13BSE016239R1PM510V08AI6203BHT300005R1AO6103BHT300008R13BSE018184R1AX6703BSE000566R1CI520V13BSE012869R1CI5223BSE012790R1CI522AK063BSE018453R1CI5263BSE006085R1CI532V013BSE003826R1CI532V023BSE003827R1CI532V033BSE003828R1CI532V043BSE003829R1CI534V023BSE010700R1CI534V043BSE010702R1CI5413BSE014665R1CI541V13BSE014666R1CI5603BUC98002R0001CI5723BSE017712R1CI6103BHT300003R191GJR5251600R020207AI91C07KP93GJR5253200R11611KGT005200R000323WT90RTU5101SAP111100R0170TB511-ETH1SAP212000R0001TU516TU516A1SAP240000R0001DI5241SAP250000R0001AX522A1SAP250300R0001AI523AI523B41SBP260001R100186AR2301SBP260010R100107KR5107KR51-U3.61SBP260011R100107KR51-P30;07KR51-F121SBP260012R100107KT5107KT51-U3.61SBP260014R100107KR51-A3.61SBP260021R100107CR41-c121SBP260051R1001ICMK14F1-H081SBP260100R1001XI16E1-b10XI16E1-E4.0,XI16E1-D021SBP260101R1001XO08R1;XOO8R1-B041SBP260104R1001XK08F1XK08F1-A3.0XK08F1-A301SBP260105R1001XO16N1-b20XO16N1-C3.01SBP260110R1001XC32L1XC32L1-B4.01SBP260150R1001TC50ABBAdvantOCS1SBP260512R1001ICMK14F1ICMK14F1-I091SVR440621R5200LM012LM012-CXE18RAC200-BPN492897301ABBAdvantOCS200-CICN492897801ABBAdvantOCS200-CIE492897701ABBAdvantOCS200-IB16ABBAdvantOCS200-P***G492898801ABBAdvantOCS)
厦门渤格电气技术有限公司
业务 QQ: 1982497648