임베디드시스템개발환경 한국외국어대학교전자정보공학부이윤석 0 Outline 기본구성및용어 Cross Development ( 교차개발 ) Toolchain JTAG Bootp TFTP NFS 1 1
개발환경 기본구성 Host 시스템 임베디드소프트웨어를개발하는시스템 일반 PC에 Linux 운영체제를설치하여사용 Cross compile 환경필요 (toolchain 설치 ) Target 시스템에연결하는소프트웨어설치 (minicom, JTAG 프로그램등 ) Target 시스템 (= kit) 개발된임베디드소프트웨어가실제수행되는시스템 Target CPU가탑재된시스템에 Linux 운영체제 porting Bootloader 및특별한 flash 메모리용 file system 설치 Host 와 targett 의연결 Serial (or USB) JTAG Ethernet 2 Target System - 개발키트 (Pxa255 pro) 3 2
Target 시스템을위한터미널환경 TARGET은출력을위한별도의터미널을가지고있지않음 일반적으로 serial port/lan 을통한터미널 emulator 이용 Linux 에서는일반적으로 minicom 이용 Windows 에서는 Hyper-Terminal 등을이용 minicom ( 타겟용터미널 ) JTAG cable Serial cable Ethernet cable 4 터미널프로그램 : minicom Host 컴퓨터에서 minicom 실행및설정 #>minicom -s Serial port setup 선택, 통신파라미터설정 COM port baudrate (bps) data bits stop bit parity Flow control protocol Host에서실행되는 minicom 프로그램윈도우는 Target 시스템의 console 역할을하게됨 5 3
Cross Development ( 교차개발 ) 개발배경 Target (Embedded) 시스템은매우제한된 H/W, S/W 자원을가지므로여기서 Target용 S/W를개발하기어려움 따라서, 보다좋은사양의 Host 시스템에서 Target용 S/W 개발 문제점과해결방법 대개 Host 의사양 (processor, OS) 과 Target의사양이다르기때문에 Host 의개발도구를그대로사용할수없음 따라서, Host에별도의 Target용개발환경을구축, 즉 Host to Target 시스템 " 교차개발도구 (cross development tools) 필요 일반 Linux 시스템에서는이환경을제공하지않으므로, 개발자가자신이원하는교차개발환경을구축 6 Tool chain (1) Tool chain 이란? Target S/W 개발을위해필요한 Host system의교차개발환경 source code 을 compile하고 build 하여 binary 실행파일을생성하는데필요한각종 Utility 및 Library의모음 기본적으로 Assembler, Linker, C compiler, C library 등으로구성되어있다 대개 GNU에서제공하는 Tool-chain을사용 GNU GCC compilers for C, C++ GNU binary utilities assembler, linker various object file utilities GNU C library 7 4
Tool chain (2) ARM tool chain의예 binutils-arm-2.9.5.0 gcc-arm-2.95.2 libc-dev-arm-2.1.3 g++-arm-2.95.2 libstdc++2.10 arm-2.95.2 libstdc++2.10-dev-arm-2.95.2 그외각종 library Binutils, gcc, libc 의 ARM 용 version 은필수적으로설치 8 ARM 용 Tool chain 예 대부분의개발키트는 CD-ROM의형태로tool chain을제공 다음파일과같은형태의 ARM용 rpm을사이트에서구한후설치하는방법도있음. arm-linux-gcc-2.95.2-2.i386.rpm arm-linux-binutils-2.10-1.i386.rpm arm-linux-glibc-2.1.3-2.i386.rpm $rpm -ivh arm-linux-binutils-2.10-1.i386.rpm $rpm -ivh arm-linux-glibc-2.1.3-2.i386.rpm 2 i386 rpm $rpm -ivh arm-linux-gcc-2.95.2-2.i386.rpm 9 5
Toolchain PATH 설치된 Tool 사용을위한 PATH 설정 도구파일을시스템어느곳에서나사용가능하게함 PATH=/usr/local/arm-linux/bin:$PATH linux/bin:$path.bashrc ( 또는다른 shell script) 에설정 #>vi /root/.bashrc PATH=/usr/local/arm-linux/bin:$PATH #>source bashrc 수정된.bashrc 적용 Tool chain 이설치된위치 10 Toolchain 설치확인 Tool chain Test - Test 용파일생성 #> vi hello.c #include<stdio.h> int main(void) { printf( Hello Embedded ); return 0; } #> gcc o hello hello.c #> arm-linux-gcc o hello-arm hello.c #> ls #> file hello #./hello #> file hello-arm 다음과같은결과가나오면.. 크로스개발환경이제대로설치가된것이다. cross_test: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.18, dynamically linked (uses shared libs), not stripped VI 에디터를사용해서샘플프로그램생성 I386 용프로그램생성 ARM 용프로그램생성 11 6
JTAG (1) Joint Test Access Group PCB 와 IC 를테스트하기위한목적으로 1985 년에조직된 JTAG(Joint Test Action Group) 에의해제정된표준이다 JTAG 은 1990 년에 IEEE 에의해 IEEE 1149.1(Test 1(Test Access Port and Boundary-Scan Architecture) 로지정 1993년추가작업으로 IEEE 1149.1a로지정되었고현재는 IEEE 1149.1b로지정 용도 내부코어테스트 PCB 테스트 FPGA, Flash Fusing 12 JTAG (2) 동작방법 프로세서 (CPU) 의상태와관계없이디바이스의모든외부핀을구동시키거나값을읽어들일수있는기능을제공 디바이스내에서모든외부와의연결점을가로챔 Boundary Scan Register 각 CPU 입출력핀과일대일로연결되는 cell들을레지스터로구성 serial shift 제어인터페이스 5 개의핀에의해서제어 TCK : Test Clock Input TMS : Test Mode Select TDI : Test Data Input TDO : Test Data Output ntrst : Test Reset TAP controller 13 7
JTAG (3) Flash CPU Host Boot Loader Download 3 Digital Chip 2 Dongle 1 JTAG fusing utility Registers TAP Parallel cable JTAG interface 1. Parallel Port <--> JTAG 2. 전압변환 : 5V < --> 3V 3. 메모리인터페이스에뮬레이션 14 참고 ) Target 에 Bootloader Fusing 과정 # cd /temp_cd/bootloader/blob/src/blob # jtag jtag) cable parallel 0x378 PXA255 jtag) detect jtag) flashmem 0 blob 15 8
Bootp 프로토콜 (1) Ethernet 상에서부팅시 TCP/IP 자동설정을위한표준 디스크장치가없는클라이언트를위한프로토콜 UDP(User Datagram Protocol) 사용 Host와 Target 보드간최초 IP 기반접속을지원 최초연결에성공하면, 이후에는대개 tftp를통해데이터전송 Bootp 설정시필요한데몬 inetd, bootpd Serial cable 필요한 configuration file inetd.conf, bootptab, hosts, services Ethernet cross cable Host System Target System 16 Bootp 프로토콜 (2) 동작과정 Bootp Request : Target board가 host에게 IP를요구함 IP 요청 packet 을생성하여호스트에전송함. Bootp Reply : Host 는 Target 보드의 IP 주소를전달한다. IP 요청 packet 을 inetd 가수신한다. inetd는 bootpd에게 IP요청 packet을넘긴다. IP 응답 packet을 bootpd는 bootptab을참조하여ip응답 packet을전달한다. 해당데몬에서사용하는 configuration 파일 Bootp reply Bootp request 필요한데몬들 inetd services hosts inetd.conf Host Target bootpd bootptab 17 9
참고 ) Bootp 패킷형식 300 bytes 0 7 8 15 16 23 24 31bit Opcode 1=Request, 2=Rep Number of seconds Hardware type 1 = Ethernet Transaction ID Client IP address Hardware address Length(6=ethernet) Your IP address Server IP address Gageway IP address Client hardware address (16bytes) Server Hostname (64bytes) Boot filename (128bytes) Vendor-specific information (64bytes) Unused Hop count bootp 메시지는고정길이필드 ( 총 300바이트 ) 사용 : Request와 Reply가같은양식을사용 Opcode : message type 1=Request, 2=Reply Hardware type : 1= 10 Base Ethernet Hardware address Length : 6 = 10 Base Ethernet HOP count : 클라이언트에서 0으로 Setting, 게이트웨이에의해임의로사용 Transaction ID : 32bit 정수 (Random), client가 set, server가 return client는 Request와 Reply가같은지를확인 18 Number of Second : client가 bootstrap을시도한시간을 set Secondary server는이시간을참고하여일정시간이경과할때까지응답하지않음 Client IP Address : client가자기자신의 ip를알면넣고모르면0.0.0.0 Your IP Address : client ip 주소가 0 이면 server 가 ip 주소를채움 Server IP Address : server에의해채워짐 Gateway IP Address : Proxy server를사용할경우 Proxy server의라우터 IP Address를보충 Client Hardware Address : client는반드시 setting, ethernet MAC address와동일 Server Host Name : client는 option으로원하는서버지정가능만일 0이면임의서버, 0이아니면특정서버지정 Boot Filename : client는일반적인 Boot Filename 기술서버가응답시 (Reply) Boot file의실제경로제공 vendor-specific information : bootp 의확장과추가적인 parameter 에사용 Bootp Request Port 67, ip 0.0.0.0 bootp request 시 client 가자기자신의 ip 를 모르면 ip 0.0.0.0 으로보내고 reply 시 server 가 Target Board Bootp Reply Port 68, ip 211.104.101.228 Host client ip 주소를채워서보내준다 port사용은 server는 67 client는 68 사용 19 10
Bootp & inetd 모든 TCP/IP 통신은 inetd 슈퍼서버를통해관리된다. Bootp request : 타겟보드는 host에게 IP 주소를요구함 Bootp reply :host 는타겟보드의 IP 주소를전달한다. bootpd inetd tftpd telnetd ftpd Inetd : TCP/IP 를통하여통신을하고자할때이를관리하는데몬. TCP/IP 와관련된프로토콜은항상 inetd 로부터각각의해당되는 TCP/IP 관련데몬을호출한다. 20 Bootp 관련 Daemon Bootpd bootpd 프로세스는자신의구성파일 (bootptab) 을읽어서해당 MAC address를가진항목이있는가를확인 항목이존재한다면해당정보를가지고응답패킷을구성, 전달 이때몇가지의정보가 host로부터 target으로전달됨 sm : Local LAN의서브넷마스크 hd : host directory ht : LAN의하드웨어형태 ha : target의이더넷 MAC Address Inetd inetd 프로세스는 target에서보낸패킷을검출, 관련데몬실행 bootpd 데몬을요청하면해당 bootpd 데몬을호출 이외에 inetd.conf에설정된데몬들 (tftp, bootp, telnet, ftp등 ) 을관리참고 대부분의네트워크서버들은 request를기다리며대기하고있는서브프로세스들을가지고있지않다. 그래서이일은 inetd 가대신하게되는데, inetd는 inetd.conf에설정된모든네트워크포트들을듣고 (listen) 있다가 request가오면해당하는서버를기동시키는역할을한다. 21 11
Bootp 설치 Bootp 설치확인및미설치시설치 #>rpm qa grep bootp #>mount /mnt/cdrom #>cd /mnt/cdrom/tools/bootp #>rpm ivh bootp-2.4.3-7.i386.rpm 리눅스패키지설치확인명령어 리눅스패키지설치명령어 참고 ) rpm 관련패키지명령어 rpm qa ( 데몬이름 ) : 설치확인 rpm ivh ( 파일이름 ) : 설치과정을확인하면서설치 rpm e ( 파일이름 ) : 기존의설치된데몬삭제 주의 : 서로의존성이있는데몬들은최하위의존데몬부터삭제 22 bootptab Bootp 환경설정파일 #>cd /etc #>vi bootptab t b.default:\ hd=/tftpboot:bf=null:\ ip=192.168.0.7:\ sm=255.255.255.0 PXA255:ht=1:ha=0x000BA8030158:tc=.default 타겟보드에할당된 IP 타겟보드이더넷 MAC ADDRESS Bootptab file은 /etc directory안에있다. Bootptab file은 bootptab 서버가응답할 MAC address의목록을설정한다. sm - 서브넷마스크를포함한다. hd - host directory 포함한다.( 파일을주고받을때기준디렉토리 ) ht -랜의하드웨어형태를포함한다. ha -이더넷카드의하드웨어주소를포함한다. 23 12
기타 Network 환경설정파일 (1) inetd.conf [host]# cd /etc [host]# vi inetd.conf tftp dgram udp wait root /usr/sbin/in.tftpd /tftpdir Bootps dgram udp wait root /usr/sbin/tcpd bootpd 동작시키고자하는서버를설정 리눅스에서는기본적으로모든서비스를주석처리 (disable) 따라서, 원하면서비스라인의주석만제거하면동작함 hosts [host]# cd /etc [host]# vi hosts 127.0.0.1 localhost.localdomain localhost 211.104.101.227 linux 192.168.0.7 PXA255 hosts file은자신이관리하는 host : IP address 테이블 (DNS 거치지않음 ) 당연히 target 보드의 IP 주소를포함 host의이름은 bootptab에있는host 이름과같다. 위내용은 bootp가 linux나 PXA255에고정IP 주소를할당하도록하는것이다 bootptab에서의가상 ip명과같아야한다 (linux or PXA255) 24 기타 Network 환경설정파일 (2) services [host]# cd /etc [host]# viservices bootps 67/tcp # boop server tftp 69/udp # tftp server 각네트워크서버들이사용하는전송방식과포트번호를설정 현재 bootps는 67번포트와 tcp를사용하고 tftp는 69번포트와 udp를사용함을볼수있음 25 13
Bootp 설정과실행 /etc/xinet.d/bootp 파일작성 bootps 서비스설정 xinetd 서비스재실행 #>cd /etc/xinet.d #>vi bootp service bootps { disable = no flags socket_type protocol = udp wait user server = REUSE NAMEINARGS = dgram = yes = root = /usr/sbin/bootpd server_args =-s } #> service xinetd restart 수정된 Bootp을위해서비스재시작 26 TFTP (Trivial FTP) 용도 Target에서 Server로부터필요한File을읽어와 Memory에 Load할때주로사용하는 Protocol Disk 없는 System 을고려한단순한프로토콜 UDP를이용하여 Client와 Server 사이의통신 Booting에필요한간단한 Program과 BOOTP, RARP, TFTP만탑재한시스템에서많이이용되며펌웨어자동업그레이드에이용가능전송에러가능성이낮은가까운시스템간의데이터전송에사용 장점 시스템이단순하고간단함 어떤형태의전달서비스상에서도동작이가능 시스템구성이쉬움 단점 정보보호기능이없음 Data 전송결과에대한보장성이없음 ( 응용계층에서확인 ) 27 14
참고 ) TFTP 패킷형식 (1) IP Datagram UDP Datagram IP Header UDP Header TFTP Message 20bytes 8bytes =<512bytes 512 bytes의 Data Block을전송각 Block은아주간단한 4bytes 헤더 ( 응용계층 ) 를가짐 Block의전송번호는항상 1부터시작한다. No Checksum ASCII 또는 Binary 전송을지원하며, Remote File을 R/W에사용높은처리율보다는간단함을강조 28 참고 ) TFTP 패킷형식 (2) FTP TCP IP TFTP UDP Message Format IP Header UDP Header 20 8 IP datagram UDP datagram TFTP message OP Code RRQ WRQ Data ACK Error Value 1 2 3 4 5 OP Code(1, 2) File name 0 mode 0 2 n 1 n 1 Data (3) ACK (4) Error (5) Block 번호 Block 번호 2 2 Error 번호 전송 Data 2 2 0-512 Error Message 2 2 n 1 0 29 15
TFTP 설치및환경설정 설치확인및 rpm 설치 #>rpm qa grep tftp #>mount /mnt/cdrom #>cd /mnt/cdrom/tools/tftp #>rpm ivh tftp-server-0.29-3.i386.rpm 30 TFTP 환경설정 Host의 /root 밑에 tftpboot라는이름 ( 변경가능 ) 의디렉토리를만듬 #>cd /etc/xinetd.d #>vi tftp service tftp { disable = no soket_type = dgram protocol = udp wait = yes 전송될파일의위치 user = root server = /usr/sbin/in.tftpd 디렉토리 server_args = -s /tftpboot } #>service xinetd restart NFS(Network File System) (1) 배경및기능 SUN 사가개발한 RPC(Remote Procedure Call) 기반시스템 Remote Computer 의파일을마치자신의컴퓨터에있는것처럼이용 Server/Client 기반응용프로그램 File System이존재하지않는 Client 시스템에서원격의 Host 시스템이갖 고있는File System의일부를이용 임베디드시스템개발시많이활용됨 NFS Server /root /bin /bin /lib /lib /etc /sbin /net /kernel /arch /mm /driver /exam Host File System NFS Client /root /bin /lib /sbin /mm /driver /exam 31 16
NFS (2) NFS 구성과동작과정 user process local file access NFS client NFS server local file access kernel TCP/UDP IP client kernel TCP/UDP IP UDP port 2049 server kernel local disk local disk 32 NFS (3) 장점 Host에서작업디렉토리를 NFS 시스템을이용하여 Target Board의리눅스상에서 mount 시키면별도의 download 불필요 단점 Host 상의파일이 Target Board의리눅스파일시스템위에서접근, 실행이가능램디스크상에서올리기에너무큰파일도 NFS 상에서는호스트의기억용량에의존하기때문에쉽게처리가능 특수파일은 NFS에연결된디렉토리에만들수없음. 예 : 장치파일 읽고쓰는속도가빠른파일용도로는사용이곤란 예 : 멀티미디어파일 33 17
TFTP/NFS 를이용한부팅시나리오 Target RAM RAM Host 1.TFTP request Flash memory 부트로더 4. 커널분기 5. 분기및커널압축해제 Linux 커널 2.TFTP reply ( 압축커널만 ) 3. 압축커널다운로드 압축커널이미지 6. NFS Root FS 마운트 Host Hard Disk (File System) 34 NFS 서버설정 /etc/hosts 파일의내용에추가할사항 타겟보드IP <tab> 이름 /etc/exports 파일의내용에추가할사항 /home/nfs <tab> 타겟보드IP[ 또는 *](rw,no_root_squash) 예 ) /home/nfs *(rw, no_root_squash, no_all_squash) 또는 /home/nfs 203.247.100.101(rw, no_root_squash, no_all_squash) Permission options 옵션 root_squash no_root_squash ro rw insecure 기능 client 에서 root 를서버상에서 nobody 사용자로매핑 서버와 client 모두같은 root 사용 파일시스템을읽기전용으로마운트 파일시스템을읽기 / 쓰기로마운트 인증되지않은액세스도가능 35 18
NFS 설정 ( 예 ) NFS 서버측설정 NFS 디렉토리생성및권한설정 #>mkdir /home/nfs #>chmod 777 nfs #>chgrp nobody nfs NFS 환경설정 #>vi /etc/exports NFS 디렉토리, 타겟보드 IP /home/nfs 192.160.0.7(rw,no_root_squash,no_all_squash) #> NFS 서비스 start service nfs start 혹은 /etc/init.d/nfs start 문장사이사이에띄어쓰기는없어야한다 36 NFS 테스트 (1) NFS 파일공유 Host PC #>cd /home/nfs #>vi nfs_testfile.c #>ls Nfs test 를위한간단한파일작성 Target Board #>mkdir /mnt/nfs #>mount t nfs 192.168.0.5:/home/nfs /mnt/nfs #>ls /mnt/nfs Host PC IP, NFS 공유디렉토리 Target Board 에서보여질수있는디렉토리 37 19
NFS 테스트 (2) NFS 파일공유 Host PC Target Board 38 20