Bootloader

ARM Linux --- Bootloader

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

 

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

Linux 中用的最多的就是 u-boot vivi

 

NORFlash with bootloader

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

 

NANDFlash Boot with bootloader

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

( 摘自 S3C2410 用户手册 )

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

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

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

 

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

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

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

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

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

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

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

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

 

启动代码与( vivi u-boot bootloader )联系和区别

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

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

 

开发方式 2 种:

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

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

 

参考资料:

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

http://blog.youkuaiyun.com/josh915/archive/2009/03/27/4030529.aspx

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

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

3)     基于 Nandflash Bootloader 的设计与实现

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

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

http://blog.youkuaiyun.com/huangqiqun/archive/2007/04/15/1565176.aspx

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值