Chinaunix首页 | 论坛 | 博客
  • 博客访问: 396611
  • 博文数量: 380
  • 博客积分: 75
  • 博客等级: 民兵
  • 技术积分: 1925
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-05 15:35
文章分类

全部博文(380)

文章存档

2014年(1)

2013年(2)

2012年(19)

2011年(358)

我的朋友

分类:

2011-09-05 18:35:45

原文地址:NOR FLASH的U-Boot 作者:chenxibing008

U-Boot NorBoot


由于NXP基于NAND的U-Boot使用了S1L的一些初始化工作,因此需要把S1L中的初始化工作放到U-Boot中。
修改u-boot.lds,将U-Bootd饿入口地址修改为NOR FLASH的物理地址0xE0000000.

 24 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
 25 OUTPUT_ARCH(arm)
 26 ENTRY(_start)
 27 SECTIONS
 28 {
 29     . = 0xE0000000;        #修改为NOR FLASH的物理地址
 30
 31     . = ALIGN(4);
 32     .text      :
 33     {
 34       cpu/arm926ejs/start.o (.text)
 35       *(.text)
 36     }
 37
 38     . = ALIGN(4);
 39     .rodata : { *(.rodata) }
 40
 41     . = ALIGN(4);
 42     .data : { *(.data) }
 43
 44     . = ALIGN(4);
 45     .got : { *(.got) }
 46
 47     . = .;
 48     __u_boot_cmd_start = .;
 49     .u_boot_cmd : { *(.u_boot_cmd) }
 50     __u_boot_cmd_end = .;
 51
 52     . = ALIGN(4);
 53     __bss_start = .;
 54     .bss (NOLOAD) : { *(.bss) }
 55     _end = .;
 56 }

特别注意,LPC3250芯片,如果要能够基于NOR FLASH启动,必须在NOR FLASH的第一个字写入一个特殊的值,加在异常向量表之前,修改cpu/arm926ejs/start.S文件
 51
 52 .globl _start
 53 _start:
 54     .word 0x13579BD1   /* NOR FLASH BOOT, 16-bit Bus-width */
 55     b   reset
 56     ldr pc, _undefined_instruction
 57     ldr pc, _software_interrupt
 58     ldr pc, _prefetch_abort
 59     ldr pc, _data_abort
 60     ldr pc, _not_used
 61     ldr pc, _irq
 62     ldr pc, _fiq



文件:
include/configs/smartarm3250.h
直接从NOR FLASH启动,则不再需要S1L。可以在这个文件中配置,去掉CFG_BOOT_USES1L的宏定义。
 34 /*
 35  * There are 2 boot options for u-boot on the SmartARM3250 board. Option 1
 36  * or option 2. In either cases, u-boot does not need to be relocated.
 37  *
 38  * Option 1 - define CFG_BOOT_USES1L
 39  * With this option, the S1L loader present in the board initializes the
 40  * system (including SDRAM, MMUs, some MUX states, etc.). U-boot is loaded
 41  * into an already initialized system in SDRAM at address 0x83FC0000 (the
 42  * end of SDRAM in a 64M system). Because most of the system is already
 43  * initialized, system init is not performed again.
 44  *
 45  * Option 2 - undefine CFG_BOOT_USES1L
 46  * With this option, u-boot is the primary boot loader that is loaded and
 47  * started from the Phytec kickstart loader (see documentation with the
 48  * Phytec board for the kickstart loader). In this configuration, u-boot
 49  * loads and runs from RAM at address 0x00000000 and requires complete
 50  * system initialization. The kickstart loader will copy the u-boot image
 51  * from FLASH starting at block 1 into IRAM and start it at address 0x0.
 52  */
 53 #define CFG_BOOT_USES1L
 54
 55 #ifdef CFG_BOOT_USES1L
 56 /*
 57  * Skip low level init of MMU, SDRAM, muxing, etc. if u-boot is loaded
 58  * and executed from S1L
 59  */
 60 #define CONFIG_SKIP_LOWLEVEL_INIT
 61 #endif




文件:
board/zhiyuan/smartarm3250/lowlevelsys_init.c

212 /*
213  * Miscellaneous platform dependent initializations
214  */
215 void phy3250_sys_init(void)
216 {
217     /* Get board information to determine DRAM size and MAC address */
218     phy3250_get_board_info();
219
220 #ifndef CFG_BOOT_USES1L
221     /* Initialize system including clocking, SDRAM, muxing, MMU, etc. */
            //需要在这里进行时钟、SDRAM、MUXING、MMU等初始化。
222     /* TBD stubbed */
223 #endif
224 }

增加NOR FLASH支持:
    在board/zhiyuan/smartarm3250/目录下增加flash.c和flash_common.c两个文件(参考了EPC-8000的U-Boot)。
阅读(240) | 评论(0) | 转发(0) |
0

上一篇:基本内核编译

下一篇:U-Boot for LPC3250

给主人留下些什么吧!~~