2007년 10월 31일 수요일

eCos 컴파일 에러

installation problem, cannot exec 'cpp0' : 어쩌구
..라는 컴파일 에러.

처음엔 cpp0라는 파일때문인 줄 알고 열심히 cpp0파일을 찾았지만 찾을 수 없었다.

하지만 그 원인은 makefile에 있었다.

eCos에서는 makefile을 만들어서 사용하는데,
컴파일러를 지정해주는 부분에, 크로스 컴파일러를 지정해 주었다.

XCC = arm-linux-gcc

이렇게 말이다.

그리고 나는 arm 보드에 올릴꺼니까 당연하다고 생각하고 있었다.

하지만 내가 망각한 사실이 있었으니-0-;
이것은 eCos application이라는 것.

컴파일러는 arm-elf-gcc였다.
바보같이 gnutools 하위폴더는 arm-elf라고 잡아주고선-_-); XCC를 틀려놨다.

아무튼 그래서 엉뚱한 cpp0 에러는 해결되었다.

2007년 10월 30일 화요일

악마는 프라다를 입는다.

악마는 프라다를 입는다.

주연: 메틸스트립(미란다 역), 앤 해서웨이(앤디 역)


이 영화는 책을 읽은 후에 나중에 DVD로 보게 되었는데 책과 내용이 조금 달라 더욱 재밌었다.

사회 초년생이며 잡지에 사회글을 기고하는 기자가 되기를 꿈꾸며 상경한 앤드리아는 자신의 생각과는 조금 다르게 패션잡지 에디터의 비서가 된다.
배울 것도 많고, 모든 여성들이 꿈꾸는 자리인데다가 패션잡지 에디터인 미란다의 추천이라면 어느 잡지사든 원하는 곳에 입사할 수 있다는 말을 들은 앤드리아는 열심히 해내리라 결심하지만 수석비서인 에밀리는 자신을 부리기만하고 미란다는 불가능한 요구들을 하기 시작한다.
언제 어디서든 미란다의 연락에 불려나가기 일쑤이고, 미란다의 무리한 요구들을 수행하려 여기저기 뛰어다닌 탓에, 남자친구와도 멀어지고 가족과 보낼 시간도 점차 줄어들면서 친구들과 가족들은 바쁜 앤드리아에게 지쳐가고, 앤드리아도 자신을 이해해주지 않는 주위가 서운하기만 하다.

처음에 패션계에는 전혀 관심이 없던 앤드리아는 미란다의 질책과 주변의 이상한 시선속에서 지내다 나이젤의 충고아닌 충고덕에 눈을 뜨고 프로라는 것에 미란다와 패션잡지의 사람들을 다른 시선으로 보게 되면서 자신도 변화하게 된다.
좀 더 나은 자신을 보이게 되고 미란다의 불가능해 보이는 요구를 미란다의 입맛에 맞게 수행하면서 자신의 직장에 적응을 해나간다.
처음에 패션감각없고 뚱뚱하지만 똑똑한 여자를 채용하겠다고 생각한 미란다는 바뀌어가는 앤드리아의 모습이 맘에 들고 그녀를 수석비서로 생각, 중요한 파리의 패션쇼에 데려가려 한다.

그리고 파리에서...

스포일러보기



화려한 그녀들의 패션과 눈 돌아갈 정도의 많은 명품들의 등장으로 볼거리가 많았던 영화지만, 화려함 속에 숨어있는 다른 이면도 함께 볼 수 있는 영화였다.
프로의 자세도 느낄 수 있었고, 내 일에 대한 강한 자부심도 느낄 수 있었던 영화. 나는 내일을 사랑하고 있는가 다시한번 생각해보게 되었다.
나도 당당하게 이 분야에서 내가 최고다라고 말할 수 있을 때까지 노력해야겠다. 더불어 강한 정신력과 무엇에도 흔들리지 않을 선택을 할 수 있는 신념을 길러주기를 당부한 영화였다고 본다.

난 더 나아갈 것이고 좀 더 높은 곳에 이르를 것이며 내 일을 사랑할 것이다.
아니 이미 진행형이다.


2007년 10월 29일 월요일

redboot configuration (in eCos)

eCos에서 redboot를 configuration 하는 것은, eCos가 지원하는 보드에 올린다면 매우 쉬운 일이다.

내가 사용하고 있는 보드는 trace32를 테스팅하기 위해 사용하던 IMO보드이다.

이름은 조금 다르지만, 일단 코어는 s3c2410이므로, eCos가 지원하는 smdk2410에 맞춰 주면 된다.


