'디바이스 에뮬레이터'에 해당되는 글 1건

  1. 2008.11.01 :: 리눅스에서 윈도 모바일용 응용 개발하기(가 아니라 개발 환경만 꾸며보기) (2)
기술을 얘기한다 2008.11.01 18:51
마이크로 소프트의 윈도 모바일에 돌아가는 응용을 만들어보고 싶은데 그렇다고 비쥬얼 스튜디오 깔기는 싫고 (더 정확히는 쓰는 법도 모르고 얼른 보기에 너무 무겁고...) 그래서 리눅스에서 할 수는 없을까 뒤지던 중 GCC를 윈도 모바일 (또는 이전의 WinCE)용 코드를 생성하는 크로스 컴파일러로 만든 CeGCC 라는 것을 발견했다.

아싸...

필요한 파일을 다운로드 받아서 실행을 했는데... 허걱... libgmp 어쩌구가 안된다고 에러가 난다. 정확한 이유는 파악되지 않았지만 내 환경은 (AMD) 64비트 환경인데 다운 받은 패키지는 32비트 용으로 만들어져 있어서 그런 모양이다. (확실치는 않음) 어쨌든 안되는 건 안되는 것. 이럴 바에는 그냥 소스를 받아서 빌드하자.

이번에는 tar로 묶인 소스를 받아서 빌드를 해봤다. 으... 몇몇 셀 스크립트는 x 모드가 빠져있어서 chmod로 넣어주고 몇 소스는 말썽을 부리고... 이것도 쉽지 않네. 안되겠다. 최신 소스를 받아보자. 최신 소스를 받아서 빌드하는 방법을 설명해둔 글을 참조하여 svn을 이용해서 최신 소스를 내려받고 빌드를 했다. 여전히 셀 스크립트의 모드 문제와 몇몇 소스에서 fread/fwrite 의 return value 처리를 해주지 않는 문제가 있어서 빌드가 중단되었지만 적당히 수정해서 넘어가게 했다.

그리고 드디어 빌드는 성공. PATH 변수를 빌드된 바이너리에 맞춰 설정해주고 test 디렉토리 아래에 있는 몇 개의 샘플 프로젝트를 make 해보니 프로그램은 생성이 된다. 그런데 돌아가는지 어떻게 알지?

아... 윈도 모바일이 돌아가는 PDA나 핸드폰이 없으면 테스트가 불가능? 그럴리가 없다. 여기 저기 뒤적 뒤적. 음... 친절하게도 마이크로소프트에서는 장치 에뮬레이터(Microsoft Device Emulator Standalone version 3)와 그 에뮬레이터에서 돌아가는 윈도 모바일 이미지(Window Mobile 6 Localized Images <-- 여기에 가면 standard version이랑 professional version이랑 둑개 있는데 서로 약간 다른 세트의 이미지를 갖고 있는 듯. 그냥 둘다 설치했음)를 제공한다.

문제는... 얘네들은 윈도용 프로그램이라는 것. 즉, 리눅스에서는 돌릴 수가 없다는 것.

이 아니고... 이럴 때 쓰라고 있는게 wine 이다. wine은 윈도의 API를 실행할 수 있는 환경을 리눅스+X 환경에서 구현한 것이다. 그러니까 정상적인 윈도 API만 사용하는 윈도 응용은 wine 위에서 그대로 돌아간다. 그런데 그냥 맨 입에 되는 것은 아니고 너저분한 작업을 필요로 하는 경우가 많다. 남들이 이미 헛짓을 해가며 알아낸 노하우를 재활용하려고 구글신에게 물어보니 역시나... 관련 개발 메일링 리스트에 방법이 올라와 있다.

그런데 그대로 하니까 안되고 (아마 예전 버전 기준이라 그런 듯...) 이렇게 약간 뒤틀어서 하니까 되더라. 우선 처음으로 wine을 설치한 것이라면 wine 관련 파일이 아직 생성되지 않았을테니 이를 생성해준다.
$ winecfg
그냥 아무것도 안하고 닫아주면 된다. 필요한 파일은 ~/.wine 디렉토리에 만들어진다. 그냥 디바이스 에뮬레이터를 설치하면 이상한 에러가 나면서 설치가 안되는데 이렇게 해주면 된다. (이유는 묻지 말 것. 나도 모름)
$ cd 홈디렉토리로
$ cd .wine
$ ln -sf drive_c harddiskvolume1
$ cd dosdevices
$ rm c:
$ ln -s ../harddiskvolume1 c:
이제는 디바이스 에뮬레이터와 관련 이미지를 설치한다.
$ wine /다운받은_디렉토리/vs_emulator.exe
$ wine msiexec /i /다운받은_디렉토리/"Windows Mobile 6 Professional Images (USA).msi"
$ wine msiexec /i /다운받은_디렉토리/"Windows Mobile 6 Standard Images (USA).msi"
이제는 디바이스 에뮬레이터에 윈도 모바일 이미지를 넣어서 띄워본다.
$ wine ~/.wine/drive_c/Program Files/Microsoft Device Emulator/1.0/DeviceEmulator.exe c:/Program Files/Windows Mobile 6 SDK/PocketPC/Deviceemulation/0409/PPC_USA.BIN /sharedfolder . /memsize 256 /h /video 480x640x16
그럼 한참(정말로 한참 기다려야 된다...)있으면 PDA 비스름한 화면을 보게 될 것이다. 그러면 아까 CeGCC 의 test 디렉트로에서 빌드한 샘플 응용은 어떻게 돌려보나? 여기에 공유 폴더가 쓰이게 된다. 현재 디렉토리를 공유 폴더로 잡고 에뮬레이터를 띄웠으니까 (명령 라인 잘 볼 것!) 현재 디렉토리에 해당 응용의 바이너리를 옮겨 놓고 에뮬레이터 안의 윈도 모바일에서 파일 익스플로러를 띄우고 Storage Card 를 선택하면 공유 폴더가 보이고 거기서 해당 응용을 클릭해주면... 빠밤... 뜬다.

이제... 디버깅을 어떻게 할 수 있는지를 알아봐야 겠다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 신묘군

티스토리 툴바