Notice
Recent Posts
Recent Comments
Today
Total
05-16 05:42
Archives
관리 메뉴

Jeongchul Kim

임베디드 리눅스 개발 환경 <1> SW 개발 환경 본문

Embedded Linux

임베디드 리눅스 개발 환경 <1> SW 개발 환경

김 정출 2015. 12. 21. 18:51

7.1 Windows 환경에서 SW 개발 환경 구축하기

7.1.1 Cygwin 설치하기

임베디드 리눅스 개발 환경을 구축하기 전에 가장 먼저 해야 할 일은 Linux 환경을 구축하는 것이다.

왜냐하면 Embedded Linux 역시 리눅스 이기 때문이다.

Windows에서는 가상화 솔루션(Virtual Machine)”이 필요하다.

하나의 PC에서 여러 운영체제들을 실행시켜 주기 위해 필요한 소프트웨어를 가상화 솔루션이라고 한다.


가상화 솔루션의 대표적으로 VMWare 사의 VMware가 대표적이지만 상용 제품일 뿐만 아니라, 시스템 메모리를 많이 사용하기 때문에 저사양의 PC에서는 사용하기 어렵다. www.vmware.com


따라서 공개용이며 손쉽게 사용 가능한 Cygwin을 이용. www.cygwin.com


1. 설치 디렉토리를 C:\cygwin 으로 설정

2. Cygwin 설치 패키지 디렉토리 설정

3. Windows 환경 변수 설정하기

내 컴퓨터 -> 속성 -> 고급 -> 환경 변수 -> PATH 수정

시스템 변수(S) 설정

변수 이름 Path 변수 값 C:\cygwin\bin;


7.1.2 Tool-Chain 설치하기

toolchain-windows-arm-411.tgz 압축 풀기

C:\> tar zxvf toolchain-windows-arm-411.tgz -C C:\cygwin


7.1.3 관련 소스 설치하기

시스템 베이스 사에서 개발한 Eddy 라는 임베디드 모듈을 기반으로 Embedded Linux

Eddy DK라는 보드에 대한 소스를 설치


7.1.4 Windows에서 SW 개발 환경 테스트

1. 예제 소스 작성

#include <stdio.h>

int main()

{

printf(“Hello, Embedded Linux !! \n”);

return 0;

}


앞서 설치한 Tool-Chain의 “arm-linux-gcc” 명령어를 직접 프롬프트 입력하여 컴파일하는 방법

두 번째는 “Makefile”을 이용하여 컴파일


1. “arm-linux-gcc” 명령어를 직접 입력하여 컴파일하는 방법

타겟 보드인 시스템 베이스 사의 Eddy 임베디드 모듈은 ATMEL 사의 ARM9 프로세서인

AT91SAM9260이란 프로세서를 기반으로 개발되었다.


C:\cygin\opt\lemonix\cdt\ 디렉토리 밑에 관련 Tool-Chain 이 설치되어 있을 것이다.

C:\My_Linux_SRC> C:\cygin\opt\lemonix\cdt\bin\arm-linux-gcc hello.c -o arm_hello


* -o 옵션은 결과(output) 파일의 이름을 지정해주기 위한 옵션이다.

  이 옵션이 빠지면 디폴트(default) 이름으로 a.out라는 이름의 파일이 생성된다.

C:\My_Linux_SRC> file arm_hello

file arm_hello 를 확인하면 “ELF 32-bit LSB executable, ARM”

2. Makefile을 이용하여 컴파일하는 방법

실제로 Embedded Linux 기반 소프트웨어를 개발하고자 한다면 Makefile 파일을 알아야 한다.

Makefile 파일은 컴파일하기 위한 일종의 스크립트(Script) 파일이다.


make라는 유틸리티가 “Makefile” 파일의 내용을 한 줄 한 줄 해석하여 실행시키기 때문에

번거로운 디렉토리(폴더) 경로와 옵션들을 “Makefile” 파일에 정리해 두면 명령어로 번거롭게

타이핑할 필요 없이 쉽게 컴파일 할 수 있다.


