参考http://zjbintsystem.blog.51cto.com/964211/211345
需要注意的是,为了引导内核,需要制定开发板类型代码,因此加上了这几句:
#if defined(CONFIG_S3C2440)
/* arch number of S3C2440-Board */
gd->bd->bi_arch_number = MACH_TYPE_S3C2440 ;
#endif
很多晚上都是说类型代码是MACH_TYPE_S3C2440 ,这里真是害人不浅!当初就是因为这个类型码出错,差点没折腾死。
实际上应该是MACH_TYPE_MINI2440 ,这个类型码定义在include/asm-arm/mach-types.h中。语句为:
#define MACH_TYPE_MINI2440 1999
修改这个文件主要是为了
1:修改其对GPIO
2:修改PLL的配置(请参阅开发板的硬件说明和芯片手册);
3:并针对LCD显示部分和nand flash驱动添加相应的代码: ......
#include <common.h>
#include <s3c2410.h>
#include <video_fb.h>
#if defined(CONFIG_CMD_NAND)
#include <linux/mtd/nand.h>
#endif
DECLARE_GLOBAL_DATA_PTR;
#define FCLK_SPEED 1
#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
#if defined(CONFIG_S3C2410)
/* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#endif
#if defined(CONFIG_S3C2440)
/* Fout = 405MHz */
#define M_MDIV 0x7f
#define M_PDIV 0x2
#define M_SDIV 0x1
#endif
#endif
#define USB_CLOCK 1
#if USB_CLOCK==0
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif USB_CLOCK==1
#if defined(CONFIG_S3C2410)
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#endif
#if defined(CONFIG_S3C2440)
#define U_M_MDIV 0x38
#define U_M_PDIV 0x2
#endif
#define U_M_SDIV 0x2
#endif
......
为连接LED和蜂鸣器的GPIO修改配置寄存器:
int board_init (void):
......
#if defined(CONFIG_MINI2440)
gpio->GPBCON = 0x00295551;
#else
gpio->GPBCON = 0x00044556;
#endif
......
为引导linux 内核,修改开发板的类型代码:
int board_init (void):
......
#if defined(CONFIG_S3C2410)
/* arch number of SMDK2410-Board */
gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
#endif
#if defined(CONFIG_S3C2440)
/* arch number of S3C2440-Board */
gd->bd->bi_arch_number = MACH_TYPE_S3C2440 ;
#endif
......为使int board_init (void)设置完成后,LED1和LED2同时亮起,蜂鸣器继续鸣叫,在int board_init (void)的最后添加: ......
icache_enable();
dcache_enable();
#if defined(CONFIG_MINI2440_LED)
gpio->GPBDAT = 0x00000181;
#endif
return 0;
}