우와.. 돌아버리겠습니다.. 정말..

안녕하세요… LED같은 Drake 입니다…

소모임에서 뵈었던 분들 정말 반가웠구요…

제가… 이번 보름동안 계속 뭔가를 시도하다가 지금 패닉상태에 빠져서… 며칠 지나 다시 시도할 예정입니다…

아이폰에 apm을 설치하다가… php에 gd가 안 붙어서 좀 붙여보려고… 했는데…

아주 멀리까지 오게 되었습니다…

처음에는 그냥 cydia에서 찾아보다가… 웬지 없더군요…

그래서 아이폰에서 바로 컴파일해보려 3일간 시도해보았습니다만, 시스템 디렉토리의 남은 용량으로는 조금 어렵더군요…

크로스컴파일러를 만들어야 된다는 결론까지는 도달할 수 있었습니다…

그러다가 웹을 찾아보니 리눅스에서 크로스 컴파일러 만들기에 대한 문서가 있더라고요…

컴파일러 만드는데까지 5일은 걸린듯 합니다…

근데 또 objc 관련 링크가 먹질 않더군요…

에잇, 짜증나! 어차피 osx에 이미 개발환경이 있는데 왜 생각을 못했지? 하며 snow leopard를 구동했습니다…

하아… cli로는 뭔가 한계가 있는듯 하더군요…

어쨌건 우분투에서 크로스컴파일러를 만들기는 했으나 개념이 좀 덜 잡혀있어서 그런지 한계에 계속 부딪히고 있습니다…

일단 요걸 해결해야 mv2530에 qt를 올리고 뭔가를 할 수 있을텐데 말이죠…

mv2530의 최종 목표점은 iStation v43같은 패널까지입니다…

그 이후는 응용이겠구요…

어제는… 사실 아이폰에 gd라이브러리가 꼭 필요한것도 아닌데… 포기하면 편한데… 왜 이렇게 열받으면서까지 하려고 했나 생각도 들더라고요…

[b:oai15jif]으아아… 정말… 크로스컴파일러 구성하고 사용하는걸 좀 보고 싶군요… 욕심이라면 커널 빌드까지요…[/b:oai15jif]

하지만 제가 현재 백수라… 임베디드 관련 오프모임 한번 하자고 하기도 뭐하고요… ㅠㅠ

이제 생각해보니 전 할수 있는거라곤 쥐뿔도 없는 놈이네요… ㅋㅋ

웬지 징징대는 글이 되어버렸네요… 죄송합니다…

흠… LED 같으신 drake_kr 님, 안녕하세요? ㅎㅎㅎ

일단 ARM 프로세서용 Tool-Chain 을 사용하는 가장 쉽고 빠른 방법은 해당 프로세서 혹은 키트 업체로부터 이미 빌드(build)되어 있는 Tool-Chain 압축 파일을 받아다가 해당 경로에 압축을 풀고 PATH 설정하여 사용하는 방법이 가장 빠르고 쉽습니다.

지난 3월 제가 세미나 때 말씀 드렸던 것처럼 Tool-Chain 은 기본적으로 임베디드 SW 이든 그렇지 않은 SW 이든 간에 어떤 SW 를 개발하더라도 반드시 다음과 같은 3가지 tool 들이 마치 chain 처럼 묶여서 꼭 따라다녀야 한다고 해서 붙여진 이름입니다.

  1. (Cross) Compiler : gcc 혹은 arm-linux-gcc

  2. System Library : 일반적으로 header (*.h 파일) 들을 코딩할 때 필요한 User Library 라고 한다면, System Library 는 이렇게 컴파일된 실행 코드가 실행될 때 필요한 라이브러리를 뜻합니다.
    일반적으로 텍스트 형식의 헤더 파일과 달리 *.a (Static Library) 나 *.so (Shared Library) 확장자로 끝나는 바이너리 파일로 되어 있으며 우리가 흔히 사용하고 있는 printf() 나 scanf()
    같은 Wrapping 함수의 원형인 시스템 콜(System Call) 함수들의 정의(define)를 담고 있고, 프로세서의 동작 모드(Operation mode)를 User mode 에서 Supervisor mode 로 변경하기 위한
    소프트웨어 인터럽트 발생 명령어(CPU Instruction) 등을 포함하고 있습니다.

  3. Binutils : 1번과 2번에 의해 컴파일된 바이너리(Bin) 결과물(실행 코드)에 대해 필요에 따라 후 처리 작업을 할 때 사용되는 유틸리티들(utils)을 묶어 Binutils 라 부르며, 대표적으로 strip 이나 objcopy 등이
    있습니다.

위에 열거된 1, 2, 3번은 각각 하나의 훌륭한 오픈 소스 프로젝트들로서 소스가 오픈되어 있기에 가져다가 컴파일 할 수 있습니다.
그러나, 서로 간에 버전이나 컴파일 환경 등이 서로 맞지 않을 경우 빌드(build)되지 않을 수가 있으며, 빌드 하는 순서 역시 1번 약식 컴파일 -> 2번 컴파일 -> 1번 제대로 컴파일 -> 3번 컴파일 등 과정도 매우 복잡합니다.

따라서, 보통 삼성전자와 같은 프로세서(CPU) 제조 업체의 경우 해당 프로세서에 최적화 된 Tool-Chain 을 미리 빌드하여 압축 파일 형태로 제공하고 있으며 drake_kr 님이 구매하신 MV2530 에 사용된 MP2530F 라는 프로세서 역시 별도로 빌드된 Tool-Chain 이 있으니 그걸 가져다가 PATH 걸어 사용하시는 게 가장 좋습니다.

