由于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)。