eCos에서 configration 방법은 두가지가 있다. tool을 사용하는 것과, command를 날리는 방법.

일단은 두가지 다 해보도록 하겠다.


우선, tool을 사용하는 것.

tool을 사용하는 것이 더 빠르고 쉽다.

하지만 tool을 사용해서 에러가 난다면 command를 추천한다; 왠지 tool은 불신감이 솟구쳐서-_-;;



1. tool 실행

$ configtool

의 command를 치면 조금 많이 심플한 tool이 하나 보인다.


2. hardware선택

tool의 메뉴에서 build->template를 클릭하면 하드웨어를 선택할 수 있다.

eCos에서 지원하는 하드웨어들이 죽 list로 보여지는데 거기서 Samsung의 smdk2410을 선택하고,

그 아래 보면 package라는 부분이 있다.

default라고 되어있지만, redboot를 configuration할 것이기 때문에 redboot를 선택해준다.

그리고 "확인"

그리고 나서 보면 tool의 configuration 옵션이 바뀌어 있는 것을 볼 수 있다.

확인해 주어야 할 것은 architecture와 redboot 부분이다. 활성화 된 내용을 확인하고, 바꿀 옵션이 있다면 바꾼다.

하지만, 그냥 save해도 잘 돌아간다.

옵션을 다 바꾸었다면 save.


3. 이미지 만들기

redboot 이미지를 만들어야 한다.

build->Gernerate Build Tree를 선택해서 우선 트리를 생성한 후에,

build->library를 선택한다. (컴파일과 비슷한 것.)


그러면 완성-_-)b 이 되는데-_-!

smdk2410에 올릴때 중요한 것이 하나 빠졌으니,

이렇게 만든 이미지를 flash에 구워 부팅을 시키면 jump vector가 엉뚱한데를 가르키며 부팅이 제대로 되지 않는다.

해서 삽질을 엄청나게 했지만,

file->import를 선택하고

/opt/ecos/eocs-2.0/packages/hal/arm/arm9/smdk2410/current/misc/smdk2410_redboot_ROMRAM.ecm 을 포함시켜주어야만 함을 알았다.

'왜?' 인지는 아직 알아내지 못했지만;



그럼 다음으로 terminal창에서 configuration 하는 법.

일단, 해주는 일은 같지만 interface에서 쉽게 하느냐 못하느냐의 차이다.


terminal창에서 다음 command를 순서대로 날리면 된다.


$ ecosconfig new smdk2410 redboot

(새로만드는데, architecture와 package를 지정해준다)

$ ecosconfig import /opt/ecos/ecos-2.0/packages/hal/arm/arm9/smdk2410/current/misc/smdk2410_redboot_ROMRAM.ecm

(역시 파일을 import 해준다)

$ ecosconfig tree

(tree 생성)

$ make OLDGCC=1

(책에는 'make'라고만 해도 된다고 했는데, OLDGCC는 뭘까요-_-;)




tool로 했든 command로 했든지 간에 아무튼 make가 성공한다면, 여러개의 파일이 생긴다.

그 중에서 install폴더를 찾아 들어가면 bin폴더 아래에 이미지 파일이 생성된 것을 볼 수 있다.

binary파일과 elf파일 srec파일 img파일.

img파일은 안써봤고-_-; srec파일은 eCos보드에 올릴 때 쓰는 것이다.

하지만 redboot은 부트로더니까, binary파일로 올렸다.

(trace 32로 올렸음; flash날려먹어서)

eCos 설치하기

우선, eCos 설치 메뉴얼은 http://ecos.sourceware.org 에 있다는 것을 밝히는 바이다.

하지만, 나같이 영어 울렁증 있는 사람은 절대 못본다-_-; 죄다 영어라서;

그리고 eCos 메뉴얼을 비롯 관련 서적들도 다 영어다-_-; 아놔.... ㅠㅡ


eCos설치는 매우 간단하다.


먼저 다운로드를 해야하는데,

$ wget --passive-ftp ftp://ecos.sourceware.org/pub/ecos/ecos-install.tcl  을 실행하면 자동으로 /opt/ecos 폴더 아래 받아진다.

 

폴더로 따라 들어가 보면 ecos-install.tcl 파일이 있을 건데, 그 파일을 실행시킨다.

$ sh ecos-install.tcl

 

이 명령이 실행되지 않으면 tcl을 지원하지 않는 것이므로 패키지를 인스톨한다.

