2. 타겟 보드 소개 및 크로스 컴파일러 설정

Download Report

Transcript 2. 타겟 보드 소개 및 크로스 컴파일러 설정

Cross-Compile Toolchain
충북대학교 지능로봇연구실
타겟 보드 소개
1. 주요 장치 명칭
Intelligent Robots Laboratory
2-1. 우측면 포트 및 장치
2-2. 좌측면 장치
09. 29. 14
타겟 보드 소개
3. CPU Peripheral
Intelligent Robots Laboratory
4. 타겟 보드 사양
09. 29. 14
타겟 보드 통신
Intelligent Robots Laboratory
1-1. 시리얼 통신
2. 장치 연결
• 용도 : 커널 디버그 메시지 출력, 터미널 사용, 저용량 전송
• 콘솔용 micro usb와 PC연결 후 가상 데스크탑에 연결
• 프로그램 : minicom, putty, teraterm, …
1-2. 기타 통신 방식
• 그 외 사용 가능한 통신 방식
 USB : 부트로더에서 지원. 고속 파일전송 가능(smdkusbdl, fastboot)
 Ethernet : OS에서 지원. 터미널(telnet, ssh), 고속 파일
전송 가능(NFS, Samba, ftp, sftp, scp, …)
• 정상적으로 연결되었는지 확인
09. 29. 14
타겟 보드 통신
3-0. Ubuntu Repository 주소 설정
• apt-get 명령어로 프로그램 설치 시 사용할 repo 설정
• 공식 repo대신 한국 미러 서버로 변경
Intelligent Robots Laboratory
09. 29. 14
• [System Setting] – [Software&Updates] – [Ubuntu Software] –
“Download from : “ – [Other...] – “Korea, Republic of” – 원하는 서버
클릭 – [Choose Server] – Password 입력 – [Close]
타겟 보드 통신
Intelligent Robots Laboratory
3. Minicom 설치 및 초기 설정
• 포트 : ttyUSB0(USB-to-Serial), 속도 : 115200bps,
• No Hardware Control
• $ sudo apt-get install minicom
• [Serial port setup] – ‘a’ 입력 – “/dev/ttyUSB0” – ‘Enter’
– ‘f’ 입력 – ‘Enter’ – [Save setup as dfl] – [Exit]
• $ sudo chmod a+rw /dev/ttyUSB0
$ sudo minicom -s
09. 29. 14
타겟 보드 통신
4. 입출력 확인
• 타겟 보드에 전원을 넣고 메시지가 출력되는지 확인
• “Hit any key to stop autoboot : 3” 이 출력되면 아무 키
나 입력하여 부팅 중지 (그냥 부팅 시 안드로이드가 부팅)
• 부팅이 그냥 진행되었을 경우 안드로이드 부팅이 완료된
후 reboot 입력 - ’enter’
• Ctrl + ‘A’, ‘Z’ – ‘X’로 minicom 종료 후 보드 전원 차단
5. U-Boot
• 오픈소스 부트로더
(http://www.denx.de/wiki/U-Boot/WebHome)
• 다양한 시스템에 사용 가능
• Serial, Network, USB, Flash 지원
• Tip. “help” 를 입력하여 명령어 확인 가능
Ref : http://forum.falinux.com/zbxe/index.php?document_srl=553673
Intelligent Robots Laboratory
09. 29. 14
Cross-Compile
1-1. Common C/C++ Building Process
• 전처리->컴파일->링킹 과정을 거쳐 이진 파일로 출력
• 고급 언어에서 특정 CPU에 특화된 기계어로 번역하는 과정
Intelligent Robots Laboratory
09. 29. 14
1-2. Why do I need a Cross-Compile?
• 개발을 위한 컴퓨터(Host)와 프로그램을 실행할 컴퓨터
(Target)가 다를 경우 필요
• 저사양의 Target 환경에서 Build Process를 수행하는 대신
고사양의 Host 환경으로 대체하여 시간절약 도모
• I/O장치가 제한된 임베디드 시스템(산업용 임베디드 시스
템, PlayStation, XBOX, …)에서 유용한 방법
• 대부분의 임베디드 시스템 개발에서 채택하고 있는 개발
방식
• 인터프리터 방식 언어(Python, Perl, JavaScript, …)의 경우
불필요.
리눅스 프로그래밍
1. Editor 실행 (여기서는 gedit 사용)
Ref : http://www.ee.surrey.ac.uk/Teaching/Unix/unix1.html
Intelligent Robots Laboratory
2. 예제 코드 입력 후 저장
09. 29. 14
리눅스 프로그래밍
3. GNU Compiler(gcc)로 컴파일 / 실행
Ref : http://sunnmoon.egloos.com/viewer/1825047
Intelligent Robots Laboratory
09. 29. 14
Cross-Compile
2. Cross-Compiler Toolchain
• Compiler, assembler, linker, debugger, runtime lib. 등이 포함
• 미리 구성된 Toolchain
 ARM社 – RVDS(구형, 상용), DS-5(상용)
http://ds.arm.com/ko/
 MentorGraphics社 – CodeSourcery(Lite version 무료)
http://www.mentor.com/embedded-software/sourcery-tools/sourcerycodebench/editions/lite-edition/
 Linaro org. – linaro toolchain(무료)
http://www.linaro.org/downloads/
• 직접 구성이 가능하나 Host-Target과 궁합이 잘 맞는 패키지
버전 조합을 고르기가 힘들다.
 Crosstool-ng를 이용한 toolchain 자가 구성
https://wiki.linaro.org/WorkingGroups/ToolChain/Using/CrosstoolNg
• 대부분의 임베디드 개발보드 제조사에서 해당 보드에 적합한
툴체인을 제공
Intelligent Robots Laboratory
3. How to make Cross-Compiler Toolchain
1.
2.
3.
4.
5.
6.
7.
8.
9.
Decide the TARGET.
Decide on the Kernel/GCC/Glibc/Binutils version
combo.
Procure patches for all the above, if any available.
Decide PREFIX variable, where to put the image.
Compile binutils.
Obtain suitable KERNEL HEADERS for your platform.
Compile minimal GCC.
Build Glibc.
Recompile full-featured GCC.
09. 29. 14
Cross-Compile
Intelligent Robots Laboratory
4. 개발 환경 설정(non-IDE)
• Embedded Development kit DVD 또는 배포한 파일에서
arm-linux-gnueabi-gcc.tar.bz2을 ~/toolchain에 복사/압축해제
• 파일 확인
• arm-linux-gnueabi-gcc/bin을 PATH에 등록
09. 29. 14
Cross-Compile
Intelligent Robots Laboratory
09. 29. 14
5. 컴파일러 테스트
6. 크로스 컴파일 테스트
• PATH에 arm-linux-gnueabi-gcc/bin가 등록되어있는지 확인
• PATH에 arm-linux-gnueabi-gcc/bin가 등록되어있는지 확인
• $ arm-linux-gnueabi-gcc -v
• $ arm-linux-gnueabi-gcc hello.c –o hello_arm -Wall
Cross-Compile
7-1. 64비트 환경에서 에러가 날 경우
• 증상: No such file or directory가 표시되고 컴파일러 사용 불가
• 원인: 64비트 우분투에서는 64비트용 공유 라이브러리만 설치
되어 있다.
/lib32/ld-linux.so.2(ld.so 다이너믹 링커/로더의 32비트 버전),
/lib32/libc.so.6(C 라이브러리의 32비트 버전)이 필요
• 해결: libc6-i386, lib32stdc++6 패키지 설치
$ sudo apt-get install libc6-i386 lib32stdc++6 lib32z1 lib32ncurses5
lib32bz2-1.0
Ref : http://jaydenchoe.blogspot.kr/2012/03/64-gnueabi.html
Intelligent Robots Laboratory
09. 29. 14
7-2. 툴 체인 구성
ARM Cross-Compiler Toolchain
용도 및 기능
arm-linux-gnueabi-ar
라이브러리 생성 및 수정
arm-linux-gnueabi-as
GNU Assembler
arm-linux-gnueabi-c++
C++ Compiler
arm-linux-gnueabi-g++
C++ Compiler
arm-linux-gnueabi-gdb
Debugger
arm-linux-gnueabi-gcc
C Compiler
arm-linux-gnueabi-ld
GNU Linker
arm-linux-gnueabi-nm
Object 에서 심볼 생성
arm-linux-gnueabi-objcopy
Object 형식 변환
arm-linux-gnueabi-objdump
Object 정보 출력
arm-linux-gnueabi-ranlib
라이브러리 인덱스 생성
arm-linux-gnueabi-readelf
ELF 정보 표시
arm-linux-gnueabi-size
각 섹션 및 프로그램 크기 표시
arm-linux-gnueabi-strings
파일 내의 표시 가능한 문자열 표시
arm-linux-gnueabi-strip
심볼 제거
Makefile
1-1. 다중 소스 프로그램 빌드(main.c)
Intelligent Robots Laboratory
1-2. 다중 소스 프로그램 빌드(ns/ns.h)
1-3. 다중 소스 프로그램 빌드(ns/ns.c)
Ref : http://sunnmoon.egloos.com/viewer/1825047
09. 29. 14
Makefile
2. 다중 소스 프로그램 빌드(gcc)
Ref : http://sunnmoon.egloos.com/viewer/1825047
Intelligent Robots Laboratory
09. 29. 14
Makefile
3. Makefile작성
Ref : https://kldp.org/node/133775
Intelligent Robots Laboratory
4. Make / make clean
09. 29. 14