nand linux bbt存储,直接从nandflash和T卡启动linux的笔记.doc

实现从nand flash和T卡启动功能所做的修改

让系统可以正确读取T卡中的文件需要修改uboot/include/movi.h文件中关于MOVI_BL2_POS的定义,具体如下:

//#define MOVI_BL2_POS(MOVI_LAST_BLKPOS - MOVI_BL1_BLKCNT - MOVI_BL2_BLKCNT) - MOVI_ENV_BLKCNT)

#define MOVI_BL2_POS(MOVI_LAST_BLKPOS - MOVI_BL1_BLKCNT - MOVI_BL2_BLKCNT)// - MOVI_ENV_BLKCNT)

需要打开include/configs/smdk6410.h中的下面几个配置,否则在读取nandflash时会有问题。

CFG_NAND_HWECC

CFG_NAND_FLASH_BBT

CONFIG_NAND_BL1_8BIT_ECC

在uboot/cpu/s3c64xx/nand.c中添加对nand flash第一块进行读写的函数如下:

void s3c_nand_write_page_8bit_for_irom(struct mtd_info *mtd, struct nand_chip *chip, const uint8_t *buf)

{

int i, eccsize = 512;

int eccbytes = 13;

int eccsteps = mtd->writesize / eccsize;

uint8_t *ecc_calc = chip->buffers->ecccalc;

uint8_t *p = (uint8_t *) buf;

for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {

s3c_nand_enable_hwecc_8bit(mtd, NAND_ECC_WRITE);

chip->write_buf(mtd, p, eccsize);

s3c_nand_calculate_ecc_8bit(mtd, p, &ecc_calc[i]);

}

for (i = 0; i < eccbytes * (mtd->writesize / eccsize); i++)

chip->oob_poi[i] = ecc_calc[i];

chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);

}

int s3c_nand_read_page_8bit_for_irom(struct mtd_info *mtd, struct nand_chip *chip, uint8_t *buf)

{

int i, stat, eccsize = chip->ecc.size;

int eccbytes = chip->ecc.bytes;

int eccsteps = chip->ecc.steps;

int col = 0;

uint8_t *p = buf;

uint32_t *mecc_pos = chip->ecc.layout->eccpos;

/* Step1: read whole oob */

col = mtd->writesize;

chip->cmdfunc(mtd, NAND_CMD_RNDOUT, col, -1);

chip->read_buf(mtd, chip->oob_poi, mtd->oobsize);

col = 0;

for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {

chip->cmdfunc(mtd, NAND_CMD_RNDOUT, col, -1);

chip->ecc.hwctl(mtd, NAND_ECC_READ);

chip->read_buf(mtd, p, eccsize);

chip->write_buf(mtd, chip->oob_poi + 0 + ((chip->ecc.steps - eccsteps) * eccbytes), eccbytes);

s3c_nand_calculate_ecc_8bit(mtd, 0, 0);

stat = s3c_nand_correct_data_8bit(mtd, p, 0, 0);

if (stat == -1)

mtd->ecc_stats.failed++;

col = eccsize * (chip->ecc.steps + 1 -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值