CC = \opt\lemonix\cdt\bin\arm-linux-gcc

CFLAGS = -Wall

all : arm_hello

arm_hello : hello.c

$(CC) $(CFLAGS) hello.c -o arm_hello

clean:

rm -f *.bak *.o arm_hello


Makefile 키워드

키워드

설명

CC

C Compile(컴파일러)를 지정하는 키워드로, 여기서는 arm-linux-gcc를 지정하기

위한 절대 경로(path)를 입력해주었다.

Cygwin에서 구축한 Linux 환경에서는 Windows에서 Cygwin을 설치한

C:\cygwin 디렉토리(폴더)를 Linux 에서의 “\” 루트 디렉토리로 인식하기 때문에 앞서 직접

명령어로 입력할때 처럼 C:\~로 입력하는게 아니라

“\opt\lemonix\cdt\bin\arm-linux-gcc”로 입력했음에 주의한다.

CFLAGS

컴파일할 때 사용할 옵션들을 지정하는 키워드이다.

-Wall 옵션은 경고(Warning) 메세지를 모두 출력하라는 뜻

all

make를 실행했을 때 최종적으로 생성되는 결과 파일을 지정하는 키워드이다.

최종적으로 생성시킬 파일이 “arm_hello” 파일이기 때문에, 이를 써주었다.

clean

clean 키워드는 이전에 컴파일할 때 생성되었던 중간 결과 파일(*.o)이나 최종 결과 파일을

삭제하기 위해 지정하는 키워드 이다.

참고로, 삭제할 때는 “make clean”이라는 명령어를 입력해주면 된다.

* 실행 명령어 앞에는 반드시 “탭(Tab)” 키 공백을 입력해야 한다!


예제로 작성된 “Makefile” 파일에 보면 $(CC) 와 rm 부분이 나온다.

$(CC)는 앞에 정의한 CC 부분의 내용으로 대체하라는 뜻이다.

rm은 Linux에서 파일을 삭제할 때 사용하는 명령어이다.


* Makefile로 컴파일하는 법

C:\My_Linux_SRC> make

C:\My_Linux_SRC> dir


기존의 hello.c, Makefile 외에 총 2개의 파일이 생성된다.

arm_hello Makefile.bak













7.2 Linux 환경에서 SW 개발 환경 구축하기

Linux 환경을 미리 PC에 설치해야 한다. 레드햇(Red Hat)이나 페도라(Fedora), 우분투(Ubuntu) 설치 우선!


Linux에서 진행하는 모든 작업은 “root” 권한으로 진행해야 한다.

특히 디바이스 드라이버의 경우에는 “root” 권한이 아니면 진행할 수 없으므로 주의해야 한다.


7.2.1 Tool-Chain 설치하기


[root@  ]# mkdir MY_WORKS

[root@  ]# cd /media/FUN_BOOK_CD/EDDY_DK_V21/SDK/Linux
[root@  ]# cp lemonide_linux_10a.tar.gz ~/MY_WORKS

[root@  ]# cd ~/MY_WORKS

[root@  ]# tar zxvf lemonide_linux_10a.tar.gz -C /

[root@  ]# cd

[root@  ]# vi .bash_profile


* 참고로 부록 파일 디렉토리 경로를 /media/FUN_BOOK_CD/EDDY_DK_V21/ 가정

(1) 별도의 작업 디렉토리 생성: mkdir

(2) 부록 파일 내 Linux 용 Tool-Chain 파일이 있는 디렉토리로 이동:

Linux에서 CD나 USB는 /media 디렉토리 밑에 마운트(mount)가 된다.

(3) Linux용 Tool-Chain 파일을 별도의 작업 디렉토리로 복사: cp

(4) 작업 디렉토리로 이동: cd

(5) Linux용 Tool-Chain 파일 압축 풀기: *.tar.gz 파일의 압축을 풀기 위해서 tar(명령어) zxvf(옵션)

-C(옵션)은 압축을 “/” 디렉토리 밑에 추출하라는 옵션이다.

