Chinaunix首页 | 论坛 | 博客
  • 博客访问: 344915
  • 博文数量: 92
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 960
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-21 19:38
文章分类

全部博文(92)

文章存档

2010年(71)

2009年(21)

我的朋友

分类: 嵌入式

2010-04-04 17:06:15

Bootloader-U-BootNOR,NAND flash概论

1.U-Boot 简介

UBoot是德国DENX小组的开发用于多种嵌入式CPUbootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。

   UBoot除了支持PowerPC系列的处理器外,还能支持MIPS x86ARMNIOSXScale等诸多常用系列的处理器。

 

2.U-Boot源码目录结构

1. board:开发板相关目录

2. common:通用的命令函数
3. cpu
:特定CPU架构相关目录,如arm920t

4. docuboot的开发、使用文档
5. drivers
uboot支持的设备驱动程序,比如串口,nandflash,网卡

6. fs: 支持的文件系统,Uboot现在支持cramfsfatfdosjffs2registerfs

7. include:头文件和开发板配置文件,configs目录下是开发板的配置文件

8. lib_xxxx: 与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。
9. lib_generic:
通用的库函数

10. net:各种网络协议,TFTP协议、NFS协议等。
11. tools
uboot自带的工具

 

 

 

U-Boot第一阶段启动过程

cpu/arm920t/start.s 完成硬件初始化

Ø      设置CPU工作模式

Ø      关看门狗

Ø      设置系统时钟

Ø      MMUCACHE

Ø      为第二阶段准备RAM空间

  (调用board/smdk2410/lowlevel_init.s

Ø      设置堆栈

Ø      跳转到第二阶段代码的C入口点

  lib_arm/board.c  start_armboot( )

 

 

U-Boot第二阶段启动过程

第二阶段代码:lib_arm/board.c中的start_armboot函数

Ø     init_sequence

    初始化CPU,设置系统时钟,初始化定时器,初始化环境参数,初始化串口控制台,检测内存映射

Ø    flash_init: 初始化NORFLASH

Ø    env_relocate: 初始化环境变量

Ø    初始化系统外围设备

Ø    最后调用main_loop command/main.c

 

NOR flash NAND flash概论

NOR FLASH 是容量小,速度快,稳定性好,适合做程序存储器。

NAND FLASH 总容量大,适合做数据存储器是不能从NAND FLASH启动的,NAND FLASH是的读写时序是不能直接有ARM硬件产生的,要读写NAND FLASH是要通过程序来实现的,很明显能看出来的就是NAND FLASH只有8个数据、地址复用的数据地址接口2410/2440可以直接从NAND FLASH启动的,因为它把NAND前面的4K映射到了RAM的空间首先应该先了解Flash ROM的种类

 

NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。

NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。

通俗的说,就是光给地址不行,要先命令,再给地址,才能读到NAND的数据。

而且都是在一个总线完成的。

结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.装载程序只能从mask rom 或者Nor flash.

阅读(1418) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~