mini2440及其他类型的开发板一般都有从nand flash和nor flash发动两种方法,那么这两种发动方法有什么差异呢,初学者一般都会一头雾水。下面就讲讲这两种发动方法的差异。
mini2440的nand flash128M,而nor flash只要2M,体系的bootloader一般很小,只要200多KB,而作为一个完好的体系,需求bootloader(200KB),kernel(2M),rootfs(100M),这些加起来就有100多M了,这三个部分需求一向存在体系中,掉电非易失,当然就不能放在内存(SDRAM)中了,需求放在非易失存储器nandflash中,norflash由于很小(2M)只能够包容的下bootloader,所以mini2440的nandflash中寄存bootloader(200KB),kernel(2M),rootfs(100M),norflash寄存bootloader。因而mini2440既能够从nandflash发动也能够从norflash发动,可是运转操作体系的话只能从nandflash发动,从nand flash发动的时分整个操作体系也并不是在nand flash中运转,而是映射到内存SDRAM中运转。值得注意的是,在norflash发动形式下进入bootloader菜单项,能够经过DNW下载程序或文件到nandflash中,也能够把nandflash中的东西上传到PC机,而并不是只能在norflash和PC机之间传送文件和程序等。
S3C2440的发动时读取的第一条指令是在0x00上,分红nandflash和norflash上发动。
norflash有自己的地址线和数据线,能够选用类似于memory的随机拜访方法,在norflash上能够直接运转程序,所以norflash能够直接用来做boot,选用norflash发动的时分会把地址映射到0x00上。mini2440便是直接把vivi直接烧录在norflash上。
nandflash是IO设备,数据、地址、操控线都是共用的,需求软件区操控读取时序,所以不能像norflash、内存相同随机拜访,不能EIP(片上运转),因而不能直接作为boot。
S3C2440把bootloader烧到nandflash上发动,由于在S3C2440里有一个内置的SRAM,叫做steppingstone(垫脚石,很形象…),体系发动加电后,会把nandflash上的开始4KB的内容拷贝到SRAM里履行,这样就完成了从nandflash发动。假如bootloader小于4KB的话(像vboot),在SRAM里就能boot,大于4KB的话(u-boot,vivi),在SRAM里做一些根本初始化后,再把bootloader的剩下部分拷贝到SDRAM里(>0x30000000)。
//=================================================================//注:bootloader是在操作体系内核运转之前运转的一段小程序。经过这段小程序,咱们能够初始化硬件设备、树立内存空间的映射图,从而将体系的软硬件环境带到一个适宜的状况,以便为终究调用操作体系内核准备好正确的环境。一般,bootloader是严重地依赖于硬件而完成的,特别是在嵌入式国际。因而,在嵌入式国际里树立一个通用的bootloader几乎是不可能的。尽管如此,咱们依然能够对BootLoader概括出一些通用的概念来,以辅导用户特定的bootloader规划与完成。
//=================================================================//
咱们运用S3C2440的时分,常常经过norflash发动,进入vivi的菜单(S3C2440的norflash现已烧录好了vivi),之后经过vivi的USB下载功用,把其他的bootloader下载到nandflash里,下载完成后,再经过nandflash发动,测验咱们的bootloader。
norflash合适做代码存储并EIP的,nandflash合适用来作很多数据存储的。
Nandflash发动:nandflash存储器的前4K将被主动加载到Steppingstone(内部SRAM缓冲器),然后体系主动履行这些载入的发动代码,这4K的发动代码需求将nandflash中的内容复制到SDRAM中履行。nandflash的前4K空间放发动代码,SDRAM速度较快,用来履行主程序的代码。
//================================================================//
注:SDRAM(SynchronousDynamicRandomAccessMemory),同步动态随机存储器,同步是指Memory工作需求同步时钟,内部的指令的发送与数据的传输都以它为基准;动态是指存储阵列需求不断的刷新来确保数据不丢掉;随机是指数据不是线性顺次存储,而是自在指定地址进行数据读写。
//=================================================================//
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/255762.html