U-Boot从NAND Flash启动的实现
时间:2023-09-29 10:37来源: 作者: 点击: 次摘要:不能从 给应用带来些不便,因此修改使其支持从 。分析了流程的两个阶段及从 启动的原理和思路,并根据NAND Flash的物理结构和存储特点,增加U-Boot对NAND Flash的操作支持,从而完成把存储在NAND Flash上的U-Boot代码复制到SDRAM中执行,从NAND Flash的启动。修改过后的U-Boot可以直接从NAND Flash启动,给应用带来便利。
关键词:U-Boot;NAND Flash;Boofloader;S3C2440;移植
Bootloader引导装载程序是系统上电后运行的第一段程序,其作用是完成基本的硬件初始化工作,所以引导装载程序跟硬件有着紧密的联系。因此必须根据开发板的硬件配置对引导装载程序进行修改才可以使其运行起来。随着嵌入式系统的复杂化,大容量数据存储的NAND Flash的应用会越来越广泛,同时U-Boot是功能最丰富的Bootloader,但遗憾的是U-Boot不支持从NAND Flash启动。所以如果能U-Boot从NAND Flash启动的话将会给应用带来很大的方便。本文讨论修改U-Boot使其支持从NAND Flash启动.采用基于S3C2440的开发板。
1 U-Boot简介及流程分析
U-Boot,全称universal boot loader,是遵循GPL条款的开放源代码项目。可以引导多种操作系统,支持多种架构的CPU。它支持如下操作系统:Linux、NetBSD、VxWorks等,支持如下架构的CPU:PowerPC、MIPS、X86、ARM、NIOS、XSeale等,同时支持NFS挂载,是一个功能丰富的BootLoader。它的整个程序框架清晰,易于移植,许多设计人员将自己的移植代码上传到网站(http://sourceforge.net/project-s/u-boot/) 上,更新速度很快。目前的版本是1.1.6,本论文正是采用此版本进行说明,U-Boot的目录结构参见U-Boot源代码。
要进行U-Boot的修改移植必须了解U-Boot的程序运行流程,这是必要的一步。U-Boot属于两阶段的BootLoader,其启动流程如图l所示。第一阶段的文件为cpu/arm920t/start.S和board/smdk2410/lowlevel_init.S,用ARM汇编语言编写,前者是平台相关的,后者是开发板相关的。第一阶段主要是关于基本硬件的初始化,包括关闭MMU、CACHE、设置PLL时钟比例、关闭看门狗;初始化SDRAM,为复制第二阶段代码做准备,最后复制第二阶段代码到SDRAM中,然后跳到SDRAM中运行第二阶段。第二阶段代码都是用C语言编写的,功能更加复杂。主要是进一步初始化硬件设备、检测内存映射、复制内核镜像和根文件系统到SDRAM以及设置启动参数从而启动内核。