누구나 쉽게 배우는 임베디드 리눅스②
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 21,100 조회
- 0 추천
- 목록
본문
누구나 쉽게 배우는 임베디드 리눅스②
교차 개발 환경을 구축하자
지난 호에서는 임베디드 리눅스란 무엇인가에 대해 알아보았다. 이번 호부터는 임베디드 리눅스
를 동작시키기 위해 필요한 사항에 대해 알아보기로 하겠다. 그 중 첫 번째로 필요한 사항은 교
차 개발 환경(Cross Development Environment)을 구축하는 과정이다.
글 _ 장영준 삼성전자 SW연구소 Linux Technology Group 선임 연구원
연재 순서
① 임베디드 리눅스 첫 걸음마
② 교차 개발 환경을 구축하자
③ 부트로더 설정은 이렇게
④ 커널을 올려보자
⑤ 루트 파일 시스템은
어떻게 구성되는가
⑥ 2% 부족함을 채워보자
교차 개발 환경 구축의 기초
일반적인 프로그램의 개발 과정을 살펴보면 다음과 같다.
1. 프로그램 소스 코드를 작성 : 에디터 사용
2. 프로그램 빌드 : 시스템에서 실행 가능한 이미지로 컴파일 : 컴파일러 사용
3. 프로그램 실행, 테스트
4. 디버깅 : 디버깅 툴 사용
디버깅을 하는 과정에서 프로그램이 정상적으로 동작하지 않는다면, 문제를 해결하기 위해다시 소스코드를 수정하고, 빌드, 실행해보는 절차를 반복하게 된다. 위 과정을 수행하는데 에디터, 컴파일러, 디버깅 툴이 사용되었다. 개발을 하는데 있어서는 이와 같은 툴들이 필요하고, 이를 개발 환경이라고 지칭한다. 보통 PC 환경에서는 위 모든 작업을 PC에서 직접 수행할 수가 있다. 즉, PC에서 직접 개발하고, 개발된 결과물 역시 PC에서 바로 동작시켜 볼 수가 있는 것이다. 이는 다른 임베디드 시스템에 비해 PC가 사양이 높고 여러모로 개발을 하기에 적합한 환경을 가지고 있기 때문이다.
반면, 지난 시간에 언급했듯이 임베디드 시스템은 사양이 낮아 개발을 하기에 부족하거나 심지어는 불 가능한 경우까지 있기 때문에, 외부 환경에서 프로그램을 개발하고 개발된 결과물을 임베디드 시스템에서 수행하는 구조를 이용해 개발을 하게 된다. 이렇듯 외부 환경에서 프로그램을 개발하는 구조를 교차 개발 환경이라고 한다.
이때, 개발의 대상이 되는 임베디드 시스템을 타겟(Target)이라고 하고, 타겟에서 실행될 프로그램을 개발하는데 사용되는 시스템을 호스트(Host)라고 한다. 호스트에서는 해당 타
겟을 개발하기 위한 환경이 필요하게 되는데, 이 환경을 타겟을 개발하는데 필요
한 툴들의 모임이라고 하여 툴체인(Toolchain)이라고 한다. 다음은 교차 개발 환경을 간단하게 나타낸 그림이다.
호스트에서 먼저 프로그램을 개발하고, 타겟에서 이를 다운로드 받아 프로그램을 실행하고, 타겟의 수행상태를 보거나 디버깅이 필요한 경우 역시 호스트에 연결하여 타겟의 상태를 모니터링하는 구조로 되어 있다. 이때, 다운로드의 경우는 보통 속도가 빠른 랜 케이블을 이용하고, 모니터링, 디버깅 등은 콘솔(시리얼 케이블)을 이용한다.
PC에서 간단한 프로그램을 개발하는 과정을 보면 다음과 같다.
위 프로그램은 화면에“Hello”라는 메시지를 출력하는 프로그램이다. 이를 다음과 같이 빌드하여 실행해 보면“Hello”라는 결과가 출력된다.
gcc 컴파일러를 이용하여 프로그램을 빌드하고, PC에서 곧바로 실행시켜 결과를 확인하였다. 위에서 생성된 hello 프로그램은 PC용 이미지이기 때문에 다른 시스템에서는 사용할 수 없으므로 해당 시스템에 맞는 컴파일러를 이용해 빌드해 주는 작업이 필요하게 된다. 이 프로그램을 임베디드 시스템에서 동작시키기 위해서는 다음과 같은 절차를 거치게 된다.
● gcc 대신 임베디드 시스템용 컴파일러를 사용하여 프로그램 빌드
● 생성된 hello 프로그램 이미지를 타겟으로 다운로드
● 타겟에서 hello 프로그램을 실행
#include <stdio.h>
int main(void) {
printf(“ Hello ”);
return 0; }
# gcc - o hello hello.c
# ./hello
Hello
“ 임베디드 시스템은 사양이 낮아 개발을 하기에 부족하거나 심지어는 불가능한 경우까지 있기 때문에, 외부 환경에서 프로그램을 개발하고 개발된 결과물을 임베디드 시스템에서
수행하는 구조를 이용해 개발을 하게 된다. 이러한 개발 구조를 교차 개발 환경이라고 한다.”
타겟용 툴체인 만들기
이제부터 위 과정을 수행해 보기 위한 타겟용 툴체인을 만들어 보기로 하겠다.
먼저, 툴체인을 만드는데 필자가 사용한 환경은 다음과 같다.
호스트로는 리눅스가 설치된 펜티엄PC를 사용하였고, 타겟은 SMDK2440이라는 ARM CPU를 사용
한 개발 보드를 기준으로 하였다. (ARM이란 임베디드 시스템에서 많이 사용되는 CPU 중의 하나이다.) 호스트가 펜티엄, 즉 x86 계열의 CPU를 사용하는 반면, 타겟은 ARM 계열의 CPU를 사용하고 있기 때문에 호스트에 SMDK2440용 개발 환경을 만들기 위해서는 ARM 용 툴체인을 구성해야 한다.
여기서는 crosstool 이라는 툴을 사용하여 툴체인을 구성해 보기로 하겠다.
툴체인은 gcc, glibc, binutil 등의 프로그램이 통합된 복잡한 구조를 가지고 있는데, 크로스툴은 이를
쉽고 간단하게 만들어 주는 툴이다. 물론 오픈소스로 되어 있기 때문에 무료로 사용 가능하다. 크로스
툴의 공식 사이트는 http://kegel.com/crosstool/ 이다. 다운로드 및 사용법 등 크로스툴 사용에 대한
모든 정보를 볼 수 있다.
1. 기본환경 설정
앞으로 강좌를 진행하면서 사용할 계정과 디렉토리를 먼저 설정하도록 하겠다. 물론, 다른 계정이나 디렉토리를 사용해도 무방하지만, 따라 하기 쉽도록 하기 위해 편의상 설정하였다.
가. 계정 생성
본 강좌에서는‘oss’라는 유저 계정을 사용하여 진행하기로 한다. 부득이하게 루트 계정을 사용해야하는 경우에는 별도로 언급하도록 하겠다.
다음과 같이 계정을 생성하고, 생성된 계정으로 로그인 한다.
# adduser oss
# passwd oss
# su - oss (또는 oss 계정으로 로그인)
나. 작업 디렉토리 생성
oss 홈 디렉토리의 elinux 라는 디렉토리에서 모든 작업을 진행하기로 한다.
# mkdir elinux
# cd elinux
# pwd
/home/oss/elinux
다. 툴체인 설치 디렉토리 준비
본
관련자료
-
이전
-
다음