개발개발 환경환경 11
임베디드임베디드 시스템시스템 소프트웨어소프트웨어 II
개발 환경 1 2
차례차례
• 개발 환경
• Host와 Target의 연결
• Host 및 target 사양
• Toolchain이란, 설치 방법
• 시험 Cross Compile
• Minicom 설정 및 사용 방법
• JTAG 설치 및 사용 방법
• Bootloader, kernel, file system flash 방법
개발 환경 1 3
개발개발 환경환경
• Host 시스템– 임베디드 소프트웨어를 개발하는 시스템– 일반 PC에 Linux 운영체제를 설치하여 사용– Cross compile 환경 필요(toolchain 설치)– Target 시스템에 연결하는 소프트웨어 설치 (minicom, JTAG 프
로그램 등)
• Target 시스템 (=KIT)– 개발된 임베디드 소프트웨어가 실제 수행되는 시스템– Target CPU가 탑재된 시스템에 Linux 운영체제 porting– Bootloader 및 특별한 flash 메모리용 file system 설치
• Host와 target의 연결– Serial 선– JTAG 선– USB 선– Ethernet 선
개발 환경 1 4
HostHost와와 targettarget의의 연결연결
Host 시스템 Target 시스템연결
Ethernet 선
JTAG 선
Host 용터미널
Target 용터미널
(minicom)
Serial 선
개발 환경 1 5
Host Host 시스템시스템 사양사양
Red Hat Fedora Core 6O/S
10/100 BaseTNetwork
Serial / JTAGI/O
DVD: x16, CD: x48CD-ROM
110GDisk
512MMemory
Pentium IV 2.8GHzCPU
실습실의 Host 시스템
개발 환경 1 6
Target Target 시스템시스템 H/W H/W 사양사양
• CPU: Intel XScale PXA255 400MHz
• RAM: Samsung SDRAM 128MB
• ROM: Intel Flash 32MB• Screen: 6.4’’ TFT LCD (640 x 480)
• Touch Panel: BBADS7846E
• I/O: Serial, JTAG, USB 1.1(host/client), PCMCIA, Buttons, CMOS camera, IrDA, MIC, MMC
• Ethernet: CS8900A 10BaseT
• Audio: CS4202-JQ
• Cables: Power, Serial, Parallel, USB, Ethernet
• Case: Aluminum
개발 환경 1 7
Target Target 시스템시스템 S/W S/W 사양사양
• O/S: Linux 2.4.19 kernel
• Device Drivers: CS8900A Ethernet, Frame
buffer, BBADS7846E(Touch Screen),
USB(host/client), PCMCIA, IrDA, CS4202-JQ
stereo audio
• File System: Ramdisk, JFFS2
개발 환경 1 8
Target Target 시스템시스템 (PXA255(PXA255--pro2)pro2)
개발 환경 1 9
HostHost와와 targettarget의의 연결연결
JTAG 케이블serial 케이블
Ethernet 케이블USB 케이블
개발 환경 1 10
Cross compile Cross compile 환경환경
• Embedded 시스템은 매우 제한된 H/W 및 S/W resource를 가지고 있기 때문에 여기서 Embedded S/W를 개발할 수는 없다 (S/W 개발은 Host 시스템에서)
• 하지만 Host 컴퓨터의 processor와 Embedded 시스템의 processor는 다르기 때문에 Host 컴퓨터의 compiler를 사용하여 Embedded S/W를 compile할 수는 없다
• 그래서 Host 컴퓨터에서 작성된 프로그램을 Embedded 시스템에서 수행시키기 위하여 "Host to Embedded 시스템" cross compiler(교차 컴파일러)가 필요하다
• 일반적인 Linux 시스템에는 cross compiler가 설치되어있지 않기 때문에 개발에 필요한 cross compiler는 개발자가 설치하여야 한다
개발 환경 1 11
ToolchainToolchain이란이란??
• Target 시스템에서 수행되는 소프트웨어를 개발하기 위해 필요한 Host 시스템의 cross compile 환경
• 소스 코드를 compile하고 link하여 binary 실행 파일을생성하는데 필요한 각종 utility 및 library의 모음
• 기본적으로 assembler, C compiler, linker, C library 등으로 구성되어 있다.
• GNU에서 제공하는 Toolchain을 사용
– GNU GCC for C, C++
– GNU binary utilities: assembler, linker various object file utilities
– GNU C library
개발 환경 1 12
Toolchain Toolchain 설치설치 방법방법
• ARM CPU 용 toolchain 설치– Target 시스템에 포함된 CD에 arm-cross-compiler.tar.bz2라
는 파일이 있다
# mount /dev/cdrom /mnt/cdrom# cd /mnt/cdrom/Toolchain# cp arm-cross-compiler.tar.bz2 /usr/local# cd /usr/local# tar xvjf arm-cross-compiler.tar.bz2
# mount /dev/cdrom /mnt/cdrom# cd /mnt/cdrom/Toolchain# cp arm-cross-compiler.tar.bz2 /usr/local# cd /usr/local# tar xvjf arm-cross-compiler.tar.bz2
/usr/local/arm-linux 디렉토리가 만들어짐
개발 환경 1 13
$ vi .bashrc…export PATH=/usr/local/arm-linux/bin:$PATH…
$ . .bashrc
$ vi .bashrc…export PATH=/usr/local/arm-linux/bin:$PATH…
$ . .bashrc
Toolchain Toolchain 설치설치 방법방법
• 설치된 Toolchain 사용을 위한 Path 설정– PATH 설정
Tool chain이 설치된 위치
수정된 .bash_profile 적용
$ export PATH=/usr/local/arm-linux/bin:$PATH
개발 환경 1 14
시험시험 Cross CompileCross Compile
$ vi hello.c
#include<stdio.h>
int main(void)
{
printf("Hello Embedded\n");
return 0;
}
$ arm-linux-gcc –o arm-hello hello.c
$ file arm-hello
arm-hello : ELF 32-bit LSB executable, ARM, version 1 (ARM), for
GNU/Linux 2.4.18, dynamically linked (uses shared libs), not stripped
$ vi hello.c
#include<stdio.h>
int main(void)
{
printf("Hello Embedded\n");
return 0;
}
$ arm-linux-gcc –o arm-hello hello.c
$ file arm-hello
arm-hello : ELF 32-bit LSB executable, ARM, version 1 (ARM), for
GNU/Linux 2.4.18, dynamically linked (uses shared libs), not stripped
개발 환경 1 15
Minicom Minicom 설정설정 방법방법• 명령어 줄 "su root" 수행• 명령어 줄 "minicom –s" 수행• " Serial port setup " 선택 후 [Enter]
– A -> /dev/ttyS0 [Enter]– E -> I [Enter] // Speed-115200,
// Parity-No, Data-8, Stop-1– F // Hardware Flow Control-No– [ESC]
• "Modem and dialing" 선택 후 [Enter]– A -> [BS]…[Enter] // Init string 지우기– B -> [BS]…[Enter] // Reset string 지우기– [ESC]
• "Save setup as dfl" 선택 후 "Exit from minicom" 선택• 명령어 줄 "chmod 666 /dev/ttyS0" 수행• 명령어 줄 "chmod 777 /var/lock" 수행• 명령어 줄 "exit" 수행
개발 환경 1 16
Minicom Minicom 사용사용 -- KIT loginKIT login• 연결 절차
– Host 및 KIT의 전원이 off된 상태에서 Host의 serial 포트와 KIT의 serial 포트를 cable로 연결함
– Host를 on하여 booting하고 KIT를 on하여 booting함• 주의: 해체는 연결의 역순이며 Host와 KIT의 전원이 켜져 있
는 상태에서 serial cable을 연결하거나 및 해체하면 안됨• 명령어 줄 "minicom" 수행 후 KIT를 on
– [Enter] 를 치면 화면에 "PXA255-pro login: " 나옴– root 로 login함(password는 없음)
– 명령어 줄 "exit" 수행 // root에서 logout– ^Ax // minicom 끝내기
• KIT를 off한 후 Host를 shutdown함• Host와 KIT의 serial 선 해체
여기서 KIT의 Embedded Linux를 사용함
개발 환경 1 17
Minicom Minicom 사용사용 -- 파일파일 uploadupload
• Host에 있는 파일 "FILE"을 KIT로 upload– minicom을 수행하여 KIT로 login한다
– KIT의 원하는directory로 간다
– KIT에서 명령어 "rz"를 친다(주: rz는 receive zmodem protocol의 줄임말로 KIT 입장에서는receive임)
– Minicom에서 "^As"를 쳐서 파일을 send할 준비한다(주: Host minicom 입장에서는 send 임)
– Host에 있는 파일 "FILE"을 선택하여 KIT로 보낸다
– 얼마간의 시간이 지나면 성공적인 send가 일어났다는 메시지가 나오고 자동으로 KIT의 Linux로 돌아온다
– KIT의 Linux에서 파일 "FILE"을 확인한다
개발 환경 1 18
JTAGJTAG
• JTAG은 Joint Test Access Group의 준말
• 기본 용도
– 보드 내 회로의 배선 및 소자의 연결 상태 점검
– flash 메모리에 write할 때
• 기본 구조
– 보드 내 소자의 외부 연결점에 하나의 셀을 설치
– 각각의 셀은 시리얼 쉬프트 레지스터(바운더리 스캔
레지스터)를 형성하고 서로 연결됨
– 전체적인 인터페이스는 5개의 핀에 의해서 제어 (TDI,
TMS, TCK, nTRST, TDO)
개발 환경 1 19
JTAGJTAG
• Boundary-Scan Test Interface JTAG Diagram
소자의 연결 상태점검
Registers
셀
Flash 메모리 writeTAP
DigitalChip
개발 환경 1 20
JTAG JTAG 설치설치 방법방법
• Huins CD에 있는 Jflash 소스 파일인 "pxa255-jtag.tar.gz"를 Host로 복사한다
• 다음 명령어 줄을 차례로 수행한다
# tar xvzf pxa255-jtag.tar.gz
# cd include-0.2.3
# ./configure
# make install
# cd ../jtag-0.4
# ./configure
# make
# make install
개발 환경 1 21
JTAG JTAG 사용사용 방법방법
• 연결 절차
– Host 및 KIT의 전원이 off된 상태에서 Host의 parallel 포트에 KIT의 JTAG cable을 연결함
– Host를 on하여 booting하고 KIT를 on하여 booting함
• 주의: 해체는 연결의 역순이며 Host와 KIT의 전원이 켜져 있는 상태에서 JTAG cable을 연결하거나및 해체하면 안됨
• 사용 방법
# jtag
jtag> cable parallel 0x378 PXA255
jtag> detect
jtag> detectflash
개발 환경 1 22
Flash Flash 방법방법 -- JTAGJTAG
• JTAG를 사용한 flash 방법– flash 대상 파일이 있는 디렉토리로 이동– root permission에서 jtag 실행– jtag 초기화 후 다음 명령수행
• Bootloaderjtag> flashmem 0x00000000 blob
• Kerneljtag> flashmem 0x00080000 zImage
• Filesystemjtag> flashmem 0x00200000 ramdisk.gzjtag> flashmem 0x00800000 jffs2
개발 환경 1 23
Flash Flash 방법방법 -- SerialSerial• Serial을 사용한 flash 방법
– minicom을 사용해 KIT를 부트로더 상태로 부팅
• Bootloaderboot> xdownload blob
^As 키를 누른후 xmodem 선택, blob 파일 선택• Kernel
boot> xdownload kernel ^As 키를 누른후 xmodem 선택, zImage 파일 선택
• Filesystemboot> xdownload ramdisk
^As 키를 누른후 xmodem 선택, ramdisk.gz 파일 선택boot> xdownload usr
^As 키를 누른후 xmodem 선택, jffs2 파일 선택(참고: 파일 선택은 spacebar를 한번 누른다)
• 파일을 download한 후, flash {blob|kernel|ramdisk|usr} 명령을통해 flash한다.
개발 환경 1 24
참고참고 문헌문헌
• 정보통신연구진흥원, 한국정보처리학회,
임베디드 시스템 소프트웨어 I 교안, 2004.
• 휴인스, 홍릉과학출판사, Intel PXA255와
임베디드 리눅스 응용, 2004
• 상명대학교 임베디드 시스템 소프트웨어
트랙, http://et.smu.ac.kr, 2004.