리눅스 & 안드로이드2011. 2. 17. 14:16
SD card는 vold(아마도 volume daemon의 약자인듯)가 mount를 하도록 되어있다.

vold는 init.rc에 정의되어 있으며, kernel booting 시 시작되는 서비스 이다.

vold는 /system/etc/vold.fstab의 내용을 참고하여 본인이 mount 해야 할 device를 list로 만들어 두고 event(SDcard 탈/부착?)에 의해 mount를 시도하도록 되어 있는 것 같다.

아래는 foroyo에 포함된 vold.fstab의 내용이다.
## Vold 2.0 Generic fstab
## - San Mehat (san@android.com)
##

#######################
## Regular device mount
##
## Format: dev_mount <label> <mount_point> <part> <sysfs_path1...> 
## label - Label for the volume
## mount_point - Where the volume will be mounted
## part - Partition # (1 based), or 'auto' for first usable partition.
## <sysfs_path> - List of sysfs paths to source devices
######################

## Example of a standard sdcard mount for the emulator / Dream
# Mounts the first usable partition of the specified device
dev_mount sdcard /mnt/sdcard auto /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1

## Example of a dual card setup
# dev_mount left_sdcard /sdcard1 auto /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1
# dev_mount right_sdcard /sdcard2 auto /devices/platform/goldfish_mmc.1 /devices/platform/msm_sdcc.3/mmc_host/mmc1

## Example of specifying a specific partition for mounts
# dev_mount sdcard /sdcard 2 /devices/platform/goldfish_mmc.0 /devices/platform/msm_sdcc.2/mmc_host/mmc1
SD card를 직접 해당 디렉토리에 마운트 시키기 위해서는 다음과 같은 명령어를 사용하면 된다.

cmd> adb remount
cmd> adb shell
# su (필요 없을수도 있음)
# mount -o rw -t vfat /dev/block/<partition> /mnt/sdcard

* 여기서 <partition>은 예를들어 mmcblk0p1이 될 수 있다
* SD card는 filesystem type(-t)을 vfat으로 지정해야 한다
* rw 옵션(-o)은 default이므로 생략해도 된다
* 당연한 이야기 이겠지만, /mnt/sdcard 디렉토리는 미리 생성되어 있어야 한다
  (init.rc에 정의되어 부팅시 자동으로 생성된다)


P.S 어떤 device를 보면 대용량 플래시 메모리를 내장하면서 /mnt/sdcard를 내장 플래시 메모리를 마운트하는 포인트로 사용하고, 실제 외장 SD card는 /mnt/sdcard/ 내부에 디렉토리를 생성하고 그 디렉토리를 마운트 포인트로 사용한다. 의도적이었는지 잘 몰라서 이렇게 했는지 이유는 잘 모르겠지만, 일반적으로 SD card라 함은 탈착이 가능한 플래시메모리라고 생각하는데, 왜 이런 이상한 짓을 했는지 잘 모르겠다.-_-; 이런식으로 상식에 벗어나는 행동들을 하게되면 욕을 먹게 되는것이다;;

Posted by 세월의돌