이지랑드로랑 - 8장. SD 카드와 VOLD
전 시간에 사운드를 살리고 소리를 들어보자고 하더니... 소리는 들어보지도 못하고 다음장이 되었습니다.
이번장의 목표는 SD 카드만을 메모리스틱으로 인지하는 안드로이드의 입맞을 맞춰주는 일입니다.
이지보드에 SD 카드를 딱! 하고 꼽으면 안드로이드가 털컥!! 하고 인지할 수 있게만 해주면 됩니다.
[그림8-1. 안드로이드는 SD/MMC 카드를 원해]
안드로이드는 사용자가 가지고 있는 확장메모리 카드, SD 카드를 사용할 수 있습니다.
저는 A사의 스마트폰을 사용하고 있는데, 사실 초강력 기능에 아쉬운게 베터리와 바로 이 SD/MMC 메모리 부분이죠.
그런데 안드로이드는 기본적으로 사용자가 촬영하는 사진이나 음악, 비디오가 모두 SD 카드에 들어가게 됩니다.
그래서 반드시 SD 카드를 마운트 해 줘야만 정상적인 멀티미디어 안드로이드 환경을 느낄 수 있다 이거죠.
VOLD vs MOUNTD
안드로이드 1.5 Cupcake 이전 버전에서 안드로이드 포팅을 해보셨던 분은 이것이 무엇인가? 하실 겁니다.
네, 그 이전에는 mountd 라는 장치 마운트 데몬이 있었습니다.
그런데 이것이 버전업이 되면서 vold 라는 장치 마운트 데몬으로 바뀐 것 뿐입니다. 기능적으로는 동일합니다.
mountd 도 안드로이드 소스에 들어 있습니다만 빌드 옵션에서 빠져 있을 뿐입니다.
마지막 장에서 mountd 를 컴파일 하게 하는 것도 해볼 수 있도록 하겠습니다.
자, 그렇다면 이제 필요한 파일 중 하나를 찾아보도록 할 꺼에요.
vold 라는 데몬 프로그램은 이미 컴파일이 되어서 안드로이드 파일 시스템에 잘 들어가 있으니까 따로 넣을 필요 없습니다.
그런데 우리 기존 SD 카드가 마운트가 안되는 문제가 있었잖아요.
그건 데몬 프로그램이 vold.conf 파일을 찾지 못해서 그런 문제에요.
Setp 1. vold.conf 파일 찾아보고 수정하기
자! 일단 vold.conf 파일이 어디 붙어있는지 찾아보도록 하죠.
# cd {Android_SRC} # find . -name vold.conf
이렇게 하면 파일이 정상적이라면 두개가 나타날 껍니다. (안나오면 비정상일까요? 글세요, 업데이트가 되서 그럴수도 있죠;)
hyowon@android-1.5-ezrang_drorang$ find . -name vold.conf ./development/data/etc/vold.conf ./vendor/htc/dream-open/vold.conf
제가 해보니까 결과물이 두개 나왔습니다.
음~ 전 벤더인 HTC의 vold.conf 파일을 보고 싶군요. 한번 보죠.
# vi ./vendor/htc/dream-open/vold.conf
## vold configuration file for Dream volume_sdcard { ## This is the direct uevent device path to the SD slot on the device media_path /devices/platform/msm_sdcc.2/mmc_host/mmc1 emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc0 media_type mmc mount_point /sdcard ums_path /devices/platform/usb_mass_storage/lun0 }
자! 이거에요! 우리는 이 부분에서 media_path 라고 선언되는 부분만 보기 좋게 고치면 됩니다.
그럼 우리의 파일 시스템에 복사를 하고 한번 달려 보도록 하죠.
# cp ./vendor/htc/dream-open/vold.conf ./out/target/product/generic/system/etc/. # vi ./out/target/product/generic/system/etc/vold.conf
## vold configuration file for Dream volume_sdcard { ## This is the direct uevent device path to the SD slot on the device media_path /devices/platform/s3c-sdhci.0 emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc0 media_type mmc mount_point /sdcard ums_path /devices/platform/usb_mass_storage/lun0 }
내용을 위와 같이 바꿔주시는 겁니다.
이지보드는 S3C6410 칩을 사용하고 있으니까, HTC 제품이랑은 틀려서 그런 것 입니다.
아래 에뮬레이터 디바이스 정보는 그냥 지우셔도 되고 저렇게 놔두셔도 무관합니다.
Step2. RootFS 바꾸고 테스트하기
이제 RootFS 를 다시 구성해보도록 하겠습니다.
# cp {Android_SRC}/out/target/product/generic/system/etc/* /nfs/ezrang_drorang_rootfs/system/etc/. -a # mkdir /nfs/ezrang_drorang_rootfs/sdcard # mkdir /nfs/ezrang_drorang_rootfs/cache # mkdir /nfs/ezrang_drorang_rootfs/sqlite_stmt_journals
SD 카드가 마운트될 디렉토리, 그리고 Cache 디렉토리와 SQLite 정보들이 담길 디렉토리를 만들어 준 겁니다.
SD 카드에 이미지들이 있을 때 썸네일을 만들어서 각각의 디렉토리에 나눠 담거든요.
이렇게 하신 뒤, 우리가 자주 하는데로 NFS를 이용해서 보드에 복사를 합니다.
잊지마세요! 이지부트에서 LR (램디스크 부팅 설정) 하셔야 합니다!
이건 앞으로 무수히 많이 할 꺼니까 잊으신 분들은 1장 꼭 참고하시기 바랍니다. (여기선 생략 합니다)
[그림8-2. SD 카드를 슬롯에 찌워넣는다]
[그림8-3. SD 카드가 들어가기 전, 음악 재생 프로그램을 실행한 모습]
[그림8-4. SD 카드가 들어가면 곧 바로 SD 카드 스캔을 하고 목록을 갱신]
자, 그럼 소리가 잘 나고 플레이가 됩니다.
영상도 특별한 일 아니면 잘 나올겁니다. 한번 SD 카드에 이런저런 미디어 파일들을 넣고 돌려보세요. (음악:MP3 / 영상:MPEG4)
이제 좀 쓸만하죠?
자! 그런데 전 나름 불편한게 조금씩 보이고 있습니다.
다음 시간에는 어떤 문제점을 해결해 볼까요?
힌트를 드리자면 개발하는데 불편한 안드로이드의 몇가지를 꼼지락 꼼지락 바꿔줄거라는 힌트를 드리도록 할께요. ^^
한번 고민해 보도록 하고! 다음시간에 봐요~
partition을 2개 나눠서 하나는(mmcblk0p2) ext3로 booting 용으로 하나느(mmcblk0p1) fat32로 mp3 파일을 저장해뒀습니다.
mmc card로 booting 은 잘 되는데.. 안드로이드 상에서 sd card 인식 안된다고 나오는데요.
mount 해서 디렉토리에 가보면 mp3 파일이 잘 보이는데요. 왜 안드로이드 상에서는 mmcard 가 안잡힐까요?
아래와 같이 vdc 명령으로 mount 해보니깐 에러가 나느데..
# vdc volume list
110 sdcard /mnt/sdcard 0
200 Volumes listed.
/ # mount -t vfat /dev/block/mmcblk0p1 /mnt/sdcard
/ # vdc volume list
110 sdcard /mnt/sdcard 0
200 Volumes listed.
/ # vdc volume mount /mnt/sdcard
612 Volume sdcard /mnt/sdcard mount failed - no media
401 volume operation failed (No such device)
강좌 너무 잘 보고 있습니다....
이제는 다음 강좌 기다려 지네요...^^;
참 수고 많으시단말 빼먹었네요... 강의 준비 하시느라 수고 많으셨습니다...
건강 조심하시고 ...늘 행복 가득하시길...바라며....화이팅 하고 외쳐 봅니다..^^*