一、概述

1、MTD

  MTD是Flash的一种管理方法,将Flash划分成几个分区,便于管理。

  u-boot的MTD功能是在文件cmd_jffs2.c中实现的,由此我们可以知道怎样打开u-boot的MTD功能。

2、MTD的作用

  (1)对Flash构建了分区表,从而能够启动linux系统

  (2)nand命令可以使用宏参数,例如“nand read.jffs2 0x30007FC0 kernel;”命令中的kernel,kernel参数

     代表了内核分区的加载地址和大小。

二、移植

  整个操作都是对TQ2440.h的修改。

1、使能MTD功能、定义MTD分区表

/*
 * config mtd settings
 */     
#define CONFIG_JFFS2_CMDLINE 1
#define CONFIG_JFFS2_NAND    1

#define MTDIDS_DEFAULT            "nand0=nandflash0"
#define MTDPARTS_DEFAULT        "mtdparts=nandflash0:256k@0(bios)," \
                                    "128k(params)," \
                                    "128k(toc)," \
                                    "512k(eboot)," \
                                    "1024k(logo)," \
                                    "3m(kernel)," \
                                    "-(root)" 

#define CONFIG_EXTRA_ENV_SETTINGS      \
    "mtdids="    MTDIDS_DEFAULT            "\0" \
    "mtdparts="    MTDPARTS_DEFAULT        "\0"

2、使能JFFS2功能(MTD功能是在JFFS2功能打开的前提下才能进一步使能)

/***********************************************************
 * Command definition
 ***********************************************************/
#define CONFIG_COMMANDS \
            (CONFIG_CMD_DFL     | \
            CFG_CMD_CACHE     | \
            CFG_CMD_NAND     | \
            /*CFG_CMD_EEPROM |*/ \
            /*CFG_CMD_I2C     |*/ \
            /*CFG_CMD_USB     |*/ \
            CFG_CMD_JFFS2     | \
            CFG_CMD_DATE     | \
            CFG_CMD_REGINFO  | \
            CFG_CMD_PING     | \
            CFG_CMD_ELF)

三、移植遇到的问题及解决

  如果出现“mtdparts variable not set”问题,这是由于环境变量mtdparts没设置的缘故,我们可以在默认环境变量区中添加这样的环境变量。默认环境变量的定义是common/environment.c中的全局变量“environment”。

  添加环境变量的方法很简单,还是在TQ2440.h中添加,代码如下。

#define CONFIG_EXTRA_ENV_SETTINGS      \
    "mtdids="    MTDIDS_DEFAULT            "\0" \
    "mtdparts="    MTDPARTS_DEFAULT        "\0"

  

posted on 2014-03-31 21:21  amanlikethis  阅读(3479)  评论(0)    收藏  举报