'sdcard fail'에 해당되는 글 2건

  1. 2009.12.08 [Android] SDK Build시 SDCard 인식 오류 문제 (1)
  2. 2009.12.08 [Android] SDK Build 후 Window 용 Binary 적용 (1)
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
2009.12.08 15:36

[Android] SDK Build 후 Window 용 Binary 적용

기본적으로 Android에서는 Target Build 환경은 Linux나 MacOS+MacPort 만 지원된다.

간혹 Source Tree를 수정하여 Build하는 경우도 있으나 엄청난 수고를 해야하므로 window 환경에서는 거의 불가능하다고 볼 수 있지만 분명한 것은 Android SDK는 win32용이 나오는다는 것이다. 궂이 window를 지원하지 않는 것은 아마도 compiler에 대한 이슈일 수도 있다.

암튼, 각설하고 Platform 개발이야 linux에서도 할 수도 있다지만 수정된 Platform에서 실행되는 application을 개발하는 입장에서보면 window용으로 개발 후 이를 linux용 emulator나 target에 직접 올려 테스트해야 하니 여간 불편한 일이 아닐 수 없다.

그래서 아이디어를 낸 것이 linux에서 build된 system image를 window용 SDK로 복사하여 사용하는 것이다. 물론 문제가 발생 할 수 있지만 어쩌겠는가? 그나마 Android Platform 변경 내용을 적용하여 테스트 해 볼 수 있는 방법인걸?


1. Linux 환경에서 Image 생성
기본적인 Android Build 환경은 linux 이므로 다음과 같은 명령으로 SDK를 Build를 해야 한다.
mydroid$ make sdk


2. SDK System Image 추출
Build가 완료되면 해당 Package가 다음과 같이 생성된다.
out/host/linux-x86/sdk/android-sdk_eng.user_id_linux-x86.zip

해당 파일의 압축을 풀면 다음 파일이 있는 것을 볼 수 있다.
android-sdk_eng.user_id_linux-x86/platforms/android-1.5/images/system.img

이를 window 환경으로 복사할 수 있도록 외장 메모리나 적당한 방법을 이용한다.


3. Win32 SDK를 설치 및 AVD 생성

Linux용 Build version이 1.5이므로 이를 맞춰서 설치를 해야 한다. 참고로 사용한 파일은 android-sdk-windows-1.5_r2.zip 이다.

android-sdk-windows-1.5_r2\platform\android-1.5\images\system.img


5. AVD 생성

> cd  android-sdk-windows-1.5_r2\tools
> android create avd -t 2 -n mydroid -s HVGA


6. SDCard 생성

> cd android-sdk-windows-1.5_r2\tools
> mksdcard -l SDCARD 256M extdisk256img


7. system.img 복사

SDK를 설치후 Linux SDK에서 생성한 system.img 파일을 win32용 SDK에 복사한다.
이 때 파일이 겹쳐지는데 원본파일을 덮어 쓰게 되므로 기존 파일은 백업해 두는 것이 좋다.

> copy system.img android-sdk-windows-1.5_r2\platform\android-1.5\images\system.img


8. Emulator 실행

> cd android-sdk-windows-1.5_r2\tools
> emulator -sdcard extdisk256.img -avd mydroid


※ 주의
SDK를 직접 build하는 경우 간혹 SDCard를 인식못하는 경우가 발생한다. 이럴 때는 Emulator에서 SDCard를 이용할 수 있는 configuration인 vold.conf를 추가해야 한다. 이에 대한 내용은 다음 글[안드로이드 Build 시 SDCard 인식 오류 문제]를 참고 하기 바란다.

Trackback 0 Comment 1