(eCos를 깔다보면 자신의 리눅스 컴퓨터에 아직 설치되지 않은 pakage가 많음을 느낄 것이다.

나는 4개 정도의 페도라 패키지를 인스톨했다.

패키지 인스톨 명령은 "yum install (패키지 이름)" 이다.)

 

설치 중 첫번째로 물어보는 것은 어느 사이트에서 다운받을 것이냐 인데, 아무데서나 받으면 된다.

두번째로 설치 디렉토리를 물어본다. 기본 값은 /opt/ecos이다.

세번째로 타겟 보드의 코어를 물어본다.

그것은 타겟보드가 arm인지 pc인지 등을 물어보는 것인데, 그냥 전부다 체크해주면 된다.

언제 어떤 보드를 쓰게 될지 모르므로..

아니면 원하는 코어만 체크한다.

 

그리고 나서 eCos 명령어를 사용하기 위해서는 명령어가 필요하다.

$ . /opt/ecos/ecosenv.sh

 

eCos를 사용하게 될 때마다 (즉, 시스템이 부팅된 후) 매번 이 명령어를 실행시켜줘야 하는데, 그게 귀찮으므로 .bash_profile에 명령어를 넣는다.

.bash_profile에 넣을 경우에는

. /opt/ecos/ecosenv.sh 를 추가해주고 저장한다음, .bash_profile의 수정내용을 적용시킨다.

$ source .bash_profile

 

잘 설치가 되어 있는지 확인을 해보려면, 아무 경로에나 빈폴더를 하나 만들고 그 안에서 configtool 이라고 명령을 실행해 본다.

$ configtool

 

이 때 configtool 화면이 뜬다면 제대로 설치된 것이 맞다-_-)b

2007년 10월 25일 목요일

커널 컴파일



1. 커널 다운로드 받기


$ ftp ftp.kernel.org

login은 anonymous로 한다.

ftp> mget (받을 파일이름)

ftp> quit


현재 폴더에 커널이 받아진 걸 볼 수 있다.

그걸 /usr/src/ 로 옮겨서 압축을 해제한다.

$ tar xvf (파일이름)





2. 커널 컴파일


$cd /usr/src/linux-버전


$ make mrproper

$ make menuconfig

커널 옵션 설정. 필요한것들만 바꾼다.


$ make dep

$ make bzImage

$ make module

크로스 컴파일러 설치

 

리눅스환경에서 arm 기반 프로그램을 컴파일해서 올리자면, arm용 (arm9기반이니까) 컴파일러가 필요한데-

이 때 해야하는 작업이 크로스 컴파일이다.


크로스컴파일. 말은 그럴싸하니 멋있지만, 삽질의 장본인이다. (그앙!)


그럼 우선, 크로스컴파일을 해보자.



<< 크로스컴파일러 깔기 >>

 

1. 다운받는다.


어디서고 상관없지만, 나는 arm.linux.org.uk에서 받았다...

$ wget http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross-3.2.tar.bz2

arm용으로 3.2버전을 받았다.


압축을 풀고, 원하는 곳으로 옮긴다.

압축을 풀면 나오는 arm이라는 폴더를 /usr/local/ 에 두었다. (그냥 내맘-_-)


2. 패스설정한다.


그리고 나서 .bash_profile을 고쳐주어야 한다. 그렇지 않으면 command를 찾지 못할 것이다.

.bash_profile은 ~/ 경로를 찾으면 있다.

다른 방법으로 cd 치고 엔터를 누르면 이동하는 경로이다.

보통 ls로는 보이지 않는 파일이고, 파일목록으로 보고 싶으면 ls -al을 하면 보인다.


vi를 이용해서 편집을 한다.

PATH 라고 되어 있는 부분을 찾는다.

보통은

PATH=$PATH:$HOME/bin 이라고 되있을 건데, 여기다가 크로스컴파일러 깐 곳의 path를 입력해준다.

PATH=/usr/local/arm/bin:$PATH:$HOME/bin


bin폴더 아래에 가보면 크로스 컴파일러가 가득한 것을 볼 수 있다.

크로스 컴파일러가 있는 경로를 넣어주면 되는 것이다.


마지막으로 바뀐 bash_profile을 적용시켜주어야 한다.

$ source .bash_profile


그리고 나서 확인을 해보려면, command를 입력해보면 된다.

arm-linux-gcc 라고 입력하고 엔터를 쳤을 때,

input file이 없다고 에러메세지가 뜨면 제대로 경로를 잡은 것이고,

그렇지 않고 없는 command라고 뜬다면 제대로 경로를 잡지 못한것이다.