APK003 램디스크를 쓸것인가? MTD를 쓸것인가?
==============================================

1. 개요

이 문서는 ESP-NS에서 동작하는 응용 프로그램을 실장하는 파일 시스템으로 램디스크를 사용할것인지
아니면 MTD를 사용할 것인지를 결정할때 도움을 주기 위한 문서입니다.

작성자 : 유영창
frog@falinux.com
작성일 : 2004년 9월 6일
수정일 :

관련된 ADK( Application Developer Kit ) 디렉토리

없음

2. 파일 시스템

응용 프로그램이 동작하기 위해서는 파일 시스템이 반드시 필요합니다.

윈도우즈 프로그램만 하시던 분들은 이 파일 시스템에 대한 관심이 필요한 시점은 딱 한번! 윈도우 운영체제 설치시에만 필요합니다. NTFS 라는 이름을 가지는 것이 바로 그것입니다.
(물론 설치가 빈번해지면 이 한번이 여러번 되죠 ㅜㅜ)

그래서 파일 시스템이 왜 필요한지도 모르고 살아갑니다.(부럽습니다.)

그러나 임베디드 시스템에 리눅스를 사용하고 응용 프로그램을 적재하는 과정에서는 이 파일 시스템에 대한 이해가 필요합니다.더불어 램디스크나 MTD와 같은 블럭 디바이스 드라이버에 대한 이해도 필요합니다.

솔찍히 저도 윈도우 프로그램만 작성하다가 리눅스로 넘어 오면서뭐 이딴것을 알아야 하는가에 대한 고민도 했읍니다. 하지만 어쩔 수 없이 알아야 하는 내용입니다.

우리는 두가지 개념에 대하여 이해가 필요합니다.

첫번째는 저장 매체를 다루는 블럭 디바이스 드라이버와 관련된내용입니다.

두번째는 저장 매체에 파일을 저장하고 관리할 수 있는 파일시스템에 대한 내용입니다.


2. 블럭 디바이스 드라이버

임베디드 시스템은 전원이 소실되어도 데이터를 지속적으로 보관하거나 보드에서 동작하는 응용프로그램( 펌웨어라고도 합니다. )을 담고 있는 물리적인 매체가 필요합니다.

이런 저장 매체에는 ROM을 사용하기도 하고 RAM을 사용하기도 하고 플래쉬 메모리를 사용하기도 하고 하드 디스크를 사용하기도 합니다.

그러나 이 글은 ESP 보드에서 동작하는 응용 프로그램울 작성하는 방법에 대한 내용이므로 RAM 과 플래쉬 메모리와 관련된 이야기만 하겠읍니다.

여기서 의문을 제기하시는 분이 있을 겁니다.

"RAM 이라니? 그건 전원이 나가면 내용이 소실되는데?"

맞습니다. RAM은 전원이 나가면 내용이 소실됩니다. 그러나 이야기 전개상 필요하므로 넘어 갔으면 좋겠읍니다.
( 싫으면 이 글을 더 이상 읽지 마세요.. 쩝 )

리눅스에서 저장 장치를 다루는 디바이스 드라이버가 블록 디바이스 드라이버 입니다. 물론 이 저장 장치라는 것은 소프트웨어 관점으로 보았을때 하드 디스크와 같은 특성을 가지는 것들을 말합니다.

임베디드 리눅스에서 블록 디바이스 드라이버로 주로 사용되는 것에는 램디스크,MTD 가 있읍니다.

램디스크는 램을 이용해서 하드 디스크를 흉내내는 것입니다.
MTD는 플래쉬 메모리를 이용해서 하드 디스크를 흉내 내는 것입니다.

램디스크는 보드에 장착된 램을 이용합니다.

MTD는 NOR 나 NAND 플래쉬 메모리를 이용하여 구현합니다

여기서 잠깐 저장 장치로서 NOR 와 NAND 플래쉬중 어떤 것이 우수한가를 살펴 봅시다.

제 경험상 NOR 계열의 플래쉬보다는 NAND 계열의 플래쉬가 저장장치로 사용하기에는 더 좋습니다. 데이터를 써 넣는 속도가 더 빠르고 데이터를 읽어 오는 속도나 용량 대비 단가가 더 싸고 안정적입니다.

하드웨어 설계자 입장에서 보면 NAND 계열의 플래쉬보다는 NOR 계열의 플래쉬가 더 유리합니다. 왜냐하면 부팅 롬으로 바로 이용이 가능하고 부가 회로가 별로 필요 없기 때문입니다.

