ㅈㅅㄹ

커스텀 SDK 빌드해서 릴리즈 하고 나니, 그거 받아 돌려보던 사람들이 SD 카드가 안된다고 한다. 예전에야 혼자서 테스트하던 때니 필요할 때 단순히 shell 띄우고 mount 직접해서 썼지만, 이제 배포하는 놈이 되다보니 문제가 된다. 

찾아보니 mounting daemon으로 Volume Daemon, 즉 vold라는 놈을 쓴다고 하는데 SDK 빌드할 때 이 vold의 컨픽파일이 시스템에 알아서 설치되진 않는 듯 하다. (http://www.mail-archive.com/android-developers@googlegroups.com/msg31253.html 참고) 또한 예전에 적은, adb shell에서 직접 마운트 해주는 방법은, 그 땐 몰랐지만 단순히 쉘이나 DDMS에서 접근할 수 있을 뿐 갤러리나 카메라에서 SD 카드를 인식하지 않는 모양이다. 어쨌건 다음과 같이 build/core/main.mk를 수정하자.

# 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
# added by ysjang
# Install vold.conf to fix sd card problem
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 implicity installing vold.conf)
  endif
endif
# @@ ysjang
# If we're on an eng or tests build, but not on the sdk, and we have
# a better one, use that instead.

문제는 이 다음이다. 이 파일을 수정하고 DDMS로 밀어넣었더니 동작하지 않길래 빌드까지 새로 하고 집어넣어봤지만 여전히 SD카드가 제거되었다는 Notification이 에뮬레이터 시작하자마자 뜬다. 

같은 현상을 겪는 사람들이 있나 엄청난 구글링을 해 봤지만, 내가 구글신의 신탁을 못 받은 것인지... 어쨌건 같은 현상을 겪는 사람들을 찾기는 힘들었다. 그러다 디바이스 쪽 쉘에서 vold를 직접 실행할 때 파일을 열지 못했다는 메시지가 나왔던 게 마음에 걸려, 저 위치에 시스템 파일들이 실제로 있는 것인지 확인해야 하겠다는 생각이 들어 adb shell로 확인해 보니.... 


/sys/devices/platform/goldfish_mmc.0/mmc_host/ 아래엔 mmc1이 들어 있고, /sys/devices/platform/goldfish_mmc.1/mmc_host/  아래엔 mmc0 가 들어 있었는 기현상을 확인할 수 있었다. 일단 현재 잡혀있는 대로 vold.conf를 고치고 밀어 넣으니 잘 동작한다.

## vold configuration file for the emulator/SDK

volume_sdcard {
    ## This is the direct uevent device path to the SD slot on the device
    #emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc0
    emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc1

    media_type     mmc
    mount_point    /sdcard
    ums_path       /devices/platform/usb_mass_storage/lun0
}

뭐가 문제인지는 qemu 분석하다보면 알아낼 수 있을 것 같긴 한데, 지금 당장은 그거 파고들 여유가 없어서 여기까지만 정리함. 나중에 시간 나면 qemu 분석도 한 번 해봐야겠다.

살다 살다 이런 경우는 또 처음 보네... 뭐 쉽게 되는게 하나도 없냐 -_- 제기랄