一、概述
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"