全部博文(92)
分类: 嵌入式
2010-04-04 17:06:15
Bootloader-U-Boot和NOR,NAND flash概论
1.U-Boot 简介
UBoot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。
UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。
2.U-Boot源码目录结构
1. board:开发板相关目录
2. common:通用的命令函数
3. cpu:特定CPU架构相关目录,如arm920t
4. doc:uboot的开发、使用文档
5. drivers:uboot支持的设备驱动程序,比如串口,nandflash,网卡
6. fs: 支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。
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工作模式
Ø 关看门狗
Ø 设置系统时钟
Ø 关MMU,CACHE
Ø 为第二阶段准备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.