MTD(Memory Technology Devices)란?
말그대로, Linux에서 사용되어지는 Memory Technology Device 이며, Flash Memory를
초기에는 NOR Type의 Flash Memory 지원이 되어지면서 이를 Control하기 위해서 , NAND의 출현으로 현재 그 기능이
다중화 많이 기능들이 추가되고, 이에 더불어 FTL, NTFL 등 다양한 기능이 추가하는 중이다.
NAND에 필요한 Bad Block Management 기술 들이 들어가 있다.
code code sample
1.1 MTD의 기본구성
MTD의 기본구성을 살펴보면, 일단 MTD Chip Drivers가 존재하며, 각종 Flash Memory
(NAND , ONE-NAND , NOR Type) 기본 Interface 부분이 존재한다.
이런 부분들은 H/W와 밀접한 관계를 가지고 있기때문에 glue logic라고 표현을 한것이다.
상위 MTD에는 추상화되어 Char Device 와 Block Device 로 구분이 되며, Flash Memory에 접근하는 방식이 다르다.
일반적인 Disk라면, Fixed Size로 ATA , PATA, PIC Interface 로 이를 접근을 해서 Block Device로 접근을 하면된다.
하지만, Flash의 경우 write and erase operation 이 구분을 해야하며, Size도 제각각이다.
이를 Control 하고, Partition 이라는 개념을 제공하기위해서 Char Device를 제공한다.
현재는 NOR or ONENAND 보다는 NAND를 사용하거나 NAND의 부족한 기술을 HW적으로 보완해줘서 사용하는
SD Disk 같은 저장장치로 분류되겠다.
물론 SD Disk 같은 저장장치는 MTD의 사용이 필요하지 않다.
MTD의 기본설명
https://en.wikipedia.org/wiki/Memory_Technology_Device
MTD의 FAQ (일반적인 질문 및 기본사항)
http://www.linux-mtd.infradead.org/faq/general.html
http://www.linux-mtd.infradead.org/archive/tech/faq.html
MTD API 및 MTD Test
http://www.linux-mtd.infradead.org/doc/general.html
아래는 Mircorn의 기술자료 이며, 현재 MTD 구조를 보여주고 있다.
tn0025_enabling_flash_in_linux_mtd.pdf (micron) |
1.2 MTD의 Device의 기본사용법
아래 참조
http://etutorials.org/Linux+systems/embedded+linux+systems/Chapter+7.+Storage+Device+Manipulation/7.1+MTD-Supported+Devices/
http://processors.wiki.ti.com/index.php/MTD_Utilities
1.3 NAND를 사용할 경우 필요한 기술
1. Wear-leveling 란 ?
Flash Memory일 경우 NAND or NOR는 File system을 사용하면, 한 영역을 자주 지우고, 쓰는 경향이 존재한다.
하지만, Flash Memory에는 Erase와 Write의 수명이 존재하기 때문에 이를 방지하기 위해서 Flash Memory에 Level을 두어 여러군데에 골고루 사용하도록 하는 기술이다.
http://kr.apacer.com/business/technology/wear-leveling
2. BBM(Bad Block Management)
이 Bad Block도 Factory Bad Block과 Run Time Bad Block 로 크게 두 가지로 분류가 되며, 이 관리를 제대로 해야 저장장치로서의 신뢰성을 얻을 수 있다.
제조사는 Factory Bad Block일 경우 OOB에 이 정보를 알려주며, 그리고 현재 MTD 인 경우 따라 다르겠지만,
OOB 중 2 Byte를 사용하여 Bad Block 관련하여 사용한다.
- BBT(Bad Block Table)
그래서 2 Bit를 이용하여 기본적으로 2개의 Block을 사용하여 Table을 만들어 이를 관리한다.
3. Gabage Collection (GB)
RAM과 함께 사용되어지는 기술이며, 이는
SSD Disk 및 eMMC 관련기술 (NFTL)
http://www.qdpma.com/storage/SSD.html
1.4 Raw Flash File System 과 FTL
MTD에서는 사용되어지는 File System은 두가지로 보면될 것같다. 현재 거의 주류가 raw NAND or FTL Firmware를 포함하여,
NAND을 사용할때 필요한 기술들을 HW 상에서 모두 동작하게 하는 저장장치일 것이다.
FTL Firmware 기능을 포함한 것이, 대표적인 것들이 MMC, eMMC, SD, SSD , USB Memory 일 것이다.
Raw Flash File System은 일반적으로 Flash Memory에 MTD 상위에 있는 File System을 말한다.
하지만, 여기에는 복합적인 기능이 필요하다.
http://www.linux-mtd.infradead.org/doc/ubifs.html#L_raw_vs_ftl
http://www.linux-mtd.infradead.org/~dwmw2/mtd-upper-layers.jpeg |
http://image.slidesharecdn.com/evaluation-of-flash-file-systems-for-large-nand-flash-memory4871/95/evaluation-of-flash-file-systems-for-large-nand-flash-memory-5-728.jpg?cb=1271316564 |
위의 MTD 구성 간단히 보자.
NAND의 NFTL은 뒤에서 다시 보자.
NFTL을 사용하지 않을 경우를 MTD-RAW라고 하는데 이와 비교해서 보자.
- MTD와 NAND 연결
- MTD와 MMC, eMMC, SD, SSD 와 연결 (NFTL 필요)
- MTD- User Modules
- NFTL (NAND Flash Translation Layer)
- FTL(Flash Translation Layer)
- MTD-Char Device
- MTD-Block Device
- MTD-JFFS2
- MTD-YAFFS/2
- MTD-LOGFS
- MTD-UBIFS
- MTD- Chip Drivers
- NAND Drivers
- NOR Drivers
http://forum.falinux.com/pds/data-s2410/No11-1.pdf
1.3 MTD NFTL (Nand Flash Translation Layer)
MTD Raw를 사용하지 않고 MTD-NFTL의 기본사용이유는 Wear-Leveling 과 BBM 관리가
목적이며, 이에 대해서 좀더 자세히 알아보도록 하자.
만약 사용하지 않는다면, File system에서 이를 지원을 해야 겠다.
http://www.linux-mtd.infradead.org/doc/ubifs.html#L_raw_vs_ftl
MTD Raw를 사용하지 않고 MTD-NFTL의 기본사용이유는 Wear-Leveling 과 BBM 관리가
목적이며, 이에 대해서 좀더 자세히 알아보도록 하자.
만약 사용하지 않는다면, File system에서 이를 지원을 해야 겠다.
http://www.linux-mtd.infradead.org/doc/ubifs.html#L_raw_vs_ftl
https://en.wikipedia.org/wiki/Flash_file_system#Linux_flash_filesystems
https://digitalcerebrum.wordpress.com/random-tech-info/flash-memory/raw-flash-vs-ftl-devices/
http://d1.amobbs.com/bbs_upload782111/files_46/ourdev_684405XFKZAB.pdf
2 . MTD Raw Flash File system
FTL를 사용하지 않으며, MTD위에 바로 File system을 사용하는 Filesystem를 통칭한다.
이는 Embeded에서 주로 사용이 되어지며,
Wear-leveling 은 File system에서 BBT를 MTD에서 제공을 한다.
MTD NAND 관련 기술
http://www.linux-mtd.infradead.org/tech/mtdnand/book1.html
http://www.linux-mtd.infradead.org/tech/mtdnand/r526.html
http://www.linux-mtd.infradead.org/tech/mtdnand/r743.html
http://www.linux-mtd.infradead.org/tech/mtdnand/r804.html
2.1 Kernel 설정
http://processors.wiki.ti.com/index.php/Filesystem_in_NOR_or_NAND
http://processors.wiki.ti.com/index.php/Flash_configuration_in_the_Kernel
https://wiki.kldp.org/KoreanDoc/html/Kernel-KLDP/specmtd.html
http://www.stlinux.com/howto/Flash/MTD
NFTL vs INFTL
http://www.tldp.org/HOWTO/Disk-on-Chip-HOWTO/intro.html
2.1 JFFS2
JFFS2 clean marker requires 8 bytes
만약 BCH8을 사용하면, 14byte *4 =56 byte, 56+8 =64byte.
BBT 정보를 사용할수 없다.
NAND read 시 Run-time bad가 발생 할 수가 있어,아래가면, AM335x JFFS2를 사용하지 않는다.
https://en.wikipedia.org/wiki/JFFS2
http://processors.wiki.ti.com/index.php/AM335x_JFFS2_Support_Guide#Reasons_for_disabling_JFFS2_support
2.2 UBIFS
UBI는 완벽한 FTL(flash translation layer)는 아니지만, bad block과 wear leveling 기능을 제공을 하며,
erase block management를 제공을 한다.
UBIFS는 UBI(Unsorted Block Image)와 UBIFS로 분리된다.
UBIFS raw flash 을 위해 만들어진 FILE SYSTEM 이며, B+ Tree를 사용하여 구성이 되어있다고 한다.
처음 노키아에서 만들어져서 사용되어져 있다고 한다.
ECC의 사용폭이 넓은 것 같다.
UBI drivers/mtd/ubi
MTD drivers/mtd
NAND , NOR, OneNAND
sudo mkfs.ubifs -q -m 2048 -e 129024 -c 1023 -r mypath -o ubifs.img
sudo ubinize -o ubi.img -m 2048 -p 131072 -s 512 ubinize.cfg
mount 및 kernel args
$ mount -t ubifs ubi0:rootfs /mnt/ubifs
rw ubi.mtd=4,2048 rootfstype=ubifs root=ubi0:rootfs
UBIFS BAD BLOCK MARK
http://www.linux-mtd.infradead.org/doc/ubi.html#L_torturing
http://www.linux-mtd.infradead.org/doc/ubi.html#L_max_beb
기타자료
https://en.wikipedia.org/wiki/UBIFS
http://www.linux-mtd.infradead.org/faq/ubifs.html
http://wiki.linpert.de/index.php?title=UBIFS
http://processors.wiki.ti.com/index.php/UBIFS_Support
http://www.linux-mtd.infradead.org/faq/ubifs.html
http://www.linux-mtd.infradead.org/doc/ubifs_whitepaper.pdf
http://www.linux-mtd.infradead.org/doc/ubidesign/ubidesign.pdf
http://www.linux-mtd.infradead.org/doc/ubifs.pdf
1.3 YAFFS1/2
위의 unstable bits문제를 yaffs2를 교체하므로써 해결이 되었다고 한다.
http://forum.falinux.com/zbxe/index.php?document_srl=786065&mid=device_driver
http://yaffs.net/lurker/message/20140710.203207.b2255691.it.html
https://en.wikipedia.org/wiki/YAFFS
1.1 How To make JFFS2/YAFFS2/UBIFS/CRAMFS
http://processors.wiki.ti.com/index.php/HOWTO_Create_Filesystems_on_DaVinci
http://processors.wiki.ti.com/index.php/TI81XX_PSP_UBOOT_User_Guide#Creating_UBIFS_File-System
Benchmark result
http://elinux.org/images/9/9a/CELFJamboree29-FlashFS-Toshiba.pdf
http://forum.falinux.com/zbxe/index.php?document_srl=786065&mid=device_driver
3 MTD FTL File-system
Flash 기반으로 NAND 관련 Contoller가 포함이된
SD Card/MMC 와 eMMC 그리고, USB Storage 사용한다.
/dev/mmcblk0
http://elinux.org/images/b/b6/EMMC-SSD_File_System_Tuning_Methodology_v1.0.pdf
https://wiki.linaro.org/WorkingGroups/KernelArchived/Projects/FlashCardSurvey
ext3/ext4
btrfs
f2fs
https://digitalcerebrum.wordpress.com/random-tech-info/flash-memory/raw-flash-vs-ftl-devices/
http://d1.amobbs.com/bbs_upload782111/files_46/ourdev_684405XFKZAB.pdf
2 . MTD Raw Flash File system
FTL를 사용하지 않으며, MTD위에 바로 File system을 사용하는 Filesystem를 통칭한다.
이는 Embeded에서 주로 사용이 되어지며,
Wear-leveling 은 File system에서 BBT를 MTD에서 제공을 한다.
MTD NAND 관련 기술
http://www.linux-mtd.infradead.org/tech/mtdnand/book1.html
http://www.linux-mtd.infradead.org/tech/mtdnand/r526.html
http://www.linux-mtd.infradead.org/tech/mtdnand/r743.html
http://www.linux-mtd.infradead.org/tech/mtdnand/r804.html
2.1 Kernel 설정
http://processors.wiki.ti.com/index.php/Filesystem_in_NOR_or_NAND
http://processors.wiki.ti.com/index.php/Flash_configuration_in_the_Kernel
https://wiki.kldp.org/KoreanDoc/html/Kernel-KLDP/specmtd.html
http://www.stlinux.com/howto/Flash/MTD
NFTL vs INFTL
http://www.tldp.org/HOWTO/Disk-on-Chip-HOWTO/intro.html
http://elinux.org/images/9/9a/CELFJamboree29-FlashFS-Toshiba.pdf |
2.1 JFFS2
JFFS2 clean marker requires 8 bytes
만약 BCH8을 사용하면, 14byte *4 =56 byte, 56+8 =64byte.
BBT 정보를 사용할수 없다.
NAND read 시 Run-time bad가 발생 할 수가 있어,아래가면, AM335x JFFS2를 사용하지 않는다.
https://en.wikipedia.org/wiki/JFFS2
- TI가 JFFS2 지원을 중단한 이유
- UBIFS를 권하고 있으며, UBIFS는 JFFS2의 다음 모델이며, 향상된 기능을 가지고 있다.
- ECC layout이 RBL, SPL, U-BOOT , ECC의 알고리즘인 BCH8이 호환이 가능.
http://processors.wiki.ti.com/index.php/AM335x_JFFS2_Support_Guide#Reasons_for_disabling_JFFS2_support
2.2 UBIFS
http://www.linux-mtd.infradead.org/doc/ubidesign/ubidesign.pdf |
UBI는 완벽한 FTL(flash translation layer)는 아니지만, bad block과 wear leveling 기능을 제공을 하며,
erase block management를 제공을 한다.
UBIFS는 UBI(Unsorted Block Image)와 UBIFS로 분리된다.
UBIFS raw flash 을 위해 만들어진 FILE SYSTEM 이며, B+ Tree를 사용하여 구성이 되어있다고 한다.
처음 노키아에서 만들어져서 사용되어져 있다고 한다.
- 장점
ECC의 사용폭이 넓은 것 같다.
- 구성
UBI drivers/mtd/ubi
MTD drivers/mtd
NAND , NOR, OneNAND
- 아래의 예제
sudo mkfs.ubifs -q -m 2048 -e 129024 -c 1023 -r mypath -o ubifs.img
sudo ubinize -o ubi.img -m 2048 -p 131072 -s 512 ubinize.cfg
mount 및 kernel args
$ mount -t ubifs ubi0:rootfs /mnt/ubifs
rw ubi.mtd=4,2048 rootfstype=ubifs root=ubi0:rootfs
UBIFS BAD BLOCK MARK
http://www.linux-mtd.infradead.org/doc/ubi.html#L_torturing
http://www.linux-mtd.infradead.org/doc/ubi.html#L_max_beb
기타자료
https://en.wikipedia.org/wiki/UBIFS
http://www.linux-mtd.infradead.org/faq/ubifs.html
http://wiki.linpert.de/index.php?title=UBIFS
http://processors.wiki.ti.com/index.php/UBIFS_Support
http://www.linux-mtd.infradead.org/faq/ubifs.html
http://www.linux-mtd.infradead.org/doc/ubifs_whitepaper.pdf
http://www.linux-mtd.infradead.org/doc/ubidesign/ubidesign.pdf
http://www.linux-mtd.infradead.org/doc/ubifs.pdf
위의 unstable bits문제를 yaffs2를 교체하므로써 해결이 되었다고 한다.
http://forum.falinux.com/zbxe/index.php?document_srl=786065&mid=device_driver
http://yaffs.net/lurker/message/20140710.203207.b2255691.it.html
https://en.wikipedia.org/wiki/YAFFS
1.1 How To make JFFS2/YAFFS2/UBIFS/CRAMFS
http://processors.wiki.ti.com/index.php/HOWTO_Create_Filesystems_on_DaVinci
http://processors.wiki.ti.com/index.php/TI81XX_PSP_UBOOT_User_Guide#Creating_UBIFS_File-System
Benchmark result
http://elinux.org/images/9/9a/CELFJamboree29-FlashFS-Toshiba.pdf
http://forum.falinux.com/zbxe/index.php?document_srl=786065&mid=device_driver
3 MTD FTL File-system
Flash 기반으로 NAND 관련 Contoller가 포함이된
SD Card/MMC 와 eMMC 그리고, USB Storage 사용한다.
/dev/mmcblk0
http://elinux.org/images/b/b6/EMMC-SSD_File_System_Tuning_Methodology_v1.0.pdf
https://wiki.linaro.org/WorkingGroups/KernelArchived/Projects/FlashCardSurvey
ext3/ext4
btrfs
f2fs
댓글 없음 :
댓글 쓰기