U-boot分析与移植(1)----bootloader分析

原创 2012年03月27日 19:27:31

 一、Boot Loader 概念

就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,他就是所谓的引导加载程序(Boot Loader)。

嵌入式软件在Flash存储器中的分布图

 

二、为什么需要BootLoader?

BootLoader的终极任务是引导操作系统,所谓引导操作系统,就是启动内核,在启动内核之前所需要的环境(如初始化sdram,设置cpu模式等,下面会介绍)都是由BootLoader来完成的。试想一下,如果你要启动内核,让内核在内存上跑,但连sdram都没有初始化,这显然不行。在s3c2440中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的Boot Loader 程序。在x86的PC机上,Boot Loader = BIOS + GRUB/LILO。

三、BootLoader的选择

些人误认为BootLoader=U-Boot,其实BootLoader只是所有引导加载程序中的一个总称。

四、启动过程

   S3C2440 支持两种方式的启动:Nor Flash 启动和Nand Flash 启动。Nor Flash 和Nand Flash 都是非易失性存储器,Nor Flash 的特点是芯片内执行和不能直接写操作,程序可以直接在其中运行,而不必将程序读取到RAM 中运行。Nor Flash 虽然具有这个优点,但是它的性价比远低于Nand Flash,因而很多系统采用Nand Flash 启动。Nand Flash 的特点是采用非线性存储模式,程序无法在其中运行,它只能作为程序或数据的存储载体,存储在其中的程序只能先拷贝到RAM 中才能运行。

  从Nor Flash 启动时,与nGCS0 相连的Nor Flash 就被映射到nGCS0 片选的空间,其地址被映射为0x00000000;从Nand Flash 启动时,S3C2440 芯片内部自带的一块容量为4K 的被称为“Steppingstone”(“起步阶石”)的BootSRAM 被映射到nGCS0 片选的空间,其地址被映射为0x00000000。当系统上电或复位时,程序会从0 地址处开始执行,因此我们编写的启动代码要确保存储在0 地址处。

    当启动方式为Nor Flash 启动时,没有额外需要考虑的问题,因为这种情况下程序在系统启动前就存储在Nor Flash 中,我们只要保证将启动代码保存在Nor Flash 开始的位置即可,系统上电或复位时,0 地址处的启动代码就会被执行。

  在启动方式为Nand Flash 启动的情况下,系统启动前所有的程序存储在Nand Flash 中,系统的启动过程稍微有点复杂:系统上电或复位时,0 地址处为S3C2440 内部自带的BootSRAM,启动前里面没有任何存储内容,启动后S3C2440 先通过硬件机制将Nand Flash 前4K 的内容拷贝至其中,然后再运行里面的程序(从0 地址处)。这种情况下我们需要保证将启动代码保存在Nand Flash 开始的位置,并且启动代码的大小要小于4K。这就是我们的裸机程序为什么在nandflash能跑的原因。

  我们用的bootloader一般大于4k,所以,我们把用汇编编写的在sram里面执行的过程称为stage1,实现最关键的初始化后,把bootloader代码从nandflash拷贝到sdram里。此时在sdram里实现stage2,做更具体的初始化,最后启动内核,这个阶段一般用c语言来编写。

 

Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序):

  • 硬件设备初始化(关看门狗,关中断,设置cpu时钟,初始化sdram,关闭 CPU 内部指令/数据 cache)。
  • 为加载 Boot Loader 的 stage2 准备 RAM 空间。
  • 拷贝 Boot Loader 的 stage2 到 RAM 空间中。
  • 设置好堆栈。
  • 跳转到 stage2 的 C 入口点。

Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序):

  • 初始化本阶段要使用到的硬件设备。
  • 检测系统内存映射(memory map)。
  • 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。
  • 为内核设置启动参数。
  • 调用内核。

u-boot的源码的注释已经很详细,仔细看看,肯定能看懂的。

更详细的文章

嵌入式系统 Boot Loader 技术内幕

http://www.ibm.com/developerworks/cn/linux/l-btloader/


U-boot分析与移植(1)----bootloader分析

一、Boot Loader 概念 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调...
  • qiongfang2008
  • qiongfang2008
  • 2014年01月02日 17:24
  • 378

U-boot分析与移植(1)----bootloader分析

一、Boot Loader 概念 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操...
  • wuchengsai110
  • wuchengsai110
  • 2014年03月05日 23:26
  • 236

u-boot分析和移植(1) bootloader分析

本文来自:http://blog.csdn.net/jianchi88/article/details/7061089,写的很好,在此对原作者表示感谢! 一、Boot Loader 概念 就是在操...
  • dddd0216
  • dddd0216
  • 2016年04月12日 16:29
  • 162

u-boot-2016.09移植(2)-uboot启动简易分析

不管什么版本的uboot都是在arch/arm/cpu/u-boot-spl.lds和arch/arm/cpu/u-boot.lds中制定了入口函数ENTRY(_start),u-boot-2016....
  • keyue123
  • keyue123
  • 2016年11月06日 19:09
  • 840

U-BOOT-2016.07移植 (第二篇) 添加单板

U-BOOT-201607移植 第二篇 添加单板 1. 在board中创建单板目录 2. 创建单板相关头文件 3. 创建defconfig文件 4. 修改arch/arm/Kconfig文件 5. 尝...
  • funkunho
  • funkunho
  • 2016年09月08日 01:46
  • 2251

(二)U-boot在开发板上移植过程详解--bootloader架构分析

http://www.cnblogs.com/hanyan225/archive/2011/05/23/2054076.html  本例中采用的同样是前边一贯的实验板,这里就不对板子资源做进一步介绍...
  • u013256622
  • u013256622
  • 2015年01月15日 16:15
  • 1379

Bootloader及u-boot简介

Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统等。Bootloade...
  • md521
  • md521
  • 2010年11月07日 10:05
  • 2388

U-BOOT-2016.07移植 (第一篇) 初步分析

U-BOOT-2016.07移植 (第一篇) 初步分析 U-BOOT-2016.07移植 (第二篇) 添加单板 U-BOOT-2016.07移植 (第三篇) 代码重定位 U-BOOT...
  • RRR_obben
  • RRR_obben
  • 2017年04月14日 20:59
  • 349

mini2440系统移植篇之u-boot分析

1. Bootloader概念 系统上电后,需要一段程序来初始化重要的硬件,有些程序是固化在固件firmwware上的,如PC的BIOS。然后是Bootloader,如PC上的GRUB。对于嵌入式系统...
  • HYQ458941968
  • HYQ458941968
  • 2015年05月04日 22:10
  • 530

U-boot分析与移植(5)----U-boot移植

网上很多很好很详细的手册可以参考如: mini2440之U-boot移植详细手册-20100419.pdf 移植u-boot-1.1.6到TQ2440文档.pdf 移植u-boot-1.3.4到...
  • wuchengsai110
  • wuchengsai110
  • 2014年03月05日 23:37
  • 271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:U-boot分析与移植(1)----bootloader分析
举报原因:
原因补充:

(最多只允许输入30个字)