您的位置 首页 产品

根据Nand Flash的VIVI装载器的剖析与改善

引言在操作系统启动前,要先运行一段程序.这段程序就是BootLoader,即启动装载程序,它相当于PC机上的BIOS。通过这段程序,可以实现硬件设

导言

在操作体系发动前,要先运转一段程序.这段程序便是BootLoader,即发动装载程序,它相当于PC机上的BIOS。通过这段程序,能够完结硬件设备的初始化,树立内存卒问映射等一系列初始化作业,从而将体系的软硬件环境初始化为一个适宜的状况.以便为装载操作体系作好预备。在体系加电或复位后,CPU一般都是从一个预先界说的地址上取指令,而在嵌入式体系中,一般将某种类型的固态存储设备(如ROM、FIash等)映射到此地址处。通过烧写东西把BootLoader的映像烧写到这种固态存储设备上,在体系加电或复位后CPU就能够从这种固态存储设备上取指令履行BootLoader以完结体系的发动。因为在ROM及Flash等存储设备中程序的履行速度与功率不及程序在RAM中的履行速度与功率,因此在嵌入式程序设计中,一般都会有程序复制的操作。所谓程序复制,便是在程序运转进程中,通过软件的办法将周化在ROM或Flash中的程序复制到RAM中,然后再跳转到RAM相应地址持续履行程序。

1 体系硬件渠道及VIVI简介

本试验渠道的处理器选用的是SamSung公司的S3C2410.它是根据ARM920T内核的处理器,片外存储器选用了64MB的SDRAM、32MB的Nand Flash、2MB的Nor Flash及4KB的片上SRAM,其间SDRAM映射到基地址为Ox30000000的存储空间,本试验渠道支撑两种方法发动,即Nand FIash发动和Nor Flash发动,这两种发动方法以跳线方法进行挑选。

VIVI是由韩国Mizi公司开发的一种针对ARM9的BootLoader,支撑S3C2410。与其它的Boot loader比较,它具有简单了解,易于移植等长处。它有两种作业形式:发动加载形式和下载形式。它的发动分为两个阶段,Stage1阶段和Stage2阶段。Stage1首要用汇编言语编写,首要进行与CPU核有关的一些寄存器的装备以及进行一些必要的初始化作业,这部分代码与详细的CPU体系结构依赖性很大。Stage2用一般的C言语编写,用来完结一些初始化作业,如树立内存映射,初始化驱动等,这部分代码会被复制到RAM中履行。本文要研讨和论说的首要在Stage1阶段。

2 Nand Flash发动进程剖析

Nand Flash运用I/O口串行地存取数据,它不映射到存储空间中任何一个BANK区域上.对Nand Flash的渎写操作通过串行数据总线进行传输。Nand Flash以页(page)为单位进行读写,以块(block)为单位进行擦除,本文用到的Nand Flash页(page)巨细为(512+16)Byte,块(block)巨细等于32个页的巨细。每页的最终16Byte不用于存储程序数据,它首要用于存储ECC校验、标志位等信息。对Nand Flash的操作首要是通过向Nand F1ash操控器发送指令来进行的,对不同类型的Nand Flash,其指令有所不同。因为Nand Flash以块(block)为单位进行擦除,以页为单位进行写入,所以擦除与写入的速度都很快。

因为Nand Flash不能芯片内履行,S3C2410有必要供给一种机制支撑从Nand Flash发动。S3C2410供给了这样一种机制,当设置为Nand flash发动时,体系加电或复位后,使能Nand Flash操控器的主动发动形式,Nand Flash中的前4KB代码主动地被复制到坐落CPU内部的称为Steppingstone的SRAM中,这是发动代码的第一次复制,这次复制由硬件主动完结.然后这块SRAM被映射到存储空间中的0x00000000处,CPU从这个地址处开端履行发动代码。

因为CPU内部的SRAM仅有4KB,不能确保整个VIVI都被从Nand Flash中复制到CPU内部的SRAM中,所以这前4KB的代码要确保完结把整个VIVI从Nand Flash复制到履行功率更高的RAM中运转以及程序的跳转使命,此刻从Nand Flash到SDARM的复制进程便是所谓的软件复制。

3 程序复制进程剖析

3.1 VIVI的编译与链接

编泽器对程序的处理要通过预编译阶段、编译阶段、汇编阶段及链接阶段,每个方针文件都有一系列段(section),输入文件的段(section)称为输入段(input section).输出文件的段(section) 则称为输出段(output section)。在VIVI的链接进程中,用到了一个链接脚本文件,它描绘了各个输入文件的各个段(section)怎么映射到输出文件的各个(section)中,并操控输出文件中secrion和符号的内存布局,此内存布局决议了VlVI的运转时域。在此阶段,链接器LD使用链接脚本把各种方针文件和库文件链接起来,偏重定向它们的数据,完结符号解析,最终把一切的方针文件链接成为一个可履行的方针文件,即为可烧写到Flash中的VIVI映像。针对本体系开发板的VIVI链接脚本对原链脚本进行了改善,添加了第<6>行,下文的论说会用到此处的变量vivi end。

<1>SECTIONS{
<2>.=0x33f00000;
<3>.text :{ * (.text)}
<4>.data ALlGN(4) :{ * (.data)}
<5>.bss ALIGN(4):{ * (.bss) * (COMMON)}
<6>vivi_end=.:
<7>}

其间:SECTIONS表明段。第<2>行表明当时地址为0x33f00000,它是text段的开始地址,也是运转时域的开始地址。第<3>行用了通配符*表明一切字符,这儿的意思便是说指定的每个方针文件的text section的内容都放到同一个.text中。第<4>行表明指定的每个方针文件的data section的内容都放到问一个.data中,并且要四字节对齐。每<5>行表明指定的每个方针文件的bss section的内容都放到同一个.bss中,一切的一般符号都放到COMMON中,也要四字节对齐。第<6>行是把当时地址赋值给变量vivi_end,它也是运转时域的末地址。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/254400.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部