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