2009.12.08 15:41

[Android] SDK Build시 SDCard 인식 오류 문제

Custom SDK로 Build한 경우 SDcard를 지정했음에도 불구하고 SDCard가 인식되지 않는 경우가 있는데 target의 경우 sdcard의 삽입이나 분리를 통해 mount를 인식하게 되어 있다. SDK는 해당 이미지를 로딩하도록 되어 있는데 초기에 mount를 하지 않아 sdcard의 인식이 되지 않는 문제가 있다. (cupcake 기준) 이럴 경우 Emulator를 실행 후 ADB shell에서 다음과 같이 sdcard를 mount 해 주면 된다.

1. Root 권한으로 adb 실행

> cd android-sdk-windows-1.5_r2\tools
> adb root

2. Shell 진입

> adb shell

3. Mount 정보 확인

# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0

4. SDcard Mount

#mount -rw -t vfat /dev/block//vold/179:0 /sdcard

마운트가 되었는지 다시 확인 해 보면 다음과 같이 나온다

# mount
mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
/dev/block//vold/179:0 /sdcard vfat rw,fmask=0000,dmask=0000,allow_utime=0022,co
depage=cp437,iocharset=iso8859-1 0 0

근데 이렇게 할 경우 emulator를 실행할 때 마다 이와 같은 작업을 해야하므로 여간 귀찮은 일이 아닐 수 없다. 그럴 경우 아래와 같이 core의 makefile을 수정하는 방법을 이용한다.

$ANDROID_ROOT/build/core/main.mk : 214 line
# Install an apns-conf.xml file if one's not already being installed.
ifeq (,$(filter %:system/etc/apns-conf.xml, $(PRODUCT_COPY_FILES)))
  PRODUCT_COPY_FILES += \
        development/data/etc/apns-conf_sdk.xml:system/etc/apns-conf.xml
  ifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)
    $(warning implicitly installing apns-conf_sdk.xml)
  endif
endif

이 코드 다음에 아래와 같이 vold.conf에 대한 정보를 추가한다.

ifeq (,$(filter %:system/etc/vold.conf:, $(PRODUCT_COPY_FILES)))
  PRODUCT_COPY_FILES += \
        development/data/etc/vold.conf:system/etc/vold.conf
  ifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)
    $(warning implicitly installing vold.conf)
  endif
endif

생성된 system.img를 직접 수정하여 vold.conf를 넣을 수도 있을 수도 있겠지만 system.img 파일은 yaffs2라는 format으로 되어 있다. yaffs2 는 android에서만 이용하는 것이므로 NAND Boot용으로 만들어진 Format이라고 한다. 따라서, 직접 수정은 어렵고 위와 같이 makefile을 수정하는 편이 더 편하다.
Trackback 1 Comment 1