原创 ARM Linux学习笔记3:Bootloader

2009-7-21 23:22 5133 7 7 分类: MCU/ 嵌入式

ARM Linux学习笔记3Bootloader<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


Bootloader的概念就是一个用于引导的loader,在系统上电的时候最先被运行,然后对硬件平台做最基本的初始化,最后把操作系统加载起来。不同的嵌入式操作系统都有自己的Bootloader,但是本质功能都是一样的。


 


WinCE中用的最多的就是EBOOT,是一个基于网络的Bootloader,而且可以根据需要带有命令行菜单功能,网络调试功能以及文件系统的相关功能。


Linux中用的最多的就是u-bootvivi


 


NORFlash with bootloader


一般ARM处理器的片选0都会接有NORFlash,这样在ARM上电以后,会从0地址开始执行程序,也就是从NORFlash0地址开始执行。所以把bootloader烧到NORFlash0地址开始的地方,这样在上电以后,bootloader开始执行,可以在NORFlash里面执行,也可以自拷贝到SDRAM中执行。最后加载image并运行。


 


NANDFlash Boot with bootloader


由于NORFlash容量小,价格贵,现在很多ARM处理器支持NandFlash引导。不同厂家的处理器对Nandflash的引导略有区别,具体要看datasheet


(摘自S<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3C2410用户手册)


S3C2410/S3C2440支持使用NAND来进行启动,但是启动代码并不是直接在NAND中执行的。在S3C2410/S3C2440中有一块名为Steppingstone,大小为4KBSRAM。复位后,启动代码先从NAND FLASH的前4KB复制到Steppingstone,再从Steppingstone中执行以完成启动。具体过程:

1.
复位;
2. NAND FLASH
的前4KB被复制到Steppingstone中;
3. Steppingstone
被映射到nGCS0
4. CPU
Steppingstone中执行启动代码。

   
在复制NAND FLASH的前4KBSteppingstone的过程中,ECC不会被检查,这就必须保证所用NAND的前4KB没有坏位。如果使用三星的NAND FLASH,这一点是完全可以保证的,三星NAND FLASHBlock0是没有坏位的,访问时不用进行错误校验。使用其他品牌的NAND FLASH要看数据手册,确认其Block0在出厂时保证无错,方可与S3C2410/S3C2440配合使用,进行NAND方式的启动。


 


具体可以参考下面一篇文章:


Nand Flash启动U-BOOT的基本原理


http://hi.baidu.com/zengzhaonong/blog/item/4b901ee9b5ef343cb90e2d16.html


-------------------------------------------
4K的问题


如果S3C2410被配置成从Nand Flash启动 S3C2410Nand Flash控制器有一个特殊的功能,S3C2410上电后,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部RAM,并把0x00000000设置内部RAM的起始地址,CPU从内部RAM0x00000000位置开始启动。这个过程不需要程序干涉。   


程序员需要完成的工作,是把最核心的启动程序放在Nand Flash的前4K中。
启动程序的安排


由于Nand Flash控制器从Nand Flash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K,我们必须完成S3C2410的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行。
   u-boot
源码不支持从nand flash启动,可是s3c2410支持从nand flash启动,开发板(sbc-2410x)加电后s3c2410nand flash的前4k(保存有u-boot的部分功能--拷贝功能--nand flash中的内容拷贝到SDRAM)拷贝到sram(s3c2410芯片内的sram)。这就需要修改u-boot源码,增加u-boot的功能: 使u-boot在得到执行权后能够将其自身拷贝到开发板上SDRAM中,以便处理器能够执行u-boot


-------------------------------------------


 


启动代码与(viviu-bootbootloader)联系和区别


INIT.S,就是一个程序的开始部分,用来初始化板子。


VIVIU-BOOT本身肯定也是包括板子的初始化代码的。VIVIU-BOOT都是bootloader的一种。VIVI是专门针对2410设计的。而U-BOOT是比较通用的,可以通过修改配置用到不同的硬件平台上去。BOOTLOADER的作用一般是用来调试,烧写FLASH,装载操作系统镜像,或者用来装载用户程序。


 


开发方式2种:


一种是直接在板子上构建自己的程序,开发类似于单片机,对已板子初始化用INIT.S


另外一种是移植操作系统,linuxvxworkswince等嵌入式操作系统。然后在操作系统平台上进一步的开发。为了装载操作系统金额用户程序,因此需要bootloader


 


参考资料:


1)     norflsh nandflash之类的存储设备启动bootloader概述 - josh915的专栏 - CSDN博客


http://blog.csdn.net/josh915/archive/2009/03/27/4030529.aspx


2)     Bootloader介绍 - 嵌入式开发 – cqlouis


http://blog.chinaunix.net/u3/94968/showart_1928756.html


3)     基于NandflashBootloader的设计与实现


http://www.chinaeda.cn/show.aspx?id=12937&cid=60


4)     BootLoader的基本概念 - 黄起群的专栏 - CSDN博客


http://blog.csdn.net/huangqiqun/archive/2007/04/15/1565176.aspx


5)     Nand-Flash/Nor-Flash存储模块设计--山野村夫


http://blog.eccn.com/u/luogongqiang/archives/2007/242.htm

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条