리눅스 커널 2.6.14 기반 PXA 270 핸들링 ②

임베디드 리눅스 시스템 구축Toolchain 환경 구축기본적으로 Intel PXA270 기반 보드에 맞는 케이블과 X-HYPER270-TKU 보드, 일반 PC가 갖춰져 있어야 한다. 참고로 X-HYPER270-TKU는 하이버스의 상표이며, 본 원고는 하이버스 보드를 기반으로 진행한다.1. Toolchain이란Toolchain이라고 부르는 크로스 개발 도구(Cross Devel- opment Tool)는 임베디드 리눅스에서 동작하는 프로그램을 개발하는데 주로 사용하는 도구이다. 일반 PC에서 gcc를 이용하여 컴파일하고 복잡한 프로그램은 make 도구를 사용하며, 디버거를 위해 gdb를 사용하는 것처럼 임베디드 시스템도 이러한 도구를 사용한다. 임베디드 시스템(Embedded System)을 개발하기 위해서는 Host System이란 개발환경이 필요하다. 이 개발환경이 필요한 이유는 임베디드 시스템의 특성상 큰 용량의 저장장치를 가지지 못하기 때문이다.Toolchain은 이런 개발에 필요한 모든 환경을 통칭하여 말한다. X-Hyper270-TKU는 PXA27X MPU를 사용하기 때문에, 일반 데스크톱의 x86 계열과는 다른 개발 도구(ARM cross 개발 도구)를 사용하게 된다.사용할 교차 개발 도구는 아래와 같이 GNU Tool을 사용한다.● GNU gcc compilers for C, C++● GNU binutils● GNU C Library● GNU C header위의 GNU Tool은 일반 GNU Tool과는(x86 계열) 다른 컴파일러(ARM cross compiler)를 사용하기 때문에 컴파일을 하게 되면 ARM에서 실행 가능한 바이너리가 생성된다.2. Toolchain 소개2.1 bintils컴파일에 필요한 기본적인 도구들을 묶어 놓은 패키지로, as(어셈블러), ld(링커), objcopy, objdump, ar 등의 도구를 포함한다. 이러한 유틸리티들은 타깃 시스템의 프로그램을 위한 유틸리티이므로 타깃 시스템에 맞게 설치해 줘야 한다. 2.2 gccgcc는 C++, 포트란(Fortran), 자바(Java)와 같은 컴파일러를 포함하지만 C 컴파일러를 가장 많이 사용한다. 응용 프로그램을 컴파일 할 때 gcc 컴파일러 뿐만 아니라 라이브러리(glibc)도 함께 있어야 하지만, 커널을 컴파일 할 때는 별도의 라이브러리가 필요하지는 않다.gcc를 설치하는 것은 다소 까다롭다. gcc를 타깃 시스템에 맞게 컴파일하고 설치하는 일은 다른 작업에 비해서 까다롭기 때문에 타깃 보드의 매뉴얼을 참고해야 한다. gcc를 컴파일하기 전에 먼저 해야 할 일은 타깃 시스템에 설치할 리눅스 커널의 헤더를 링크(ln)해야 한다.2.3 glibcC 프로그램은 많은 함수를 사용한다. 프로그래머가 직접 작성한 함수만 사용할 수도 있지만 대부분은 라이브러리와 결합을 요구한다. GNU에서 개발한 glibc는 리눅스 시스템에서 필요로 하는 거의 모든 서비스를 제공하는 라이브러리들의 모임인 만큼 크기가 매우 크기 때문에 임베디드 시스템에서는 그대로 사용할 수 없고 크기를 줄이는 작업을 통하여 임베디드 시스템에 적재한다. Glibc 컴파일과 설치 역시 gcc 만큼 어렵고, 잘못된 컴파일과 설치는 호스트 시스템에 있는 다른 응용 프로그램의 실행에 영향을 미칠 수 있으므로 주의가 필요하다.3. Toolchain 설치X-Hyper270-TKU는 Fedora4나 Fedora5가 설치된 호스트 PC 환경에서 개발되었다. X-Hyper270-TKU에서 사용하는 Toolchain은 소스를 직접 컴파일하여 생성된 디렉토리를 압축한 것이다.사용한 교차 개발 툴들은 다음과 같다.● binutils-2.15.tar.gz● gcc-3.4.3.tar.gz● glibc-2.3.2.tar.gz● glibc-linuxthreads-2.3.2.tar.gz개발에 필요한 Toolchain은 arm.linux.org.uk에서 구할 수 있는 iwmmxt-1.0.0.tar.gz을 사용한다. 압축된 iwmmxt -1.0.0.tar.gz 파일을 /opt로 풀어서 작업한다.그림 2는 /opt/에 압축이 풀린 iwmmxt-1.0.0.tar.gz 파일의 내용이다.JTAG 환경 구축1. JTAG 개요X-Hyper270-TKU에서 JTAG을 사용하는 용도는 보드 디버깅 외에 Bootloader를 flash fusing 하는 역할을 가지고 있다. Flash fusing이 주로 사용되는 기능이다. 여기서는 간단한 JTAG의 개요와 기능, 사용방법에 대해 설명한다.2. JTAG이란일반적으로 JTAG란 말보다는 Boundary-Scan이란 말을 더 많이 사용하는데, JTAG은 칩 내부에 Boundary Cell이란 것을 두어 외부의 핀과 일대 일로 연결시켜 프로세서가 할 수 있는 동작을 중간에 Cell을 통해 모든 동작을 인위적으로 수행할 수 있어 여러 가지 하드웨어 테스트나 연결상태 등을 체크할 수 있다.3. JTAG 기능JTAG가 제공하는 기능을 먼저 살펴보면 프로세서(CPU)의 상태와는 상관없이 디바이스의 모든 외부 핀을 구동시키거나 값을 읽어들일 수 있는 기능을 제공한다.JTAG의 주요 기능은 다음과 같다.● 디바이스 내에서 모든 외부와의 연결점을 가로챈다.(즉 외부로 나가는 각각의 핀들과 일대 일로 연결)● 각각의 sell은 serial shift register(boundary scan register)를 형성하기 위해서 서로 연결되어 있다.● 전체적인 인터페이스는 5개의 핀에 의해서 제어된다.(TDI, TMS, TCK, nTRST, TDO)● 회로의 배선과 소자의 전기적 연결상태를 테스트 한다.● 디바이스간 연결상태를 테스트 한다.● 플래시 메모리에 fusing 하는 기능을 한다.4. JTAG Building하이버스에서 제공하는 jflashmm란 디렉토리가 있으며, 여기에 JTAG 소스가 있다. Makefile이 작성되어 있으므로 make 명령을 사용하면 JTAG 소스가 컴파일 된다(Make clean을 통해 기존의 컴파일된 파일들을 clean하고 make를 실행하면 된다). 컴파일이 성공하면 Jflashmm란 바이너리 파일이 생성된다.그림 3의 디렉토리 이름이 jflashmm으로 되어 있다.Bootloader 환경 구축1. Bootloader 개요부트로더란 임베디드 시스템의 전원을 켰을 때 실행되어 커널을 메모리에 적재해 주는 중요한 기능을 담당하는 시스템 컴포넌트이다. 일반적으로 리눅스 시스템에서 부트로더의 설정은 쉽고 일반적인 작업이지만, 임베디드 시스템에서는 설정방법과 작동하는 방식이 다르기 때문에 주의를 요한다.2. Bootloader 기능다음은 X-Hyper270-TKU에서 제공하는 부트로더의 기능이다.● Hardware 초기화 CPU clock 초기화 Memory timing 초기화 및 설정 Interrupt 초기화 UART(직렬 포트) 초기화 GPIO 초기화 Ethernet Mac 주소 획득 및 Ethernet 포트 초기화● Linux Booting Kernel image를 SDRAM에 저장한 후 Kernel image의 주소로 점프하는 기능● Image download Kernel image와 filesystem를 SDRAM에 다운로드하는 기능 다운로드는 Ethernet을 통해서만 가능하다. Ethernet - tftp, bootp● Flash 제어 Flash write, erase 기능 Flash lock, unlock 기능● 플래시 ROM에서 RAM으로 메모리 복사 커널 이미지 복사 램 디스크 및 루트 파일시스템 복사 부트로더 이미지 복사부트로더의 기능은 타깃 보드의 Bulverde CPU와 메모리 초기화, CPU 내에서 원하는 기능대로 GPIO를 설정하며, 네트워크를 통하여 파일을 다운로드할 수 있도록 네트워크 디바이스를 초기화하고 Flash ROM에 저장되어 있던 각각의 이미지들을 램에 복사한다. 또한 타깃 보드의 LED, 텍스트 LCD들과 같은 입출력 제어장치들의 초기화와 커널이 정상적으로 동작하도록 하기 위한 루틴들이 수행되도록 각종 디바이스를 초기화하며 입력될 명령어를 수행할 대기 모드를 제공한다.3. Bootloader compileBootloader를 컴파일 하기 위해서는 타깃 보드용 Toolchain이 설치되어 있어야 한다. 제공되는 bboot-1.0.1 소스 디렉토리로 이동하여 그림 4의 과정을 진행한다.Minicom 환경 구축1. Minicom 개요임베디드 시스템은 통신을 위한 각종 인터페이스가 표준 혹은 옵션으로 제공된다. 이 중 데이터를 직렬로 전송하는 RS-232C, RS-422, RS-485 등이 있다. 대표적인 직렬 인터페이스인 RS-232C는 타깃 시스템과 터미널 에뮬레이터 기능으로 PC와 연결된다.직렬 접속의 UART(Universal Asynchronous Receiver Transmitter)는 보통 TTL 신호 레벨을 갖기 때문에 잡음에 약하고 통신거리에 제약이 있다. TTL 신호를 입력받아 잡음에 강하고 멀리 갈 수 있도록 해주는 인터페이스를 line driver /receiver라 부르며 일반적으로 RS-232, RS-432 등이 있다. 보통 많이 사용하는 RS-232C 직렬 통신은 임베디드 시스템 개발단계에서 타깃 시스템과 호스트 시스템 간에 통신 및 타깃 보드의 모니터링으로 주로 사용한다.2. Minicom Setting그림 5는 설정이 완료된 minicom 화면이다.화면의 Serial Device 부분을 /dev/ttyS0로 설정하고 나머지는 그림 5와 같이 설정한다.Intel PXA27X 보드PXA27X 프로세서 개요PXA27X 프로세서는 휴대용 핸드헬드 및 범용 기기에 사용하기에 적합한 소형의 저전력, 고성능의 프로세서이며 다양한 주변장치가 통합된 Intel Xscale 마이크로아키텍처의 시스템온칩(system-on-chip) 마이크로프로세서이다.PXA27X 프로세서는 32비트 memory data bus와 주변장치들이 통합된 23mm×23mm 크기의 256핀 PBGA 패키지로 되어 있다. 프로세서의 메모리 인터페이스는 다양한 타입의 메모리를 지원하며 800×600pixel의 1, 2, 4, 8비트 gray scale과 8, 16, 18비트의 컬러 픽셀 디스플레이를 지원한다.그림 6은 X-HYER270-TKU에 있는 Intel PXA27X의 블록 다이어그램이다.Intel짋 Xscale™ Micro architecture의 특징● ARM* Architecture Version 5TE ISA 기반 ARM* Thumb Instruction Support ARM* DSP Enhanced Instruction● 저전력 고성능● Intel Wireless MMX™ technology designed for high-performance multimedia, 3-D games and advanced video● Intel Media Processing Technology Extend 16bit Multiply 40bit Accumulator● 32KB instruction Cache● 32KB Data Cache● 2KB Mini Data Cache● 2KB Mini Instruction Cache● Instruction and Data Memory Management Units(MMU)● Branch Target Buffer● Jtag port를 통한 Debug 기능Intel XScale micro architecture는 타깃에 맞는 다양한 주변장치들을 지원한다. 예를 들어 RISC 코어는 소형의 저전력, 멀티미디어 애플리케이션 성능의 향상을 위해 LCD 컨트롤러, 멀티미디어 컨트롤러, 외부 메모리 인터페이스 등과 통합 가능하다.이번호에서는 개발 도구 중심으로, 그리고 Intel PXA27X 기반 하드웨어의 정보를 소개했다.다음 호에서는 Intel PXA27X 기반으로 커널 2.6.14를 포팅하고 커널 내부 구조를 설명하도록 하겠다.
회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지