2008년 1월 15일 화요일

Cross Compile

Cross Compilre 만들기

Cross Compile을 예를 들어 간단히 설명하면 x86에서 ARM용 프로그램을 작성하는 것이다.

일반적으로 C로 작성한 프로그램을 실행시키려면 compiler로 compile 작업을 해서 실행파일을 작성한 후, 실행 파일을 실행시키면 된다.

이것은 해당 시스템에 compiler가 존재하는 경우에 가능하다. compiler가 존재하지 않는 ipod touch와 같은 경우 PC에서 프로그램을 작성하고, 이 프로그램을 ipod touch용으로 compile 한 후 단말에 올려서 실행한다. 이때 사용하는 compiler가 cross compiler다.

일반적으로 cross compile에 많이 사용되는 compiler는 open source로 작성된 gcc(GNU C Compiler)다. gcc의 경우 소스가 공개되어 있고, cross compile을 위한 다양한 기능을 모두 가지고 있어 많이 사용된다.

ipod touch에서 사용되는 cross compiler는 gcc로 만든다. Apple에서 SDK를 릴리즈 하는 경우에도 gcc를 사용할 것이다.

gcc로 ipod touch/iphone 용 cross compiler를 만들기 위한 방법은 다음 URL에 있다.

http://code.google.com/p/iphone-dev/wiki/Building

이 작업을 한 후에라야 진정으로 ipod touch용 프로그램의 시작을 위한 준비가 되었다고 할 수 있다.

Cross Compile 방법

cross compiler가 만들어 지면 다음 명령으로 간단한 C 파일을 compile할 수 있다.

$ arm-apple-darwin-gcc hello.c -o hello

이렇게 생성된 hello 파일을 ipod touch에 올려서 실행시켜 보자. 파일을 올리는 방법은 다양하다. FileZilla로 올려도 되고 TouchExplore를 사용해도 된다.

iPod Touch에 접속하기

해킹된 ipod touch에 SSH가 설치되어 있는 것은 모두가 알고 있을 것이다.

ssh는 간단히 설명하면 ipod touch에 접속을 할 수 있도록 도와 주는 프로그램이다. 가지고 있는 대표적인 기능으로는 shell 기능과 ftp 기능이 있다.
FileZilla가 ssh의 ftp 기능을 사용하는 대표적인 프로그램이다.

그렇다면, shell 기능을 이용하면? ipod touch에 직접 접속할 수 있다. 마치 windows에서 도스 창을 열듯이...

windows에서 shell 기능을 사용하려면 한글 putty를 다음 URL에서 받아 설치하도록 하자.

http://kldp.net/projects/iputty/

이제 한글 putty의 "한글 PUTTY (SSH 클라이언트)" 프로그램을 실행 시켜 "호스트 이름"에 ipod touch의 IP를 설정하고, "프로토콜"을 SSH로 설정한 후 접속하면 된다. 이때 잘 접속이 안되면 FileZilla로 접속을 시도한 후 성공하면, putty로도 잘 접속이 된다.

이제 아까 작성한 hello를 복사한 디렉토리로 이동한 후 다음과 같은 명령을 실행한다.

$ chmod +x hello
$ ./hello

hello 프로그램이 실행되는 것을 확인 할 수 있다.

댓글 9개:

Unknown :

GUI 프로그램은 어떻게 작성하는지요?
iPod touch용 그래픽 라이브러리가 있어야 할텐데 어디에서 구할수 있는지요?

하린아빠 :

Cross Compiler를 만드는 과정에 GUI를 위한 SDK를 모두 포함하고 있습니다.

간단히 설명 드리면 library는 touch 혹은 iphone에서 가져옵니다. 그리고 그 library에서 header 파일을 생성합니다.

그리니, 이 과정을 마치면 개발에 필요한 모든 일차 작업이 완료 되는 것입니다.

Unknown :

답변 감사합니다.
구글링으로 찾아온거라 아래 포스팅에 자세히 설명해 놓으신걸 보지 못했군요.
^)^

Unknown :

Cross Compiler를 만드는 과정중 filesystem을 iphone (or Touch)에서 가져 온다고 하셨는데요..??

FileZilla를 Touch를 접속했을 경우에 어느 디렉토리를 가져 와야 하는지요?

Applications
Library
System
bin
....
tmp
usr
var

등이 있는데요..
어느 특정 디렉토리를 말씀하시는건지.. 아니면 / 밑에 있는 모든 것을 가져와야 하는지요??
답변 구합니다.^^

하린아빠 :

설명에서는 단말에서 가져오는 것이 아니라, apple의 복구 이미지에서 직접 추출하는 형식으로 되어 있습니다.

그리고, 복구 이미지가 암호화 되어 있기 때문에 이를 해제하는 것도 같이 포함되어 있구요.

이 부분이 약간 까다롭지만, 금방 하실 수 있을 겁니다.

하린아빠 :

뭐 단말에서는 /System/Library 내부에 라이브러리들이 있습니다만, 저도 거기에 있는 것을 직접 가져와서 사용해 보지는 않아서... 뭐라 드릴말이 없습니다.

Unknown :

http://iphone.fiveforty.net 사이트에 접속 할 수 없습니다. 파일시스템 가져오는 소프트웨어 다운받을 수 있는 사이트 또는 다른 방법 부탁드립니다.

하린아빠 :

제가 가지고 있는 것도 없군요. 조만간 apple에서 sdk를 릴리즈 할 것 같으니 잠시 기다리시는게 좋을 듯 합니다.

일단 좀더 시간을 가지고 찾아 보도록 하겠습니다.

하린아빠 :

뭐 극단적인 방법으로 sftp로 단말에서 그대로 가져오는 방법도 있습니다만... 좀 무식해 보여서...