대량 양산 보드에서는 가격적인 문제라면 NAND가 유리합니다. 반면 양산 생산 관리에서는 NOR가 유리합니다

ESP 보드는 NAND 플래쉬를 사용한 저장방식입니다 (저희 회사 보드들이 다 그렇죠... 다 경험의 산물입니다. )

아무래도 이 글은 ESP 와 관련된 보드를 중심으로 설명하는 것이므로 NAND 플래쉬 관점에서 이야기 해야 겠죠...

어찌 되었든 ESP 보드는 두가지 블럭 디바이스 드라이버를 사용할 수 있읍니다.

1) 램을 이용한 램디스크 시스템
2) NAND 플래쉬를 이용한 MTD 시스템

ESP 보드는 처음 판매될 때 램디스크를 이용하고

/app 디렉토리에 NAND 플래쉬에 접근할수 있는 MTD 시스템이 마운트되어 있읍니다.

이 두가지 장치는 모두 동시에 사용 가능합니다.

3 파일 시스템

램디스크나 NAND 플래쉬를 이용한 MTD가 있다고 해서 파일을 읽거나 쓸수는 없습니다.

왜냐하면 해당 저장 장치에 어떤식으로 파일을 기록해야 하는 방법이 없기 때문입니다

즉 블록 디바이스 드라이버라는 것은 단순히 섹터단위로데이터를 어떻게 기록하고 읽는 방법만 제공하기 때문입니다.

그러나 파일을 읽고 쓰기 위해서는 디렉토리도 관리해야 하고 파일 명이나 기타 정보도 관리해야 합니다.

이렇게 섹터단위로 읽고 쓸수 잇는 장치에 파일을 저장하고 읽도록 하는 것이 파일 시스템입니다

리눅스는 이런 파일 시스템으로 사용할수 있는 것은 여러가지가 있읍니다. 가장 대표적인것인 EXT2 라는 파일 시스템입니다.

ESP 보드에서는 EXT2 파일 시스템은 램디스크에 사용하고 있습니다. PC 의 하드 디스크에는 최근에는 EXT3 가 가장 많이 사용되고 있습니다. (배포판이 이 파일 시스템을 사용하기 때문이 가장 큰 이유죠 )

이외에도 ESP 보드에서는 YAFFS 파일 시스템을 사용합니다. 이 YAFFS 파일 시스템은 리눅스에 정식으로 포함되어 있지 않습니다. 하지만 NAND 파일 시스템에 사용하기에는 제 경험상 이놈이 딱! 입니다.

NAND 플래쉬나 NOR 플래쉬에 사용되는 것으로는 JFFS2 가 있읍니다.
NOR 플래쉬라면 아무래도 JFFS2 가 더 좋습니다.

ESP 보드에는 YAFFS 를 사용하기 때문에 JFFS2 에 대한 이야기는 하지 않겠지만 여러분에게 주의 사항은 이야기 하고 싶습니다.

JFFS2는 치명적인 결함이 있습니다. ( 지금은 고쳐졌는지 잘 모르겠읍니다. ) JFFS2에 사용하는 파티션이 2에 지수 단위로 나누어 지지 않으면 지속적인 파일을 기록하는 경우에는 리눅스 시스템이 죽어 버립니다.
원인은 저도 잘 모르겠읍니다. ㅜㅜ
또 플래쉬의 크기가 커지면 시스템 메모리를 많이 사용해 버립니다.  32M 정도의 NOR 플래쉬라면 큰 문제는 없지만 그 이상의 메모리를 사용하게 되면 문제가 될 소지가 있읍니다.

이 점은 JFFS2 파일 시스템을 사용하시는 분들은 조심하시기 바랍니다.

어쨌든 여기서 파일 시스템을 정리하면 다음과 같습니다.

RAM : 램디스크 : EXT2
NAND 플래쉬 : MTD : YAFFS
NOR 플래쉬 : MTD : JFFS2

이것이 ESP 보드에 사용되는 파일 시스템의 구성 정리 입니다.


4. 램디스크와 램디스크 이미지

램디스크는 램에 하드 디스크처럼 저장을 할수 있도록 합니다.

그..런..데

램은 전원이 나가면 소실됩니다.

원래 램디스크는 다음과 같은 과정을 거쳐야 사용 가능합니다.

[root@ESP /] mkfs.ext2 /mtd/ram0
[root@ESP /] mount /mtd/ram0 /test

이렇게 하면 /test 디렉토리에 파일을 만들면 램디스크에 데이터를 저장할 수 있읍니다.

