int nand_write_opts(nand_info_t *meminfo, const nand_write_options_t *opts) { 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。。。。。。。。。。 memcpy(data_buf, buffer, readlen); buffer += readlen; if (opts->writeoob) { /* read OOB data from input memory block, exit * on failure */ memcpy(oob_buf, buffer, meminfo->oobsize); buffer += meminfo->oobsize; /* write OOB data first, as ecc will be placed * in there*/ result = meminfo->write_oob(meminfo, mtdoffset, meminfo->oobsize, &written, (unsigned char *) &oob_buf); 。。。。。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。。。 } result = meminfo->write(meminfo, mtdoffset, meminfo->oobblock, &written, (unsigned char *) &data_buf); |
static int nand_write (struct mtd_info *mtd, loff_t to, size_t len, size_t * retlen, const u_char * buf) { return (nand_write_ecc (mtd, to, len, retlen, buf, NULL, NULL)); } static int nand_write_ecc (struct mtd_info *mtd, loff_t to, size_t len, size_t * retlen, const u_char * buf, u_char * eccbuf, struct nand_oobinfo *oobsel) {。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 oobbuf = nand_prepare_oobbuf (mtd, eccbuf, oobsel, autoplace, numpages); while (written < len) { this->data_poi = (u_char*) &buf[written]; ret = nand_write_page (mtd, this, page, &oobbuf[oob], oobsel, (--numpages > 0)); 。。。。。。。。。。。。。。。。。。 } 。。。。。。。。。。。。。。。。。。。。。。 } |
if (opts->writeyaffs) { /* read page data from input memory buffer */ memcpy(data_buf, buffer, readlen); buffer += readlen; /* read OOB data from input memory block, exit * on failure */ memcpy(oob_buf, buffer, meminfo->oobsize); buffer += meminfo->oobsize; result = meminfo->write_ecc(meminfo, mtdoffset, meminfo->oobblock, &written, (unsigned char *) &data_buf, (unsigned char *)&oob_buf, NULL); if (result != 0) { printf("writing NAND page at offset 0x%lx failed\n", mtdoffset); goto restoreoob; } imglen -= meminfo->oobsize; imglen -= readlen; } else {。。。。} |
歡迎光臨 Chinaunix (http://www.72891.cn/) | Powered by Discuz! X3.2 |