分类:
2011-08-09 11:41:27
1.2.12 修改u-boot-2008.10/include/configs/mini2440.h 头文件
(1)添加对2440的宏定义:
#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */
#define CONFIG_mini2440 1 /* on a SAMSUNG mini2440 Board */
#define CONFIG_mini2440_LED 1 /* Use the LED on Board */
//#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
//#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
/* input clock of PLL */
(2)修改网卡的宏定义,注释掉CS8900的部分,添加对DM9000的支持:
/*
* Hardware drivers
*/
//#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
//#define CS8900_BASE 0x19000300
//#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_USE_16BIT 1
#define CONFIG_DM9000_BASE 0x20000300
#define DM9000_IO 0x20000300
#define DM9000_DATA 0x20000304
(3)添加支持Nand 启动等宏定义,将相关IP设置的注释去掉,并修改IP设置,顺便修改下启动参数的宏设置:
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_ELF
#define CONFIG_CMD_PING
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_TAG
/*向linux内核传递函数所需的宏*/
//nand Flash param
#define CONFIG_CMD_NAND
#define CONFIG_CMDLINE_EDITING
#ifdef CONFIG_CMDLINE_EDITING
#undef CONFIG_AUTO_COMPLETE
#else
#define CONFIG_AUTO_COMPLETE
#endif
//#define CONFIG_NAND_LEGACY
//不使用LEGACY,以使用自带的nand flash驱动
/*
* NAND flash settings
*/
#if defined(CONFIG_CMD_NAND)
#define CFG_NAND_BASE 0x4E000000
/* NandFlash控制器在SFR区起始寄存器地址 */
#define CFG_MAX_NAND_DEVICE 1
/* Max number of NAND devices */
#define CONFIG_MTD_NAND_VERIFY_WRITE 1 //使能flash写校验
/* #undef CONFIG_MTD_NAND_VERIFY_WRITE */
#endif /* CONFIG_CMD_NAND */
#define CONFIG_BOOTDELAY 2
#define CONFIG_BOOTARGS "noinitrd root=/dev/nfs nfsroot=192.168.1.10:/opt/root_nfs ip=192.168.1.70:192.168.1.10:192.168.1.10:255.255.255.0:mini.arm9.net:eth0:off init=linuxrc console=ttySAC0"
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.70 /*改变默认的IP地址*/
#define CONFIG_SERVERIP 192.168.1.80 /*改变原服务器IP地址*/
/*#define CONFIG_BOOTFILE "elinos-lart" */
#define CONFIG_BOOTCOMMAND "tftp 0x31000000 uImage;bootm 0x31000000"
……
#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
#define CFG_LOAD_ADDR 0x31000000 /* default load address bootm use it*/
......
/*------------------------------------------------------------------
* FLASH and environment organization
*/
//#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
//#if 0
//#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
//#endif
#define CONFIG_AMD_LV800 /*mini2440上用的是2M的Nor Flash,暂时用这个也可以从Nor Flash启动 */
/*------------------------------*/
(5)在Nand Flash中保存 u-boot 参数 (saveenv 功能):
/* timeout values are in ticks */
#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
#define CONFIG_ENV_IS_IN_NAND 1
#define CONFIG_ENV_OFFSET 0x30000
//#define CFG_ENV_OFFSET 0X30000
//#define CONFIG_ENV_IS_IN_FLASH 1
#define CONFIG_ENV_SIZE 0x10000 /* Total Size of Environment Sector */
(6)为了在U-Boot运行阶段对一些寄存器进行操作,在此文件后面添加代码:
# if defined(CONFIG_mini2440_LED)
/* GPIO */
#define GPIO_CTL_BASE 0x56000000
#define oGPIO_B 0x10
#define oGPIO_CON 0x0 /* R/W, Configures the pins of the port */
#define oGPIO_DAT 0x4 /* R/W, Data register for port */
#define oGPIO_UP 0x8 /* R/W, Pull-up disable register */
#endif
#define STACK_BASE 0x33f00000
#define STACK_SIZE 0x8000
/* NAND Flash Controller */
#define NAND_CTL_BASE 0x4E000000
#define bINT_CTL(Nb) __REG(INT_CTL_BASE + (Nb))
/* Offset */
#define oNFCONF 0x00
# if defined(CONFIG_S3C2440)
#define CONFIG_S3C2440_NAND_BOOT 1
/* Offset */
#define oNFCONT 0x04
#define oNFCMD 0x08
#define oNFADDR 0x0c
#define oNFDATA 0x10
#define oNFSTAT 0x20
#define oNFECC 0x2c
#define rNFCONF (*(volatile unsigned int *)0x4e000000)
#define rNFCONT (*(volatile unsigned int *)0x4e000004)
#define rNFCMD (*(volatile unsigned char *)0x4e000008)
#define rNFADDR (*(volatile unsigned char *)0x4e00000c)
#define rNFDATA (*(volatile unsigned char *)0x4e000010)
#define rNFSTAT (*(volatile unsigned int *)0x4e000020)
#define rNFECC (*(volatile unsigned int *)0x4e00002c)
#endif
# if defined(CONFIG_S3C2410)
#define CONFIG_S3C2410_NAND_BOOT 1
/* Offset */
#define oNFCONF 0x00
#define oNFCMD 0x04
#define oNFADDR 0x08
#define oNFDATA 0x0c
#define oNFSTAT 0x10
#define oNFECC 0x14
#define rNFCONF (*(volatile unsigned int *)0x4e000000)
#define rNFCMD (*(volatile unsigned char *)0x4e000004)
#define rNFADDR (*(volatile unsigned char *)0x4e000008)
#define rNFDATA (*(volatile unsigned char *)0x4e00000c)
#define rNFSTAT (*(volatile unsigned int *)0x4e000010)
#define rNFECC (*(volatile unsigned int *)0x4e000014)
#define rNFECC0 (*(volatile unsigned char *)0x4e000014)
#define rNFECC1 (*(volatile unsigned char *)0x4e000015)
#define rNFECC2 (*(volatile unsigned char *)0x4e000016)
#endif
#endif /* __CONFIG_H */
1.2.13 修改u-boot-2008.10/lib_arm/board.c 文件
(1)添加头文件引用:
#include
#include
#include
(2)添加LED功能,指示进度:
static int display_banner (void)
{
# if defined(CONFIG_mini2440_LED)
S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
gpio->GPBDAT = 0x100;
//在串口初始化和console初始化完成,串口输出信息之前,LED1、LED2、LED3会亮起!
#endif
#if !defined(CONFIG_mini2440_LED)
S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
#endif
printf ("\n\n%s\n\n", version_string);
……
reset_phy();
#endif
#endif
#if defined(CONFIG_mini2440_LED)
S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
#endif
# if defined(CONFIG_mini2440_LED)
gpio->GPBDAT = 0x0;
//在进入命令提示符之前,四个LED会同时亮起!
#endif
/* main_loop() can return to retry autoboot, if so just run it again. */