Chinaunix首页 | 论坛 | 博客
  • 博客访问: 682804
  • 博文数量: 516
  • 博客积分: 4119
  • 博客等级: 上校
  • 技术积分: 4288
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-30 17:29
文章分类

全部博文(516)

文章存档

2014年(4)

2013年(160)

2012年(352)

分类:

2013-01-04 17:52:57

PC操作系统:ubuntu 11.10

使用的开发板:am335x_evm

开发板使用的操作系统:linux 3.2



有多种方式可以写入数据到NAND FLASH 中,这里使用的是 SD卡,把 SD 中的SPL( MLO), u-boot.img 文件写入到 NAND FLASH 中

NAND 布局如下:

+------------+-->0x00000000-> SPL start         (SPL copy on 1st block)
|            |
|            |-->0x0001FFFF-> SPL end 
|            |-->0x00020000-> SPL.backup1 start (SPL copy on 2nd block)
|            |
|            |-->0x0003FFFF-> SPL.backup1 end 
|            |-->0x00040000-> SPL.backup2 start (SPL copy on 3rd block)
|            |
|            |-->0x0005FFFF-> SPL.backup2 end 
|            |-->0x00060000-> SPL.backup3 start (SPL copy on 4th block)
|            |
|            |-->0x0007FFFF-> SPL.backup3 end
|            |-->0x00080000-> U-Boot start
|            |                                    
|            |-->0x002BFFFF-> U-Boot end 
|            |-->0x00260000-> ENV start
|            |
|            |
|            |-->0x0027FFFF-> ENV end
|            |-->0x00280000-> Linux Kernel start
|            |
|            |
|            |-->0x0077FFFF-> Linux Kernel end
|            |-->0x00780000-> File system start
|            |
|            |
+------------+-->0x10000000-> NAND end (Free end)


1.

先使用 SD卡启动 am335x,但不要进入到系统中。(SD,Switch SW3, SW3[5:1] ==> 10111 , 其他 pins 都设置为 0 (也就是 OFF). )

如下:



把 SD 中 的 SPL(MLO),u-boot.img 文件写入到 NAND FLASH 中。

把 SPL (MLO) 写入到  NAND 中 :

U-Boot# mmc rescan 

U-Boot# mw.b 0x82000000 0xFF 0x20000 

U-Boot# fatload mmc 0 0x82000000 MLO

U-Boot# nandecc hw 2

U-Boot# nand erase 0x0 0x20000 

U-Boot# nand write.i 0x82000000 0x0 0x20000


把 u-boot.img 写入到 NAND 中:

U-Boot# mmc rescan 

U-Boot# mw.b 0x82000000 0xFF 0x40000 

U-Boot# fatload mmc 0 0x82000000 u-boot.img 

U-Boot# nandecc hw 2 

U-Boot# nand erase 0x80000 0x40000 

U-Boot# nand write.i 0x82000000 0x80000 0x40000


执行到这里,没有发生任何错误。


2.

关闭 am335x。

转换成有 NAND 模式启动 am335x。(NAND,Switch SW3, SW3[5:1] ==> 10010 , 其他 pins 都设置为 0 (也就是 OFF). )

启动 am335x。


3.

发生异常,提示如下:

U-Boot SPL 2011.09 (Jun 23 2012 - 20:16:14)                       

Texas Instruments Revision detection unimplemented               

spl: ERROR: This bootmode is not implemented - hanging### ERROR ### Please RESET the board ###


4.

解决方法:

打开文件:ti-sdk-am335x-evm/board-support/u-boot-2011.09-psp04.06.00.07/arch/arm/cpu/armv7/omap-common/spl_nand.c

修改函数:void spl_nand_load_image(void)   // LINE  33

如下:

void spl_nand_load_image(void)
{
    struct image_header *header;

/*@@     //修改前
    switch (omap_boot_mode()) {
    case NAND_MODE_HW_ECC:
        debug("spl: nand - using hw ecc\n");
        gpmc_init();
        nand_init();
        break;
    default:
        puts("spl: ERROR: This bootmode is not implemented - hanging");
        hang();
    }
@@*/


    //修改后
    debug("spl: nand - using hw ecc\n");    //@@    
    gpmc_init();    //@@
    nand_init();    //@@


    /*use CONFIG_SYS_TEXT_BASE as temporary storage area */
    header = (struct image_header *)(CONFIG_SYS_TEXT_BASE);


保存。


5.

重新编译 uboot。 执行命令:#make O=am335x CROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm am335x_evm

把生成的 MLO,u-boot.img 文件复制到 SD 卡中 替换原来的这两个文件。

重新执行  1.和2.

启动 am335x。

显示如下:



完成!


Linux kernel 以及 文件系统  待续
阅读(2142) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~