안드로이드와 같은 임베디드 시스템에서 플래시 메모리를 리눅스의 루트 파일 시스템으로 사용하기 위해서 'MTD(Memory Technology Device) 블럭 디바이스 드라이버'라는 것을 사용합니다.

HTC 기반 안드로이드폰의 기본 MTD 파티션은 아래와 같습니다. (기기에 따라 차이가 있을 수 있습니다)

MISC - CID를 포함한 변수 항목과 특성을 기록한 파티션
RECOVERY - OS의 백업이나 업그레이드 등의 기능을 사용자가 이용할 수 있는 리커버리가 설치되는 파티션
BOOT - OS의 커널과 램디스크가 설치되는 공간으로, 커널은 OS의 가장 핵심적인 부분으로 자원(메모리, 프로세스)을 효율적으로 관리하고 시스템을 제어하는 역할을 합니다.
SYSTEM - OS의 가장 기본적이고 필수적인 소프트웨어가 설치되는 공간으로 시스템의 중요한 부분이기 때문에 일반적으로 쓰기 방지(write protection)가 설정되어 있습니다.
CACHE - 임시파일들이 저장되는 공간으로 실제 기기 사용시에는 영향을 주지 않습니다.
DATA - 실제 사용자의 데이터가 저장되는 공간입니다. 다운받아 설치한 어플이라던가 셋팅 정보, 받은 메시지 등의 사용 중인 데이터가 기록됩니다.

(기본적으로 안드로이드의 플래시 메모리 파일시스템 포맷은 yaffs2를 사용합니다)

실제로 그러한가 확인 해 봅시다!!!

adb shell이나 terminal emulator에서 cat /proc/mtd 명령을 입력하면 아래와 같은 결과값을 확인할 수 있습니다.

mtd0: 00040000 00020000 "misc"
mtd1: 00500000 00020000 "recovery"
mtd2: 00280000 00020000 "boot"
mtd3: 04380000 00020000 "system"
mtd4: 04380000 00020000 "cache"
mtd5: 04ac0000 00020000 "userdata"



'리눅스 & 안드로이드' 카테고리의 다른 글

vmlinux image 구성요소  (0) 2011.02.10
Tips for kernel build  (0) 2011.02.09
fcntl function in the start_property_service()  (0) 2011.02.07
Android Self Q&A (업데이트 중...)  (0) 2011.02.07
Redirect stderr to stdout  (0) 2011.01.31
Posted by 세월의돌
fcntl 시스템호출은 이미 열려있는 파일의 특성 제어를 위해서 사용된다.

* fcntl(fd, F_SETFD, FD_CLOEXEC);
>> exec 등으로 process를 실행하면, 기존 process를 대치하게 되는데, 이 때 다른 설정이 없으면 기본적으로 기존에 열려있던 file descriptor는 열려있던 상태로 새로운 process로 상속된다.(open-on-exec, /proc/pid/fd에서 확인가능) 이를 방지하기 위해, FD_CLOEXEC를 지정하면(close-on-exec) exec로 기존 process가 대치될 경우, 지정된 file descriptor는 닫히게 된다.

* fcntl(fd, F_SETFL, O_NONBLOCK);
>> 기본적으로 입력(Input)은 block 모드(예를들면 STDIN으로 입력을 기다리게되면, 입력이 완료될 때까지 명령어 수행이 이루어 지지 않고 대기한다)로 동작하게 되는데, O_NONBLOCK을 설정하게 되면, 입력(또는 읽을 데이터)이 없을 경우 바로 -1을 반환한다.

'리눅스 & 안드로이드' 카테고리의 다른 글

Tips for kernel build  (0) 2011.02.09
[퍼온글] MTD Partition  (0) 2011.02.07
Android Self Q&A (업데이트 중...)  (0) 2011.02.07
Redirect stderr to stdout  (0) 2011.01.31
Android Gingerbread Porting 작업일지  (0) 2011.01.31
Posted by 세월의돌