b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

dm368 ecc 移植ubifs到dm368成功(2)

电脑杂谈  发布时间:2017-06-04 14:03:05  来源:网络整理

root@dm368-evm:~# ubiattach/dev/ubi_ctrl -m 3

UBI: attaching mtd3 to ubi0

UBI: physical eraseblock size: 131072 bytes (128 KiB)

UBI: logical eraseblock size: 129024 bytes

UBI: smallest flash I/O unit: 2048

UBI: sub-page size:512

UBI: VID header offset: 512 (aligned 512)

UBI: data offset: 2048

分析下UBI写数据的过程,

UBI DBG (pid 1484): ubi_io_write:write 512 bytes to PEB 57:0

int ubi_io_write(struct ubi_device*ubi, const void *buf, int pnum, int offset,

int len)

addr= (loff_t)pnum * ubi->peb_size + offset;

err= ubi->mtd->write(ubi->mtd, addr, len, &written, buf);

在io_init函数中可以看到几个变量的赋值;

ubi->peb_size = ubi->mtd->erasesize;

ubi->peb_count = mtd_div_by_eb(ubi->mtd->size,ubi->mtd);

ubi->flash_size= ubi->mtd->size;

从debug log来看,这里一次写了512字节,从某个block的起始page开始,offset是0;

那么到了nand mtd底层驱动,行为就是;

nand_write->nand_do_write_ops:

subpage= column || (writelen & (mtd->writesize - 1));

这里,subpage就是writelen,512;

也可以得知一点,ubifs没有使用oob,这跟jffs2和yaffs2是不同的;

/*Partial page write ? */

if(unlikely(column || writelen

writesize - 1))) {

cached= 0;

bytes= min_t(int, bytes - column, (int) writelen);

chip->pagebuf= -1;

memset(chip->buffers->databuf,0xff, mtd->writesize);

memcpy(&chip->buffers->databuf[column],buf, bytes);

wbuf= chip->buffers->databuf;

}

ret= chip->write_page(mtd, chip, wbuf, page, cached,

(ops->mode == MTD_OOB_RAW));

下面是write_page函数的代码;

static int nand_write_page(structmtd_info *mtd, struct nand_chip *chip,

const uint8_t *buf, int page, int cached,int raw)

{

intstatus;

chip->cmdfunc(mtd,NAND_CMD_SEQIN, 0x00, page);


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/dianqi/article-51076-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...