2/15/2015

MTD-Linux Embeded File system (추후 자료 수정)

1. MTD(Memory Technology Devices)

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)
NAND는 NOR Type의 Flash와 달리 기본적으로 Bad Block이 존재하며, 이를 보완하기 위해 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)
BBM의 한 종류로 MTD에서 사용하는 기술이며, Bad Block 정보를 가지고 Bad Block을 판단할수 있지만, Factory Bad Block과 Worn Bad Block은 구분할 수가 없다.
그래서 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라고 하는데 이와 비교해서 보자.



  1. MTD와 NAND 연결 
  2. MTD와 MMC, eMMC, SD, SSD 와 연결 (NFTL 필요)


  • MTD- User Modules
  1. NFTL (NAND Flash Translation Layer)
  2. FTL(Flash Translation Layer)
  3. MTD-Char Device
  4. MTD-Block Device
  5. MTD-JFFS2 
  6. MTD-YAFFS/2
  7. MTD-LOGFS
  8. MTD-UBIFS

  • MTD- Chip Drivers
  1. NAND Drivers 
  2. 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

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


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 지원을 중단한 이유
  1. UBIFS를 권하고 있으며, UBIFS는 JFFS2의 다음 모델이며, 향상된 기능을 가지고 있다. 
  2. 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를 사용하여 구성이 되어있다고 한다.
처음 노키아에서 만들어져서 사용되어져 있다고 한다.



  • 장점
빠른 속도와 FILESYSTEM의 가벼운이 큰 장점이며, OOB영역을 적게 사용하여
ECC의 사용폭이 넓은 것 같다.
  • 구성
             UBIFS                /fs/ubifs
             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



댓글 없음 :