基于TQ2440的u-boot 1.1.6移植(二)(支持nor flash nand flash
发布时间:2020-12-15 17:42:28 所属栏目:百科 来源:网络整理
导读:1.修改在u-boot 中的提示符“SMDK2410 #”, 可以在/include/configshang2440.h 中修改成?,操作如下:#define CFG_PROMPT "[dong2440]# " /* Monitor Command Prompt */ 2.开发板中的Nor Flash型号为EN29LV160AB,而配置文件include/configs/dong2440.h中默认
1.修改在u-boot 中的提示符“SMDK2410 #”, 可以在/include/configshang2440.h 中修改成?,操作如下:#define CFG_PROMPT "[dong2440]# " /* Monitor Command Prompt */
2.开发板中的Nor Flash型号为EN29LV160AB,而配置文件include/configs/dong2440.h中默认型号为AM29LV400。因为本开发板Nor Flash为 2MB,和AM29LV800 很相似,所以对Nor Flash配置修改如下: #if 0 #define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */ #endif #define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */ #define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ #ifdef CONFIG_AMD_LV800 #define PHYS_FLASH_SIZE 0x00200000 /* 1MB */ #define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */ #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x1F0000) /* addr of environment */ #endif 3.增加Nand Flash读写驱动 任务:移植nand- flash驱动,让 u-boot 可以操作读写 nand flash。 (1)由于s3c2410 和s3c2440,nand flash控制器有区别,所以修改代码,让u-boot可以操作读写nand flash。由于代码较长,补贴出来,提供链接:http://download.csdn.net/user/u012851076 (2)同时修改该目录下的 Makefile:29 行: COBJS = i2c.o interrupts.o serial.o speed.o usb_ohci.o nand_flash.o (3)在 include/s3c24x0.h 中定义 S3C2440_NAND 结构体:168 行 /* NAND FLASH (see S3C2440 manual chapter 6,) */ typedef struct { S3C24X0_REG32 NFCONF; S3C24X0_REG32 NFCONT; S3C24X0_REG32 NFCMD; S3C24X0_REG32 NFADDR; S3C24X0_REG32 NFDATA; S3C24X0_REG32 NFMECCD0; S3C24X0_REG32 NFMECCD1; S3C24X0_REG32 NFSECCD; S3C24X0_REG32 NFSTAT; S3C24X0_REG32 NFESTAT0; S3C24X0_REG32 NFESTAT1; S3C24X0_REG32 NFMECC0; S3C24X0_REG32 NFMECC1; S3C24X0_REG32 NFSECC; S3C24X0_REG32 NFSBLK; S3C24X0_REG32 NFEBLK; } /*__attribute__((__packed__))*/ S3C2440_NAND; (4)同时在 include/s3c2410.h 中添加:100 行 static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void) { return (S3C2440_NAND * const)S3C2410_NAND_BASE; } (5)修改配置文件 include/configs/dong2440.h,修对 Flash 的配置和增加 NAND 设置:178 行。 //#define CFG_ENV_IS_IN_FLASH 1 #define CFG_ENV_IS_IN_NAND 1 #define CFG_ENV_OFFSET 0x40000 #define CFG_ENV_SIZE 0xc000/* 64M NAND FLASH Total Size of Environment Sector */ /*----------------------------------------------------------------------- * NAND flash settings */ #define CFG_NAND_BASE 0 #define CFG_MAX_NAND_DEVICE 1 #define NAND_MAX_CHIPS 1 (6)修改配置文件 include/configs/dong2440.h,增加 NAND 命令,81 行 #define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_CACHE | CFG_CMD_NAND | /*CFG_CMD_EEPROM |*/ /*CFG_CMD_I2C |*/ /*CFG_CMD_USB |*/ CFG_CMD_REGINFO | CFG_CMD_DATE | CFG_CMD_ELF) 最后 make clean make 没有错误生成u-boot.bin 4.支持DM9000网卡 (1)增加网卡的 DM9000 的配置,include/configs/dong2440.h 的 56 行和 96 行 /* * Hardware drivers */ #define CONFIG_DRIVER_DM9000 1 //去掉了原来 CS8900 的配置 #define CONFIG_DM9000_BASE ?0x20000300 #define DM9000_IO ?CONFIG_DM9000_BASE #define DM9000_DATA ?(CONFIG_DM9000_BASE + 4) #define CONFIG_DM9000_USE_16BIT #define CONFIG_ETHADDR ?10:23:45:67:89:AB #define CONFIG_NETMASK ?255.255.255.0 #define CONFIG_IPADDR ?192.168.1.6 #define CONFIG_SERVERIP ?192.168.1.101
(3)支持网卡获取MAC地址: 修改 drivers/dm9000x.c 303 行 将 for (i = 0; i < 6; i++) ((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i); 改为: //start char *tmp = getenv("ethaddr"); char *end; for (i = 0; i < 6; i++) { bd->bi_enetaddr[i] = tmp ? simple_strtoul(tmp,&end,16) : 0; if(tmp) tmp = (*end) ? end+1 : end; } //end 331 行 #if 0 i = 0; while (!(phy_read(1) & 0x20)) { /* autonegation complete bit */ udelay(1000); i++; if (i == 10000) { printf("could not establish linkn"); return 0; } } /* see what we've got */ lnk = phy_read(17) >> 12; printf("operating at "); switch (lnk) { case 1: printf("10M half duplex "); break; case 2: printf("10M full duplex "); break; case 4: printf("100M half duplex "); break; case 8: printf("100M full duplex "); break; default: 22 printf("unknown: %d ",lnk); break; } printf("moden"); #endif最后 make clean make (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |