|
수많은 삽질끝에 QEMU 를 활용하여 안드로이드 포팅기술을 실습해 볼 수 있는 방법을 찾았습니다.
http://mtcc.kr/?mid=camp_techdata 에 접속해 보시면, 삽질의 흔적을 보실 수 있습니다.
방법을 알려드리겠습니다.
1. 업그레이드 된 QEMU 바이너리 설치하기
우분투에서 다음과 같이 최신의 QEMU 바이너리를 설치합니다. $sudo apt-get install qemu
2. QEMU용 안드로이드 루트파일시스템 생성하기
먼저, 안드로이드 전체소스를 빌드 하십시오.
파일시스템이 저장될 디스크이미지 생성 $dd if=/dev/zero of=rootfs.ext2 bs=1024 count=128000
ext2 파일시스템으로 포멧하기 $mkfs.ext2 rootfs.ext2
loop back디바이스로 마운트 하기 $mkdir tmproot $sudo mount -o loop rootfs.ext2 tmproot
안드로이드 파일시스템을 마운트된 디스크이미지로 복사하기 $cd tmproot $cp -r <여러분의 안드로이드 소스 저장된 경로>/out/target/product/generic/root/* . $cp -r <여러분의 안드로이드 소스 저장된 경로>/out/target/product/generic/data/ . $cp -r <여러분의 안드로이드 소스 저장된 경로>/out/target/product/generic/system/ .
안드로이드 루트파일 시스템이 rw로 mount 되도록 init.rc 수정 --->이유는 아시는분은 아실껍니다.... ^_^ $vi init.rc 다음의 부분을 찾아서 mount rootfs rootfs / ro remount 다음과 같이 수정합니다. mount rootfs rootfs / rw remount 저장후 빠져나옵니다.
루프백 디스크이미지 언마운트 하기 $cd .. $sudo umount tmproot
3. QEMU를 기동하여 안드로이드를 부팅하기 첨부된 커널이미지를 받아서 pwd에 저장합니다.
다음의 명령으로 안드로이드를 기동해 보십시오
$qemu-system-arm -kernel zImage.versatile -M versatilepb -hda rootfs.ext2 -usb -usbdevice wacom-tablet -no-reboot -append "root=/dev/sda rw rootfstype=ext2 init=/init "
4. 보너스, ^_^ - QEMU용 안드로이드 커널 빌드하기
$cd <여러분의 안드로이드 소스 저장된 경로>/kernel $make menuconfig ARCH=arm
타겟 디바이스를 versatile 로 설정하고, 각종 안드로이드 feature와, SCSI하드디스크, 등 적절한 디바이스를 설정합니다. 다음의 명령으로 커널을 빌드합니다.
$make ARCH=arm CROSS_COMPILE=<여러분의 안드로이드 소스 저장된 경로>/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
============================================================================= 현재, 안드로이드 부팅화면만 볼 수 있고, 마우스 이벤트는 전달되는데,.. 좌표값이 제데로 전달되지 않고 있습니다. 안정적인 동작을 위해서는 더 많은 삽질이 필요할 것 같습니다.
좀 더 자세히 설명드리고 싶지만, 개인시간이 여의치 않고, 저도 지식의 한계가 있어서,...
고수님들의 많은 추가작업 부탁드립니다.
|
|