Character or block device?
Character指的是keyboard,mouse這類device。可以向這些device讀東西出來,但不能做seek,也沒有size的觀念。而block device則可seek,也有size,一個block通常是512 bytes。
而flash的bahavior像block device,其不同點為:
1. block device的write/erash是沒有區別的
2. block device是由sector組成,而MTD則是erase block
3. hardware處理bad block,而MTD需要software
因此就有了MTD這個特別的device type。
Note: USB stick, MMC, SD, CompactFlash也稱為flash,但這些都不是flash device。他們內部有flash chip,但除了chip,還有一層模擬為block device的translation layer,且這個translation實作在硬體上,所以應視為hard drive。
MTD subsystem
MTD (Memory Techology Device)是一個subsystem,用來簡化底層的flash device (ROM/NAND/OneNAND/NOR)的driver。在MTD下,driver只需提供read/write/erase的功能,而不需知道其上是使用FTL (Flash Translation Layer),還是FFS (Flash File System)。
FTL是用來模擬Flash device為block device,因此可以在上面create filesystem。而FFS則是為flash device設計的filesystem。各有其優缺點,可見Wiki。
為了讓既有的filesystem (fat/ext/xfs...)能用在flash device上,就需要FTL這個software layer。mtdblock就是其中一種FTL。要注意的是使用FTL時,如果改了其中一個sector,就必須讀一整個eraseblock到memory,然後erase,最後再把整個eraseblock寫回,顯然cost很高。因此通常建議使用mtdblock_ro,也可再加上squashfs。將mtdblock mount成rw前,一定要多想一下是否值得這樣做。
mtdblock也沒有wear leveling。
Reference
留言列表