ESP30076 임베디드 시스템 프로그래밍 (Embedded System Programming)
조 윤 석 전산전자공학부
Module 5: Installation of Development Tools
툴체인 (Toolchain) 또는 크로스 컴파일러 설치하기
타겟보드와의 통신설정하기
기타 시스템 툴 설치하기
주차별 목표
2
크로스 컴파일러를 설치해야 하는 이유
– 리눅스가 설치된 가상 컴퓨터는 i386계열의 CPU를 탑재 하고 있고, 타겟보드는 ARM 계열의 CPU를 탑재하고 있 음
– 타겟보드에 필요한 바이너리 파일 컴파일은 호스트 컴퓨 터의 리눅스에서 수행해야 하므로 호스트 컴퓨터에 크로 스 컴파일러(cross compiler)설치 필요
크로스 컴파일러는 종종 툴체인(toolchain)이라고 부르며 혼용해서 사용
툴체인(Toolchain) 이란?
3
DVD 디스크를 이용한 툴체인 설치
– 툴체인 프로그램은 업체에서 제공하는 개발용 DVD에 들 어 있음
– VirtualBox에서 DVD장치 연결
툴체인 (Toolchain) 설치하기 -DVD 디스크 이용
4
DVD 디스크를 이용한 툴체인 설치
– DVD 디스크에 들어있는 타겟보드용 파일
툴체인 (Toolchain) 설치하기 -DVD 디스크 이용
5
DVD 디스크를 이용한 툴체인 설치
– 호스트 컴퓨터에 삽입된 DVD 디스크가 리눅스에 마운트 된 상태
툴체인 (Toolchain) 설치하기 -DVD 디스크 이용
6
DVD 디스크를 이용한 툴체인 설치
– 터미널 창에서 툴체인 설치 파일이 들어있는 toolchain 디 렉토리로 이동
– tar 명령어를 이용하여 툴체인 파일을 /opt 디렉토리로 압 축을 풀면 툴체인이 설치됨
툴체인 (Toolchain) 설치하기 -DVD 디스크 이용
7
# cd /media/Achro-210T-S1314/toolchain
# tar xvfj arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 –C /opt
DVD 디스크를 이용한 툴체인 설치
– 툴체인 설치를 위해 압축파일 풀기
툴체인 (Toolchain) 설치하기 -DVD 디스크 이용
8
DVD 디스크를 이용한 툴체인 설치
– 설치된 툴체인에 대한 주요 실행파일들은
/opt/toolchains/arm-2009q3/bin 디렉토리에 들어있음 – Achro-210T 타겟보드에 필요한 C 프로그램을 컴파일하기
위한 크로스 컴파일러: arm-linux-gcc
툴체인 (Toolchain) 설치하기 -DVD 디스크 이용
9
ISO 파일을 이용한 툴체인 설치
– 타겟보드용 DVD 디스크의 변환된 ISO 파일
툴체인 (Toolchain) 설치하기 -ISO 파일 이용
10
ISO 파일을 이용한 툴체인 설치
– 설치된 툴체인 파일 확인
툴체인 (Toolchain) 설치하기 -ISO 파일 이용
11
ISO 파일을 이용한 툴체인 설치
– VirtualBox 관리자에서 공유폴더 확인
툴체인 (Toolchain) 설치하기 -ISO 파일 이용
12
ISO 파일을 이용한 툴체인 설치
– VirtualBox 관리자를 통해 공유된 폴더 마운트하기
툴체인 (Toolchain) 설치하기 -ISO 파일 이용
13
ISO 파일을 이용한 툴체인 설치
– 타겟보드용 ISO 파일 마운트하기
툴체인 (Toolchain) 설치하기 -ISO 파일 이용
14
ISO 파일을 이용한 툴체인 설치
– 툴체인 파일 확인
툴체인 (Toolchain) 설치하기 -ISO 파일 이용
15
ISO 파일을 이용한 툴체인 설치
– 이후 설치하는 과정은 DVD 디스크로 설치하는 경우와 동 일
툴체인 (Toolchain) 설치하기 -ISO 파일 이용
16
root@esp:~# cd /root/achro-210T/toolchain/ ← 툴체인 설치 파일이 있는 위치로 이동
root@esp:~/achro-210T/toolchain# ls ← 파일 목록 확인
README.txt arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux- gnu.tar.bz2
root@esp:~/achro-210T/toolchain# tar xvfj arm-2009q3-67-arm-none- linux-gnueabi-i686-pc-linux-gnu.tar.bz2 –C /opt ← 압축 풀기
root@esp:~/achro-210T/toolchain# cd /opt/toolchains/arm-2009q3/bin
← 설치된 툴체인의 실행파일이 있는 위치로 이동
root@esp:/opt/toolchains/arm-2009q3/bin# ls ← 설치 파일(크로스 컴파일러: arm-linux-gcc) 확인
arm-linux-addr2line arm-none-linux-gnueabi-addr2line arm-linux-ar arm-none-linux-gnueabi-ar
………(생략)
환경변수 설정
– 크로스 컴파일러로 사용되는 명령어(예: arm-linux-gcc)들 이 명령어 라인 상에서 자동으로 실행되도록 환경 변수 PATH에 크로스 컴파일러가 들어있는 디렉토리 등록
툴체인 (Toolchain) 설치하기 -환경변수 설정
17
root@esp:~# vi /root/.bashrc ← 파일을 연 후 G를 눌러 파일의 맨 뒤로 이동한다
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases
fi# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
# . /etc/bash_completion
#fiexport PATH=$PATH:/opt/toolchains/arm-2009q3/bin ← 경로를 추가한다.
환경변수 설정
– 환경변수 업데이트 및 확인하기 root@esp:~# source /root/.bashrc root@esp:~# which arm-linux-gcc
/opt/toolchains/arm-2009q3/bin/arm-linux-gcc root@esp:~#
툴체인 (Toolchain) 설치하기 -환경변수 설정
18
툴체인 설치 확인
– Test File 작성
root@esp:~# vi hello.c
툴체인 (Toolchain) 설치 확인하기
19
/* File Name : hello.c */
#include <stdio.h>
int main(int argc, char **argv)
{ printf("Welcome to the Embedded Class!!!\n");
return 0;
}
툴체인 설치 확인
– Test File 컴파일 및 확인
툴체인 (Toolchain) 설치 확인하기
20
root@esp:~# mkdir /root/work ← 작업 디렉토리 생성 root@esp:~# cd /root/work ← 작업 디렉토리로 이동
root@esp:~/work# gcc hello.c –o hello.i386 ← 호스트용으로 컴파일
root@esp:~/work# arm-linux-gcc hello.c –o hello.arm ← 타겟용으로 컴파일 root@esp:~/work# ./hello.i386 ← 호스트(i386 머신)에서 정상적으로 실행됨 Welcome to the Embedded Class!!!
root@esp:~/work# ./hello.arm ← ARM용으로 컴파일 된 이미지는 호스트(i386)에서 실행되지 않음
bash: ./hello.arm: 바이너리 파일을 실행할 수 없음
root@esp:~/work# file hello.i386 ← 파일 속성 알아보기
hello.i386: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
root@esp:~/work# file hello.arm ← 파일 속성 알아보기
hello.arm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
리눅스 USB 개발 라이브러리
– 호스트 시스템에서 사용하는 USB 드라이버 패키지 (libusb-dev)를 우분투 홈페이지에서 다운로드
– 설치 화면
기타 시스템 툴 설치하기
-리눅스 USB 개발 라이브러리
21
root@esp:~# apt-get install libusb-dev
USB 다운로드 툴 설치
– Achro-210T는 USB를 통해서 부트로더, 커널 등의 이미지 를 다운로드 받을 수 있음
– 일반적으로 USB 전송 속도는 이더넷에 비해서 빠르며 사 용이 편리
기타 시스템 툴 설치하기 -USB 다운로드 툴
22
root@esp:~# mkdir /root/download ← 이전에 생성했다면 건너뛰기
root@esp:~# cp /root/achro-210T/utilities/linux/smdk-usbdl/smdk-usbdl.tar.gz ~/download root@esp:~# cd ~/download ← download 디렉토리로 이동
root@esp:~# tar xvfz smdk-usbdl.tar.gz ← 압축풀기
root@esp:~# cd dltools ← USB 개발 툴 설치 디렉토리로 이동 root@esp:~# ls
dltool.c Makefile readme.txt smdk-usbdl
root@esp:~# cp –a smdk_usbdl /usr/bin ← 툴을 시스템 디렉토리(/usr/bin)으로 복사
bl1 툴 설치
– 부트로더 중 부팅에 필요한 부트로더1(BL1)을 생성하는 유틸리티 만들기
기타 시스템 툴 설치하기 -bl1 툴
23
root@esp:~# cp ~/achro-210T/utilities/linux/makechecksum/makechecksum.tar.gz
~/download ← 파일복사
root@esp:~# cd /root/download ← download 디렉토리로 이동 root@esp:~# tar xvfz makechecksum.tar.gz ← 압축풀기
root@esp:~# cd makechecksum ← BL1 툴이 들어있는 디렉토리로 이동
root@esp:~# cp –a makechecksum /usr/bin ← BL1 툴을 시스템 디렉토리로 복사
호스트 컴퓨터와 타겟보드 간의 통신
– RS-232C를 이용한 직렬통신
• 주로 호스트 컴퓨터에서 타겟보드를 모니터링하거나 제어하는데 사용됨
• 간단한 파일을 주고받는데 사용됨
– 이더넷을 이용한 통신
리눅스 기반의 직렬통신 프로그램
– 미니컴은 호스트 컴퓨터와 Achro-210T 타겟 보드 간에 직 렬통신을 가능케 해 주는 가상터미널 소프트웨어
타겟보드와의 통신설정하기
24
리눅스 기반의 직렬통신 프로그램
– 미니컴 설치
타겟보드와의 통신설정하기
25
root@esp:~# apt-get install minicom ← 미니컴 설치 패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 다음 패키지를 더 설치할 것입니다:
lrzsz
다음 새 패키지를 설치할 것입니다:
lrzsz minicom
0개 업그레이드, 2개 새로 설치, 0개 지우기 및 243개 업그레이드 안 함.
412k바이트 아카이브를 받아야 합니다.
이 작업 후 1,470k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까 [Y/n]? y
받기:1 http://kr.archive.ubuntu.com/ubuntu/ lucid/universe lrzsz 0.12.21-5 [99.9kB]
……(생략)
리눅스 기반의 직렬통신 프로그램
– 미니컴에서 사용할 직렬통신 환경설정 – 미니컴 설정모드로 실행
– 미니컴 설정모드
타겟보드와의 통신설정하기
26
root@esp:~# minicom -s
리눅스 기반의 직렬통신 프로그램
– 미니컴 환경설정 선택 창에서 화살표 키를 사용하여
“Serial port setup”을 선택
타겟보드와의 통신설정하기
27
리눅스 기반의 직렬통신 프로그램
– 미니컴 환경설정
• 컴퓨터의 장치관리자 화면에서 “포트(COM & LPT)”를 확인
타겟보드와의 통신설정하기
28
리눅스 기반의 직렬통신 프로그램
– 미니컴 환경설정
• 가상머신 관리자의 [장치] - [USB 장치] 메뉴를 보면 포트에서 확 인한 USB-to-serial 케이블명을 선택
• 해당 장치는 호스트 컴퓨터가 아닌 가상머신에서 실행되고 있는 리눅스에서 사용하게 됨
• 리눅스에서 인식한 장치파일을 확인
타겟보드와의 통신설정하기
29
root@esp:~# ls –l /dev/ttyUSB*
0 crw-rw---- 1 root dialout 188, 0 2014-03-15 16:52 /dev/ttyUSB0
리눅스 기반의 직렬통신 프로그램
– 미니컴 환경설정
• 미니컴 통신설정 화면에서 A를 눌러 직렬장치명을 입력한 후 엔터키 누름
• 미니컴 통신설정 화면에서 E를 눌러 통신속도 설정을 진행
• 통신 속도는 115200, Data bit는 8, Stop bit는 1로, parity는 NO로 설 정
• E를 눌러 통신 속도를 맞추고 L, V, W를 차례로 눌러 나머지 부분을 맞추거나 Q를 눌러서 한 번에 설정
• 미니컴 통신 설정 화면에서 F를 눌러 Hardware Flow Control을 “No”
로 설정
• 미니컴 통신 설정 화면에서 G를 눌러 Software Flow Control을 “No”
로 설정
• 설정이 완료되면 엔터키를 눌러 상위메뉴로 이동
• 현재의 설정값을 상시 이용할 수 있도록 저장하기 위해서 화살표키를 이용하여 “Save setup as dfl”를 선택
• Enter를 눌러 설정된 값을 저장 후 Exit을 선택하여 설정 마침
타겟보드와의 통신설정하기
30
리눅스 기반의 직렬통신 프로그램
– 임베디드 장치 연결 후 전원을 인가하여 미니컴 동작 확인
타겟보드와의 통신설정하기
31
NFS 실습
– 준비사항
• LAN 크로스케이블
• 리눅스가 설치된 호스트 컴퓨터
• Achro-210T 실습보드(이하 타겟보드라는 용어와 혼용해서 사용함)
– 호스트 컴퓨터와 타겟보드를 NFS로 연결하기 위해서는 네트워크 상 에서 서로 인지할 수 있는 IP 주소를 할당
– 호스트 컴퓨터와 타겟보드의 IP주소
타겟보드와의 통신설정하기
32
NFS 실습
– 호스트 컴퓨터 IP주소 설정 (명령어 이용)
– 호스트 컴퓨터 IP주소 설정 (Xwindow 이용 – 아래의 내용 으로 설정)
– 타겟보드 IP주소 설정
타겟보드와의 통신설정하기
33
# ifconfig eth1 192.168.10.100
DEVICE : eth1
IP : 192.168.10.100
NETMASK : 255.255.255.0
Achro210T login: root
login[99]: root login on 'ttySAC0'
root@Achro210T:~# ifconfig eth0 192.168.10.110 root@Achro210T:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr BA:B0:BE:AD:00:00
inet addr:192.168.10.110 Bcast:192.168.10.255 Mask:255.255.255.0
………(생략)
NFS 실습
– 호스트 컴퓨터에서 NFS로 공유할 디렉토리를 지정
– 설정파일 입력 후 NFS 데몬 재시작
타겟보드와의 통신설정하기
34
root@esp:~# vi /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
## Example for NFSv4
/root *(rw,sync,no_root_squash,no_subtree_check)
root@esp:~# service nfs-kernel-server restart
NFS 실습
– 타겟보드에서 마운트 지점 생성 및 마운트 하기
– 이전 단계에서 생성한 Test File 실행해 보기
타겟보드와의 통신설정하기
35
root@Achro210T:~# mkdir /root/nfs
root@Achro210T:~# mount -t nfs –o nolock 192.168.10.100:/root /root/nfs root@Achro210T:~# df
Filesystem Size Used Available Use% Mounted on /dev/root 250.4M 17.6M 219.8M 7% /
tmpfs 192.5M 0 192.5M 0% /dev/shm tmpfs 192.5M 8.0K 192.5M 0% /tmp
192.168.10.100:/root 28.3G 8.0G 18.8G 30% /root/nfs root@Achro210T:~#
root@Achro210T:~# cd /root/nfs/work
root@Achro210T:~/nfs/work# ./hello.arm ← 크로스 컴파일된 파일 실행하기 Welcome to the Embedded Class!!!
NFS 실습
– 마운트 해제하기
NFS 오류 상황 대처하기
– 호스트 컴퓨터와 타겟보드가 네트워크 케이블로 잘 연결되어 있는지 확인
– 호스트와 타겟보드를 직접 연결하는 경우는 크로스 네트워크 케이블 을 사용하고 있는지 확인
– 호스트 컴퓨터와 타겟보드에 네트워크 주소가 같은 네트워크단의 주 소로 할당되어 있는지 확인
– 가상 PC를 사용하는 경우 타겟보드에 물리적으로 연결되는 네트워크 포트가 가상 PC 설정창에서 정상적으로 연결되어 있는지 확인한다.
– 호스트 컴퓨터에서 NFS 서버가 정상적으로 실행되고 있는지 확인 – 호스트 컴퓨터의 방화벽(보안수준)을 확인
– NFS 연결시 RPM timeout의 메시지가 출력되면서 연결되지 않는 경 우는 클라이언트 PC의 보안 때문
타겟보드와의 통신설정하기
36
root@Achro210T:~/nfs# cd
root@Achro210T:~# umount /root/nfs