그러나 보드에 전원이 나가면 데이터는 소실됩니다.  또 보드가 부팅될 때 램디스크를 루트로 사용하려고 해도
파일 시스템도 안 만들어져 있고 내용도 없기 때문에 루트 파일 시스템으로 사용이 불가능합니다.

그래서 이런 점을 해결하기 위해서 램디스크 이미지라는 것을 사용합니다.

램디스크 이미지는 램디스크에 EXT2 포맷으로 만들고 필요한 파일을 모두 넣은 후에 램 디스크의 내용을 모두 파일 형태로 복사한 파일입니다.리눅스 커널은 이 파일의 내용이 있는 위치를 지정하면 해당 내용을 부팅시에 램디스크에 모두 옮겨 넣습니다. 이때 커널은 램디스크 이미지가 압축되어 있다고 가정합니다.

ESP 에서는 이지부트가 이 압축된 램디스크 이미지를 특정 램에 복사해 놓고 커널 부팅전에 커널에 이 이미지 데이터가 어디 잇는지를 알려 줍니다.

그래서 커널은 부팅 후 루트로 램디스크 이미지를 사용 할수 있는 겁니다.

5. 램디스크를 사용할 것인가 아니면 MTD에 YAFFS를 사용할 것인가

이제 결론적으로 이 두가지에 대한 결론을 내려 봅시다.

램디스크 이미지를 이용하여 응용 프로그램을 탑재하고 사용할것인가 아니면 YAFFS 파일 시스템을 이용하여 NAND 플래쉬를 이용하여  응용 프로그램을 탑재하고 사용할 것인가..

이 두가지 중 하나를 선택하기 위해서는 각각의 장단점을 알아야 합니다.

5.1 램디스크 이미지를 이용하는 방법의 장점 과 단점

램디스크 이미지를 이용하는 장점은 딱! 두가지 입니다.  그 외에는 장점이 별로 없읍니다.

첫번째 장점은 시스템이 안정적이라는 것입니다.

램디스크는 응용 프로그램이나 기타 등등의 이상이 있을 때 파일 시스템을 박살내더라도 전원만 껐다가 키거나 리부팅이 되면 원위치가 됩니다.

두번째 장점은 많은 수량의 보드를 제작할때 쉽게 전체 시스템을 설치할 수 있습니다.
즉 부트로더 + 커널 + 램디스크 이미지 를 한꺼번에 실장하면 됩니다.

그...러...나

가장 큰 단점은 개발시에 무척 불편하다는 것입니다.  항상 램디스크 이미지를 매번 만들어야 합니다.
(물론 nfs 파일 시스템을 이용해서 개발하고 나중에 한번에 써 넣어도 되죠 )

또 다른 단점은 응용 프로그램의 업그레이드를 하려면 골치아프다는 것입니다. 원격지에서 자동으로 응용 프로그램을 업데이트 하려면 결국  램디스 이미지를 통째로 바꾸어야 하는데 이게 만만한 작업이 아닙니다.


5.2 YAFFS 파일 시스템을 사용할때의 장점 과 단점

YAFFS 파일 시스템을 이용해서 개발할 때 가장 큰 장점은  개발할때 편리하다는 것입니다.

하드 디스크에 저장하는 것과 같은 기분으로 응용 프로그램이나 기타 데이터를 그대로 복사하여 사용하면 됩니다.

/etc/ 나 기타 등등에 필요한 파일을 복사만 하면 전원을 껐다가 켜도 보관이 됩니다.

이에 반해 많은 제품을 양산하기에는 일일히 복사해야 하는 단점이 있고 파일 시스템이 깨지는 경우 ( 거의 없읍니다만 ) 시스템이 사용 불가능해 지는 단점이 있습니다.

5.3 결론

저는 램디스크 이미지 형식을 사용하는 것보다 MTD에 YAFFS 을 이용하기를 권합니다.

개발시에 편하고 생각보다도 안정적이기 때문입니다.  실제로 제가 YAFFS에서 데이터가 깨지는 경우는 본적이 없읍니다.  (하드웨어가 고장나서 깨지는 경우는 보았읍니다. ㅜㅜ )

가장 큰 이유는 저 같은 게으른 사람에게는 개발시에 무척 편리하다는  것입니다.

'Device Driver > Memory' 카테고리의 다른 글

물리메모리 가상메모리 매핑방법  (0) 2009.06.22
ioremap() VS. phys_to_virt()  (0) 2009.06.17
MTD(Memory Technology Device)  (0) 2009.06.08
Common Flash Interface(CFI)  (0) 2009.06.08

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,