uboot的mtd功能支持

一、概述

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            "" 
    "mtdparts="    MTDPARTS_DEFAULT        ""

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            "" 
    "mtdparts="    MTDPARTS_DEFAULT        ""

  

原文地址:https://www.cnblogs.com/amanlikethis/p/3636876.html