다만 MP2530F 라는 프로세서가 제조업체의 부도(?)로 인해 현재 더 이상 해당 칩을 생산하고 있지 않은데다 기술 지원 역시 지원하고 있지 않기에 제 개인적으로는 그다지 추천해 드리고 싶지 않은 프로세서입니다. ARM9 Dual Core 라는 이점으로 시작된 칩이었지만 ARM9 까지의 가장 대표적인 단점인 Floating 연산의 SW 처리가 여전히 걸림돌인지라 요즘 출시되고 있는 ARM11 이나 ARM Cortex-A8/9 등에 비해 눈에 띄게 성능이 떨어지거든요.

제 개인적으로는 ARM11 이상으로 접근해 보시는 게 어떨까 싶네요. :-)

우와 자세한 답변 감사합니다…

그런데 사실, 이론적인 것이 중요하다는건 알지만… 그에 따르는 경험 위주로 경험치를 쌓아가고 있는 중이라서… ^^;

Z80+부터 시작했으나… 이미 다 빌드되어 있는걸 해당 디바이스에서 사용한것 뿐이었고…

실제 처음부터 구축하는건 이번이 처음입니다…

gcc(/usr/bin에 있건 /usr/local/bin에 있건 사용자 디렉토리에 있건) -o hello hello.c -I(크로스 컴파일러용 include 파일 디렉토리) -L(크로스 컴파일러용 라이브러리 디렉토리)

이외에도 정리할 것이 여러가지가 있겠습니다만, darwin이 아닌 다른 환경에서 컴파일러를 컴파일(!)하면서 확실하게 알아두어야겠지요…

요렇게 C 버전과 Objc 버전은 Hello world 컴파일하는데 성공했으나, cpp에서 또 걸렸습니다…

php는 c만으로 가능하지만 gd 라이브러리에서 cpp가 필요하군요… 지금 여기에 막혀있습니다…

요게 뚫리면 게임 셋입니다… 참 먼길을 돌아돌아 여기까지 왔습니다…

저는… 400mhz짜리 멘도시노 셀러론에 메모리 64MB인놈도 지금 서버로 활용하고 있는놈이라…

mp2530f 요놈도 뽕을 뽑아야지요… 이놈으로 QT 디자인까지 올라가는게 Goal 입니다…

64bit floating 연산이 되고 안되고는 중요한게 아닙니다…

기본을 알면 해당 소스를 커널에 포팅하는건 어렵지 않지요…

제가 보고 있는 책을 첨부했습니다…

고생은 사서 하는게 제맛. (응?)

[quote="drake_kr":1yn9crfm]
gcc(/usr/bin에 있건 /usr/local/bin에 있건 사용자 디렉토리에 있건) -o hello hello.c -I(크로스 컴파일러용 include 파일 디렉토리) -L(크로스 컴파일러용 라이브러리 디렉토리)

이외에도 정리할 것이 여러가지가 있겠습니다만, darwin이 아닌 다른 환경에서 컴파일러를 컴파일(!)하면서 확실하게 알아두어야겠지요… [/quote:1yn9crfm]

참고로 아시다시피 /usr/bin 에 있건 /usr/local/bin 에 있건…이 이미 빌드되어 있는 Tool-Chain 에선 무척 중요합니다.
그렇지 않으면 #include <stdio.h> 에서 해당 헤더 파일을 컴파일러가 찾아 가서 Copy & Paste 를 할 수가 없거든요. ㅠ.ㅠ

[quote="drake_kr":1yn9crfm]
저는… 400mhz짜리 멘도시노 셀러론에 메모리 64MB인놈도 지금 서버로 활용하고 있는놈이라…

mp2530f 요놈도 뽕을 뽑아야지요… 이놈으로 QT 디자인까지 올라가는게 Goal 입니다…

64bit floating 연산이 되고 안되고는 중요한게 아닙니다…

기본을 알면 해당 소스를 커널에 포팅하는건 어렵지 않지요…

제가 보고 있는 책을 첨부했습니다…

고생은 사서 하는게 제맛. (응?)[/quote:1yn9crfm]

그러게요. 기본을 알면 해당 소스를 커널에 포팅하는 게 어렵지 않을 수도 있기는 있는데… 사실 요새 커널 버전이 업데이트 되어 감에 따라 포팅하는 사람들이 수정해주어야 하는 부분들 역시 엄청나게 변하고 있는 것도 사실입니다.

리눅스 커널 2.4 에서 2.6 으로 바뀌었을 때 갑자기 튀어나온 ALSA 도 그랬고, 2.6.20 버전 이후부터인가… 디바이스 드라이버와 커널 모듈 처리 방식 역시 무척 많이 달라져서 한 때 괜한 삽질을 했던 기억이… ㅠ.ㅠ

문제는 우리가 공부해 나가는 속도보다 기술이 발전해나가는 속도가 훨씬~ 앞서 나가고 있다는 점입니다.
즉, 예전처럼 혼자서 모든 걸 다 해보기가 점점 어려워져 가고 있다는 점이죠. ㅠ.ㅠ

그래도, 이렇게 도전하시는 분이 계시다는 점에선 무척 기분이 좋네요. ㅎㅎ
좋은 결과 있으시길 진심으로 기대해 봅니다. ^_____________________________^ 씨익~