개발 환경 개발 환경 개요 PXA270과 타겟 시스템 툴체인 환경 구축 JTAG 유틸리티 미니컴 Make 유틸리티 한빛미디어(주)
임베디드시스템 개발 환경:호스트 시스템, 타겟 시스템백엔드로 구성 호스트 시스템에서 타겟 시스템을 위한 부트로더, 커널 이미지, 응용 소프트웨어 등을 개발하고, 이를 케이블 등을 통해 타겟 시스템으로 다운로드하여 사용
크로스 개발 환경
호스트 시스템 임베디드시스템을 개발하기 위한 자원 즉, 컴퓨팅 환경을 제공하는 시스템 보통 개인용 컴퓨터를 호스트 시스템으로 사용 리눅스 커널 2.6 버전을 포함하는 페도라 코어 4를 호스트 시스템의 운영체제로 사용 툴체인(toolchain): 타겟 시스템용 시스템 및 응용 소프트 개발에 필요한 모든 환경을 통칭
타겟 시스템 개발된 임베디드시스템 프로그램을 테스트하고 구동할 수 있는 시스템 PXA270을 탑재한 ㈜하이버스의 X-HYPER270-TKU를 사용
백엔드 호스트 시스템과 타겟 시스템간에 통신하기 위한 매개체 Serial JTAG Ethernet Serial 포트를 활용하여 모니터링(미니컴 S/W 활용) JTAG JTAG을 통해 플래시 메모리에 부트로더, 커널 퓨징 원용도: 디버깅 장비 – 레지스터 모니터링 Ethernet Cross 케이블을 활용하여 NFS(Network File System 구성) - 허브 부재시
호스트 시스템과 타겟 시스템의 연결
일반적으로 호스트 시스템과 타겟 시스템의 플랫폼이 다르기 때문에 툴체인이 필요 x86 계열에서 개발한 프로그램을 ARM 계열에서 실행하려면 교차 컴파일 필요 툴체인은 교차 컴파일러 및 관련된 각종 라이브러리를 의미 어셈블러, 링커, C 컴파일러, C 라이브러리 등으로 구성
mkdir /embed/ex/04; cd /embed/ex/04 실행 hello.c 작성 #include <stdio.h> int main() { printf ("Hello, world!\n") return 0; } ① ② ③ ④ ⑤ ⑥ ⑦
콘솔 에뮬레이터와 직렬 포트 임베디드시스템의 경우 타겟 보드에서 발생하는 진행 상황을 호스트 시스템에서 직렬 포트를 통하여 모니터링할 수 있는 콘솔 에뮬레이터를 사용 리눅스 운영체제의 경우 미니컴을 사용하며 윈도우 운영체제일 경우는 하이퍼터미널을 주로 사용 데스크탑 컴퓨터는 보통 2개의 직렬 포트가 있으며 COM 포트 혹은 표준 직렬 포트라고 함 COM1 포트는 /dev/ttyS0, COM2 포트는 /dev/ttyS1 장치에 대응
미니컴 구성 화면에서 화살표 키를 사용해 세 번째의 Serial port setup 메뉴 항목 선택 실습 4-6 미니컴 환경 설정 호스트 시스템의 미니컴을 설정 모드로 실행 미니컴 구성 화면에서 화살표 키를 사용해 세 번째의 Serial port setup 메뉴 항목 선택
직렬 포트 설정 화면의 각 항목을 다음과 같이 설정 실습 4-6 미니컴 환경 설정 직렬 포트 설정 화면의 각 항목을 다음과 같이 설정 - A 키를 누르면 커서가 /dev/modem 뒤로 감 → Serial Device 항목값을 /dev/ttyS0으로 설정하고 <Enter> 키를 누름 - B 키를 입력하면 커서가 /var/lock 뒤로 감 → 이미 /var/lock로 설정되어 더 필요한 작업 없음 - E 키를 누름 → 속도, 데이터 비트, 패리티 비트, 정지 비트를 보여주는 미니컴 통신 매개변수 화면이 나타남(X-HYPER270-TKU의 경우 속도: 115200, 데이터 비트: 8, 패리트 비트: No, 정지 비트: 1) → 키를 눌러 115200 8N1로 설정하고 I 키를 누
Save setup as dfl 항목을 선택한 후 [Enter] 키를 눌러 설정 값을 저장 실습 4-6 미니컴 환경 설정 F 키를 눌러서 Hardware Flow Control의 값을 No로 바꿈 [Esc] 키를 한 번 누름 Save setup as dfl 항목을 선택한 후 [Enter] 키를 눌러 설정 값을 저장 Exit 항목을 선택 후 [Enter] 키를 누름 → 환경 설정이 끝나고 미니컴 창이 나타남 → Exit from Minicom 항목 선택 후 [Enter] 키를 누름
타겟 시스템의 수동 부팅 타겟 시스템의 자동 부팅
컴파일을 자동화해주는 명령어 생성 프로그램 최종 목표 파일(target file)의 빌드(Build) 과정을 정의해두면 필요한 작업만 수행하여 목표 파일을 생성 종속된 파일들의 상호 의존 관계를 명시한 목록 파일(description file)을 사용하여 목표 파일을 생성 원시 파일의 일부가 수정되면 목표 파일을 새롭게 생성하기 위해 다시 컴파일할 파일을 자동으로 판단, 필요한 명령어만 이용해 다시 컴파일하는 지능적인 유틸리티 다중 모듈 프로그램의 재사용성을 유지하고 프로그램 수정에 대한 재번역을 최소화
hello를 생성하기 위한 Makefile 목록 파일이 makefile 혹은 Makefile라면 –f 옵션을 사용해 목록 파일을 명시할 필요 없음 hello를 생성하기 위한 Makefile hello: hello.c gcc –o hello hello.c
매크로와 레이블 매크로: 특정한 코드를 단순하게 표현하는 기법 레이블: 부품 파일이 없는 의존행의 목표 파일 이름을 의미하며, 명령행의 성격을 대표하는 이름 TARGET := hello OBJECT := hello.o SOURCE := hello.c $(TARGET): $(SOURCE) gcc –o $(TARGET) $(SOURCE) clean: rm –f $(TARGET) $(OBJECT)
임베디드시스템의 개발 환경은 호스트 시스템, 타겟 시스템, 백엔드로 구분된다. 호스트 시스템이란 임베디드시스템을 개발하기 위한 자원 즉, 컴퓨팅 환경을 제공하는 시스템이다. 타겟 시스템이란 개발된 임베디드시스템 프로그램을 테스트하고 구동할 수 있는 시스템이다. 백엔드란 호스트 시스템과 타겟 시스템간에 통신을 하기 위한 매개체다. 툴체인이란 호스트 시스템에 설치되는 타겟 시스템을 위한 개발 환경이다. 임베디드시스템에서 JTAG을 사용하는 용도는 보드에 대한 디버깅 기능보다 부트로더를 플래시 메모리에 퓨징하는 것이다. 리눅스용 임베디드시스템을 위한 콘솔은 호스트 시스템에 설치한 미니컴을 주로 사용한다. Make 유틸리티는 파일의 상호 의존 관계를 분석하여 컴파일을 자동화해주는 명령어 생성 프로그램으로, 원시 코드의 변화에 대한 재번역을 최소화한다.
Thank you