uboot.2016.03 在mini2440上norfalsh启动
本人有点懒惰,直接在smdk2410的基础上进行修改
(note :红色字体表示修改内容,蓝色字体表示增加内容)
1. 顶层的makefile
在247行 添加如下两条语句 :
ARCH :=arm
CROSS_COMPILE :=arm-linux-
2 修改始终频率
打开 u-boot-2016.03/arch/arm/cpu/arm920t/start.S
第77行 #if defined(CONFIG_S3C2410)
#if defined(CONFIG_S3C2440)
第78行 ldr r1, =0x3ff
ldr r1, =0x7ff
第87行 mov r1, #3 //FCLK :HCLK : PCLK = 1:2:4
mov r1,#5 //FCLK :HCLK : PCLK = 1:4:8
打开 u-boot-2016.03/board/samsung/smdk2410/smdk2410.c
第25行到27行的内容改为 :
25:#define M_MDIV 92
26:#define M_PDIV 1
27:#define M_SDIV 1
本开发板的输入晶振频率为12MHz,通过上面的修改,则MPLL频率为400MHz。
第37行到39行的内容改为:
54:#define U_M_MDIV 56
55:#define U_M_PDIV 2
56:#define U_M_SDIV 2
通过上面的修改,则UPLL频率为48MHz。即为USB的时钟
在board_early_init_f()函数中在给寄存器赋值之前增加如下内容
__asm__( "mrc p15, 0, r1, c1, c0, 0\n"
/* read ctrl register */
"orr r1, r1, #0xc0000000\n"
/* Asynchronous */
"mcr p15, 0, r1, c1, c0, 0\n"
/* write ctrl register */
:::"r1"
);
从S3C2440芯片书册上有说明:
If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous
bus mode using following instructions(S3C2440 does not support synchronous bus mode).
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
3.修改内存SDRAM时序
打开 u-boot-2016.03/board/samsung/smdk2410/lowlevel_init.S
#define B1_BWSCON (DW16)
#define B2_BWSCON (DW16)
#define B3_BWSCON (DW16)
#define B4_BWSCON (DW32)
#define B5_BWSCON (DW16)
#define B6_BWSCON (DW32)
#define B7_BWSCON (DW32)
/* BANK0CON */
#define B0_Tacs 0x3
#define B0_Tcos 0x3
#define B0_Tacc 0x7
#define B0_Tcoh 0x3
#define B0_Tah 0x3
#define B0_Tacp 0x1
#define B0_PMC 0x0
/* BANK1CON */
#define B1_Tacs 0x1
#define B1_Tcos 0x1
#define B1_Tacc 0x6
#define B1_Tcoh 0x1
#define B1_Tah 0x1
#define B1_Tacp 0x0
#define B1_PMC 0x0
#define B2_Tacs 0x1
#define B2_Tcos 0x1
#define B2_Tacc 0x6
#define B2_Tcoh 0x1
#define B2_Tah 0x1
#define B2_Tacp 0x0
#define B2_PMC 0x0
#define B3_Tacs 0x1
#define B3_Tcos 0x1
#define B3_Tacc 0x6
#define B3_Tcoh 0x1
#define B3_Tah 0x1
#define B3_Tacp 0x0
#define B3_PMC 0x0
#define B4_Tacs 0x1
#define B4_Tcos 0x1
#define B4_Tacc 0x6
#define B4_Tcoh 0x1
#define B4_Tah 0x1
#define B4_Tacp 0x0
#define B4_PMC 0x0
#define B5_Tacs 0x1
#define B5_Tcos 0x1
#define B5_Tacc 0x6
#define B5_Tcoh 0x1
#define B5_Tah 0x1
#define B5_Tacp 0x0
#define B5_PMC 0x0
#define B6_MT 0x3
#define B6_Trcd 0x1
#define B6_SCAN 0x1
#define B7_MT 0x3
#define B7_Trcd 0x1
#define B7_SCAN 0x1
/* REFRESH parameter */
#define REFEN 0x1
#define TREFMD 0x0
#define Trp 0x1
#define Trc 0x1
#define Tchr 0x2
#define REFCNT 1268
4. 修改宏定义
打开 u-boot-2016.03/include/configs/smdk2410.h
第21行 #define CONFIG_S3C2410 /* specifically a SAMSUNG S3C2410 SoC*/
#define CONFIG_S3C2440 /* specifically a SAMSUNG S3C2440 SoC */
s3c2410 和s3c2440有些寄存器不同
在27行 增加如下内容
#undef CONFIG_SYS_PROMPT
#define CONFIG_SYS_PROMPT "jetli# " //这个在串口输出 [jetli#] 内容
将定义的CONFIG_SYS_PROMPT释放,然后再定义自己需要的。
第157行“#define CONFIG_FLASH_CFI_LEGACY”改为:
#define CONFIG_SYS_CFI_FLASH_CONFIG_REGS {0xFFFF}
因为在u-boot-2011.06中,使用的是CFI的NorFlash接口,所以不需要定义CONFIG_FLASH_CFI_LEGACY,而是要定义CONFIG_SYS_CFI_FLASH_CONFIG_REGS。
第162行“#define CONFIG_SYS_MAX_FLASH_SECT (19)”改为:
#define CONFIG_SYS_MAX_FLASH_SECT (35)
因为本开发板使用的NorFlash是EN29LV160AB,它有35个扇区。
第164行“#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x70000)” 改为
#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x0100000)
uboot-2016 make生成的u-boot.bin >512k>0x70000,环境变量地址为0x70000时,如果保存环境变量,则会覆盖了u-boot.bin。saveenv命令后重启后死机
5.生成u-boot.bin
make distclean
make smdk2410_defconfig
make
烧写u-boot.bin 到norflash 运行结果如下图: