http://lxr.linux.no/linux+v2.6.32/drivers/mtd/nand/s3c2410.c
mtd nand driver architecture:
http://kernel.org/doc/htmldocs/mtdnand.html
about ECC of nand:
http://en.wikipedia.org/wiki/Flash_memory
http://en.wikipedia.org/wiki/Error_correcting_code
bad block management
NAND devices also require bad block management by the device driver software, or by a separate controller chip. SD cards, for example, include controller circuitry to perform bad block management and wear leveling. When a logical block is accessed by high-level software, it is mapped to a physical block by the device driver or controller. A number of blocks on the flash chip may be set aside for storing mapping tables to deal with bad blocks, or the system may simply check each block at power-up to create a bad block map in RAM. The overall memory capacity gradually shrinks as more blocks are marked as bad.
nand flash controller diagram
specification of nand interface, including command definition
http://www.micron.com/~/media/Documents/Products/ONFI/onfi_31_spec.pdf
Wear Leveling
JFFS2, YAFFS, and UBIFS include bad block management, wear leveling, error correction and provide reliable filesystems for industrial use on top of NAND Flash.
Some code about Linux file system on Flash
struct nand_chip { int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, uint32_t offset, int data_len, const uint8_t *buf, int oob_required, int page, int cached, int raw); } nand_write nand_do_write_ops chip->write_page ( nand_write_page ) ecc->write_page ( nand_write_page_hwecc ) chip->write_buf ( s3c2410_nand_write_buf ) chip->cmdfunc( nand_command ) chip->cmd_ctrl( s3c2410_nand_hwcontrol ) nand_read nand_do_read_ops chip->cmdfunc ( nand_command ) chip->cmd_ctrl( s3c2410_nand_hwcontrol ) ecc->read_page_raw ( nand_read_page_raw ) chip->read_buf ( s3c2410_nand_read_buf ) mtd_read mtd->_read ( nand_read ) mtd_write mtd->_write ( nand_write ) ubi_io_write mtd_write ubi_io_read mtd_read Wear-Leveling is in the drivers\mtd\ubi\wl.c UBIFS to UBI ubifs_leb_read ubi_read ubifs_leb_write ubi_leb_write UBIFS and UBI are different UBI source code drivers\mtd\ubi UBIFS source code fs\ubifs UBIFS's VFS mount point fs\ubifs\file.c fs\ubifs\dir.c fs\ubifs\super.c
No comments:
Post a Comment