2011-03-20 23:06:24
学习笔记:
效果图:
参考步骤:
一,把smdk2410 # 改成apple2440 #
1,在board/samsung/apple2440/apple2440.c中修改 if(gpio->GSTATUS1==0x32440001) /* arch number of SMDK2410-Board */ gd->bd->bi_arch_number = MACH_TYPE_APPLE2440; else gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; 2,在arch/arm/include/asm/mach-types.h中修改 #define CONFIG_SYS_PROMPT "APPLE2440 # "二,增加EN29LV160AB norflash驱动
1,修改include/configs/apple2440.h #if 0 //注释掉下面两个类型的Nor Flash设置,因为不是我们所使用的型号 #define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */ #define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */ #endif //第175行添加如下内容 #define CONFIG_EON_29LV160AB 1 //添加TQ2440开发板Nor Flash设置 #define PHYS_FLASH_SIZE 0x200000 //我们开发板的Nor Flash是2M #define CONFIG_SYS_MAX_FLASH_SECT (35) //根据EN29LV160AB的芯片手册描述,共35个扇区 #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0xF0000) //暂设置环境变量的首地址为0xF0000 //在此处放uboot参数2,在include/flash.h添加
在181行添加 #define EON_ID_LV160AB 0x224922493,在board/samsung/smdk2440/flash.c中修改
#define MAIN_SECT_SIZE 0x8000 //定义为32k,主要扇区的大小 ============================================================ 由数据手册可知EN29LV160AB第0扇区大小为8K,第1、2为4K,第3为16K,后面31扇区为32K。前面4个扇区加起来刚好是主要扇区的大小 = 32K, 所以修改87行下如下for (j = 0; j < flash_info[i].sector_count; j++)
{ if (j <= 3) { /* 1st one is 8 KB */ if (j == 0) { flash_info[i].start[j] = flashbase + 0; }/* 2nd and 3rd are both 4 KB */
if ((j == 1) || (j == 2)) { flash_info[i].start[j] = flashbase + 0x2000 + (j - 1) * 0x1000; }/* 4th 16 KB */
if (j == 3) { flash_info[i].start[j] = flashbase + 0x4000; } } else { flash_info[i].start[j] = flashbase + (j - 3) * MAIN_SECT_SIZE; } } size += flash_info[i].size; ========================================================== 修改flash_print_info,添加EN29LV160AB相关信息如下:switch (info->flash_id & FLASH_VENDMASK) {
case (AMD_MANUFACT & FLASH_VENDMASK): printf ("AMD: "); break; case (EON_MANUFACT & FLASH_VENDMASK): printf ("EON: "); break; default: printf ("Unknown Vendor "); break; }switch (info->flash_id & FLASH_TYPEMASK) {
case (AMD_ID_LV400B & FLASH_TYPEMASK): printf ("1x Amd29LV400BB (4Mbit)\n"); break; case (AMD_ID_LV800B & FLASH_TYPEMASK): printf ("1x Amd29LV800BB (8Mbit)\n"); break; case (EON_ID_LV160AB & FLASH_TYPEMASK): printf ("1x EN29LV160AB (16Mbit)\n"); break;default:
printf ("Unknown Chip Type\n"); goto Done; break; }================================================
修改int flash_erase (flash_info_t * info, int s_first, int s_last)if ((info->flash_id & FLASH_VENDMASK) !=
(EON_MANUFACT & FLASH_VENDMASK)) { return ERR_UNKNOWN_FLASH_VENDOR;=========================================
添加 #elif defined(CONFIG_EON_29LV160AB) //在CONFIG_AMD_LV800后面添加EON_ID_LV160AB (EON_MANUFACT & FLASH_VENDMASK) | (EON_ID_LV160AB & FLASH_TYPEMASK); 4,至此,uboot关于Norflash已经移植好make distclean
make smdk2440_config
make即可生成u-boot.bin