(6) 환경 변수 PATH 수정을 위해 홈 디렉토리로 이동

환경 변수 설정을 위해 개인별 홈 디렉토리에 있는 “.bash_profile”이란 파일을 수정해야 한다.

Linux “root” 관리자 계정의 홈 디렉토리는 /root

현재 작업 중인 디렉토리의 절대 경로를 나타내는 명령어는 pwd

(7) 환경 변수 PATH 수정을 위해 환경 변수 설정 파일 수정

* 리눅스에서는 arm-linux-gcc.exe 명령어가 /opt/lemonix/cdt/bin에 있다.


[root@  ]# pwd

/opt/lemonix/cdt/bin

[root@  ]# ls

arm-linux-gcc ....


(8) vi란 편집기(editor)를 사용하여 수정한다.

[root@  ]# pwd

/root

[root@  ]# vi .bash_profile


1 # .bash_profile

2

3 # GET the aliases and functions

4 if [ -f ~/.bashrc ]; then

5 . ~.bashrc

6 fi

7

8 # User specific environment and startup programs

9

10 PATH=/opt/lemonix/cdt/bin:$PATH:$HOME/bin

11

12 export PATH

13 unset USERNAME


Linux에서 각 디렉토리 경로(Path)를 구분하는 방법은 (:) 콜론으로 구분한다.

* 주의 사항: PATH 변수 내 디렉토리 경로들 간에는 “공백”문자가 없어야 한다!


[root@  ]# pwd

/root

[root@  ]# source .bash_profile

[root@  ]# which arm-linux-gcc

/opt/lemonix/cdt/bin/arm-liniux-gcc


source 명령어는 PATH 변수 수정을 통해 파일이 수정되었음을 쉘(Shell)에 인식 시켜주어야 한다.

* 쉘(Shell): “명령어 해석기(Command Interpreter)”이다. 사용자가 명령어를 입력하면 어떤 명령어를

입력했는지 해석하여 이를 운영체제에 전달하는 역할을 한다.

which 명령어는 인자(Argument)로 입력된 명령어가 어떤 경로에 있는지 알려주는 명령어




7.2.2 관련 소스 설치하기


[root@  ]# cd /media/FUN_BOOK_CD/EDDY_DK_V21/SDK/SDK

[root@  ]# cp filesystem_2.1.0.1.tar.gz ~/MY_WORKS

[root@  ]# cd ~/MY_WORKS

[root@  ]# tar zxvf filesystem_2.1.0.1.tar.gz



7.2.3 Linux 환경에서 SW 개발 환경 테스트


[root@  ]# vi hello.c


#include <stdio.h>


int main()

{

printf(“Hello, Embedded Linux !!! \n”);

return 0;

}


1. “arm-linux-gcc” 명령어를 직접 입력하여 컴파일하는 방법

[root@  ]# arm-linux-gcc hello.c -o arm_hello

[root@  ]# ls -lf







2. “Makefile”을 이용하여 컴파일하는 방법

[root@  ]# vi Makefile


1 # Kim JungChul’s Makefile

2

3 CC = /opt/lemonix/cdt/bin/arm-linux-gcc

4 CFLAGS = -Wall

5

6 EXE_NAME = arm_hello

7 SRC_NAME = hello

8

9 all : $(EXE_NAME)

10

11 $(EXE_NAME) : $(SRC_NAME).c

12 $(CC) $(CFLAGS) $(SRC_NAME).c -o $(EXE_NAME)

13 clean:

14 rm -f $(EXE_NAME) *.o *.ko


Windows의 Makefile과 달리 EXE_NAME과 SRC_NAME으로 별도의 변수를 할당했다.

별도의 변수를 할당해준 이유는 소스 코드 파일을 추가 개발해도 Makefile 파일을 그대로 활용하기 위해서 이다.


“#”는 파일에서 의 주석(Comment)를 나타내는 기호이다.


[root@  ]# make

[root@  ]# ls -lf

Makefile arm_hello* hello.c

[root@  ]# file arm_hello

arm_hello: ELF 32-bit LSB executable, version 1 ....

















Comments