SlideShare a Scribd company logo
1 of 15
cross compile
교차 컴파일(projung)
목차
1. 크로스 컴파일에 자주 등장하는 용어들
2. 크로스 컴파일 환경 구축
3. 크로스 컴파일 실습 하기
크로스 컴파일에 자주 등장하는 용어들
i386환경
intel 80386 CPU
i686환경
intel 80686 CPU (Pentium Pro 이상급)
x86
32 비트 운영체제, x32 기반 프로세서
ex) 32 비트 처리 표현 “0xffffffff” == 8bit * 4 = 32bit
“1111 1111 1111 1111 1111 1111 1111 1111”
x64
64 비트 운영체제, x64 기반 프로세서
ex) 64 비트 처리 표현 “0xffffffffffffffff” == 8bit * 8= 64bit
“1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111”
GCC(GNU Compiler Collection)컴파일러
우선 GCC를 사용하는 이유는 무료이고, Linux와 함께 관리와 업데이트가 되고 있습니다. GCC안에는 C
Complie와 여러가지 유틸등이 포함 되어 있습니다. 리눅스도 GCC가 있으며, 임베디드 시스템도 CPU버전마
다 ARM7, ARM9, ARM11, ARM Cortex .. 등이 있습니다. 우리들은 CPU에 맞는 GCC버전을 다운받아 사용하
면 됩니다. 쉽게 말해 linux용과 arm용 컴파일러가 다릅니다. 그러므로 생성된 바이너리도 달라질까요?
직접 실습을 해서 알아 보시면 됩니다.
크로스 컴파일에 자주 등장하는 용어들
Target system
Embedded System 환경이 말합니다.
Host system
i386인텔기반 cpu환경을 말합니다.
arm-linux-gnueabi
EABI는 ARM에서 만들어낸 “Embedded” ABI(Application Binary Interface )라고 합니다.
arm 툴체인 종류
arm-linux-gnueabi, arm-linux-gnueabihf, arm-none-linux-gnueabi-4.4.0_ARMv5TE
VFP(Vector Floating-Point)
ARM 컴파일러는 소프트웨어와 하드웨어에서 부동 소수점 산술을 관리하기 위한 많은 기능을 제공합니다.
(소프트웨어지원, 하드웨어지원, 특정한 하드웨어 아키텍처와 IEEE 부동소수점 표준 준수 수준을 지정 가능)
VFP가 지원되는 CPU가 있고, 지원되지 않는 CPU도 있습니다. ARM Cpu버전 마다 VFP기능이 있는 것도 있고,
없는 것도 있습니다.
크로스 컴파일에 자주 등장하는 용어들
임베디드 시스템이란?
특수한 목적을 수행하기 위해 태어난 시스템이라고 생각하면 됩니다. 단점은 일반 pc보다 속도가 느리고, 저
장 공간도 제약이 많습니다.
ex) smart phone, ip camera, nvr, dvr, ip공유기, voip단말기, raspberry pi …
툴체인(Toolchanin)이란?
“타겟 시스템”에서 프로그램 및 lib가 인식해서 동작 될 수 있도록 개발에 필요한 “호스트 시스템”의 소프트웨
어(유틸리티, 각종gcc) 개발환경을 한데 묶어서 보통 Toolchanin 이라고 말합니다.
크로스 컴파일이란?
우선 임베디드 시스템을 개발하기 위해서는 크로스 컴파일 환경을 구축하는 것이 기본 입니다.
이유는 임베디드 시스템의 하드웨어는 제약 사항이 많습니다. 대표적으로 성능과 저장공간이 문제가 됩니다.
그렇기 때문에 상대적으로 성능이 좋은 “호스트 시스템” 에서 작업을 진행 합니다. 즉 “타겟 시스템” 인식할
수 있는 있는 바이너리를 만듭니다. 이러한 작업들을 통칭해서 크로스 컴파일 이라고 합니다. [그림1]
[그림1] 크로스 컴파일 진행 과정
호스트 타겟
크로스 컴파일에 자주 등장하는 용어들
임베디드 시스템 타겟 보드 종류 와 선택
임베디드 시스템 타겟 보드의 종류는 여러 가지가 있습니다.
제일 중요한 것은 무엇을 어떻게 만들 것인지 결정 후 목적에 맞는 보드와 칩을 선택 해야 합니다.
익숙한 보드들이 눈에 보이시죠?
해당 보드를 홍보하려는 목적이 아님을 말씀 드립니다.
[그림5]
삼성개발 보드
[그림4]
망고 보드
[그림3]
오드로이드 보드
[그림2]
라즈베리파이 보드
[그림6]
실제 삼성 보드
크로스 컴파일 환경 구축
Toolchanin 다운로드
인터넷을 잘 찾아보면 됩니다. 그리고 ”호스트 시스템“ 에 다운을 받고, opt 경로에 저장 합니다.
Toolchanin 설치
Toolchanin 설치 방법은 크게 2가지로 볼 수 있습니다.
Toolchanin 을 다운받아 압축을 풀어 사용하는 방법
Toolchanin 을 설치하는 방법
Toolchanin 환경 설정 확인
$ pwd
/opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin
$ ls
arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc-ranlib arm-linux-
gnueabihf-ld arm-linux-gnueabihf-objdump arm-linux-gnueabihf-strings
arm-linux-gnueabihf-ar arm-linux-gnueabihf-cpp arm-linux-gnueabihf-gcc-4.9.4 arm-linux-gnueabihf-gcov arm-linux-
gnueabihf-ld.bfd arm-linux-gnueabihf-ranlib arm-linux-gnueabihf-strip
arm-linux-gnueabihf-as arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-gdb arm-linux-
gnueabihf-nm arm-linux-gnueabihf-readelf gdbserver
arm-linux-gnueabihf-c++ arm-linux-gnueabihf-g++ arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-gfortran arm-linux-
gnueabihf-objcopy arm-linux-gnueabihf-size runtest
$ arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/5/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4' --with-bugurl=file:///usr/share/doc/gcc-
5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-
linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --
enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object -
-disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-
cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-armhf-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-
5-armhf-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-armhf-cross --with-arch-directory=arm --with-ecj-
jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --enable-objc-gc --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-
arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --disable-werror --enable-multilib --enable-checking=release
--build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- --
includedir=/usr/arm-linux-gnueabihf/include
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4)
크로스 컴파일 환경 구축
[Toolchanin 을 다운받아 압축을 풀어 사용하는 방법]
$ ls /usr/bin/arm-linux-gnueabi*
/usr/bin/arm-linux-gnueabi-addr2line /usr/bin/arm-linux-gnueabi-dwp /usr/bin/arm-linux-gnueabi-gcc-nm /usr/bin/arm-linux-
gnueabi-gcov-tool /usr/bin/arm-linux-gnueabi-nm /usr/bin/arm-linux-gnueabi-strings
/usr/bin/arm-linux-gnueabi-ar /usr/bin/arm-linux-gnueabi-elfedit /usr/bin/arm-linux-gnueabi-gcc-nm-5 /usr/bin/arm-linux-
gnueabi-gcov-tool-5 /usr/bin/arm-linux-gnueabi-objcopy /usr/bin/arm-linux-gnueabi-strip
/usr/bin/arm-linux-gnueabi-as /usr/bin/arm-linux-gnueabi-gcc /usr/bin/arm-linux-gnueabi-gcc-ranlib /usr/bin/arm-linux-
gnueabi-gprof /usr/bin/arm-linux-gnueabi-objdump
/usr/bin/arm-linux-gnueabi-c++filt /usr/bin/arm-linux-gnueabi-gcc-5 /usr/bin/arm-linux-gnueabi-gcc-ranlib-5 /usr/bin/arm-linux-
gnueabi-ld /usr/bin/arm-linux-gnueabi-ranlib
/usr/bin/arm-linux-gnueabi-cpp /usr/bin/arm-linux-gnueabi-gcc-ar /usr/bin/arm-linux-gnueabi-gcov /usr/bin/arm-linux-
gnueabi-ld.bfd /usr/bin/arm-linux-gnueabi-readelf
/usr/bin/arm-linux-gnueabi-cpp-5 /usr/bin/arm-linux-gnueabi-gcc-ar-5 /usr/bin/arm-linux-gnueabi-gcov-5 /usr/bin/arm-linux-
gnueabi-ld.gold /usr/bin/arm-linux-gnueabi-size
크로스 컴파일 환경 구축
[Toolchanin 을 설치하는 방법]
$ sudo apt-get install gcc-arm-linux-gnueabihf*
$ ls /usr/bin/arm-linux-gnueabi*
/usr/bin/arm-linux-gnueabi-addr2line /usr/bin/arm-linux-gnueabi-gcc-nm-5 /usr/bin/arm-linux-gnueabi-objdump /usr/bin/arm-
linux-gnueabihf-elfedit /usr/bin/arm-linux-gnueabihf-gprof
/usr/bin/arm-linux-gnueabi-ar /usr/bin/arm-linux-gnueabi-gcc-ranlib /usr/bin/arm-linux-gnueabi-ranlib /usr/bin/arm-linux-
gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-ld
/usr/bin/arm-linux-gnueabi-as /usr/bin/arm-linux-gnueabi-gcc-ranlib-5 /usr/bin/arm-linux-gnueabi-readelf /usr/bin/arm-linux-
gnueabihf-gcc-5 /usr/bin/arm-linux-gnueabihf-ld.bfd
/usr/bin/arm-linux-gnueabi-c++filt /usr/bin/arm-linux-gnueabi-gcov /usr/bin/arm-linux-gnueabi-size /usr/bin/arm-linux-
gnueabihf-gcc-ar /usr/bin/arm-linux-gnueabihf-ld.gold
/usr/bin/arm-linux-gnueabi-cpp /usr/bin/arm-linux-gnueabi-gcov-5 /usr/bin/arm-linux-gnueabi-strings /usr/bin/arm-linux-
gnueabihf-gcc-ar-5 /usr/bin/arm-linux-gnueabihf-nm
/usr/bin/arm-linux-gnueabi-cpp-5 /usr/bin/arm-linux-gnueabi-gcov-tool /usr/bin/arm-linux-gnueabi-strip /usr/bin/arm-linux-
gnueabihf-gcc-nm /usr/bin/arm-linux-gnueabihf-objcopy
/usr/bin/arm-linux-gnueabi-dwp /usr/bin/arm-linux-gnueabi-gcov-tool-5 /usr/bin/arm-linux-gnueabihf-addr2line /usr/bin/arm-
linux-gnueabihf-gcc-nm-5 /usr/bin/arm-linux-gnueabihf-objdump
/usr/bin/arm-linux-gnueabi-elfedit /usr/bin/arm-linux-gnueabi-gprof /usr/bin/arm-linux-gnueabihf-ar /usr/bin/arm-linux-
gnueabihf-gcc-ranlib /usr/bin/arm-linux-gnueabihf-ranlib
/usr/bin/arm-linux-gnueabi-gcc /usr/bin/arm-linux-gnueabi-ld /usr/bin/arm-linux-gnueabihf-as /usr/bin/arm-linux-
gnueabihf-gcc-ranlib-5 /usr/bin/arm-linux-gnueabihf-readelf
/usr/bin/arm-linux-gnueabi-gcc-5 /usr/bin/arm-linux-gnueabi-ld.bfd /usr/bin/arm-linux-gnueabihf-c++filt /usr/bin/arm-linux-
gnueabihf-gcov /usr/bin/arm-linux-gnueabihf-size
/usr/bin/arm-linux-gnueabi-gcc-ar /usr/bin/arm-linux-gnueabi-ld.gold /usr/bin/arm-linux-gnueabihf-cpp /usr/bin/arm-linux-
gnueabihf-gcov-5 /usr/bin/arm-linux-gnueabihf-strings
/usr/bin/arm-linux-gnueabi-gcc-ar-5 /usr/bin/arm-linux-gnueabi-nm /usr/bin/arm-linux-gnueabihf-cpp-5 /usr/bin/arm-linux-
gnueabihf-gcov-tool /usr/bin/arm-linux-gnueabihf-strip
/usr/bin/arm-linux-gnueabi-gcc-nm /usr/bin/arm-linux-gnueabi-objcopy /usr/bin/arm-linux-gnueabihf-dwp /usr/bin/arm-
linux-gnueabihf-gcov-tool-5
크로스 컴파일 환경 구축
[Toolchanin 을 설치하는 방법]
이전 페이지와 현 페이지의 차이점을 이해 하시길 바랍니다.
설치패키지 요약 내용
$ sudo apt-get install emdebian-archive-keyring
$ sudo apt-get install libc6-armel-cross libc6-dev-armel-cross
$ sudo apt-get install binutils-arm-linux-gnueabi
$ sudo apt-get install gcc-arm-linux-gnueabi
$ sudo apt-get install g++-arm-linux-gnueabi
$ sudo apt-get install u-boot-tools
$ sudo apt-get install libncurses5-dev
크로스 컴파일 환경 구축
[Toolchanin 을 설치하는 방법]
테스트 할 C 코드 작성
소스코드는 “호스트 시스템” 에서 작성 한다.
파일명
test.c
소스코드
#include <stdio.h>
int main(void)
{
printf("hellon");
return 0;
}
크로스 컴파일 실습 하기
바이너리 실행 파일 만들기
$ /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -o arm-
hello test.c
바이너리 버전 확인하기
$ file arm-hello
arm-hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter
/lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.16,
BuildID[sha1]=c2bfa28dc043812bd6e1c95702a7a2952a593434, not stripped
바이너리 파일을 복사하기
생성된 바이너리 arm-hello 파일을 “타겟 시스템” 에 복사합니다.
바이너리 파일을 실행하기
복사한 바이너리 파일을 실행하여 결과를 확인합니다.
$ ./arm-hello
hello
크로스 컴파일 실습 하기
리눅스 버전과 arm용 비교 하기
$ gcc -o hello test.c
$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-
linux-x86-64.so.2, for GNU/Linux 2.6.32,
BuildID[sha1]=465eccf3c6ec7b684ee494da79c624f74ca23665, not stripped
$ ./arm-linux-gnueabihf-gcc -o arm-hello test.c
$ file arm-hello
arm-hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter
/lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.16,
BuildID[sha1]=2bbee689bf0e94b11a489d780200792a273acd6c, not stripped
크로스 컴파일 실습 하기
• 수고 했습니다.

More Related Content

What's hot

Why zsh is Cooler than Your Shell
Why zsh is Cooler than Your ShellWhy zsh is Cooler than Your Shell
Why zsh is Cooler than Your Shellbrendon_jag
 
ACPI Debugging from Linux Kernel
ACPI Debugging from Linux KernelACPI Debugging from Linux Kernel
ACPI Debugging from Linux KernelSUSE Labs Taipei
 
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache JamesRoom 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache JamesVietnam Open Infrastructure User Group
 
Embedded Linux BSP Training (Intro)
Embedded Linux BSP Training (Intro)Embedded Linux BSP Training (Intro)
Embedded Linux BSP Training (Intro)RuggedBoardGroup
 
Android for Embedded Linux Developers
Android for Embedded Linux DevelopersAndroid for Embedded Linux Developers
Android for Embedded Linux DevelopersOpersys inc.
 
FreeBSD and Drivers
FreeBSD and DriversFreeBSD and Drivers
FreeBSD and DriversKernel TLV
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot) Omkar Rane
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요Jo Hoon
 
Enforcing Bespoke Policies in Kubernetes
Enforcing Bespoke Policies in KubernetesEnforcing Bespoke Policies in Kubernetes
Enforcing Bespoke Policies in KubernetesTorin Sandall
 
Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Anastasia Lubennikova
 
Ipmi spec ch1~6_simon_20110422
Ipmi spec ch1~6_simon_20110422Ipmi spec ch1~6_simon_20110422
Ipmi spec ch1~6_simon_20110422davidsmc
 
HBaseCon 2015: Taming GC Pauses for Large Java Heap in HBase
HBaseCon 2015: Taming GC Pauses for Large Java Heap in HBaseHBaseCon 2015: Taming GC Pauses for Large Java Heap in HBase
HBaseCon 2015: Taming GC Pauses for Large Java Heap in HBaseHBaseCon
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
 
BlueStore, A New Storage Backend for Ceph, One Year In
BlueStore, A New Storage Backend for Ceph, One Year InBlueStore, A New Storage Backend for Ceph, One Year In
BlueStore, A New Storage Backend for Ceph, One Year InSage Weil
 
Introduction to armv8 aarch64
Introduction to armv8 aarch64Introduction to armv8 aarch64
Introduction to armv8 aarch64Yi-Hsiu Hsu
 
Memory Compaction in Linux Kernel.pdf
Memory Compaction in Linux Kernel.pdfMemory Compaction in Linux Kernel.pdf
Memory Compaction in Linux Kernel.pdfAdrian Huang
 
COSCUP 2020 RISC-V 32 bit linux highmem porting
COSCUP 2020 RISC-V 32 bit linux highmem portingCOSCUP 2020 RISC-V 32 bit linux highmem porting
COSCUP 2020 RISC-V 32 bit linux highmem portingEric Lin
 
Linux Kernel Booting Process (2) - For NLKB
Linux Kernel Booting Process (2) - For NLKBLinux Kernel Booting Process (2) - For NLKB
Linux Kernel Booting Process (2) - For NLKBshimosawa
 

What's hot (20)

Why zsh is Cooler than Your Shell
Why zsh is Cooler than Your ShellWhy zsh is Cooler than Your Shell
Why zsh is Cooler than Your Shell
 
Qemu Pcie
Qemu PcieQemu Pcie
Qemu Pcie
 
ACPI Debugging from Linux Kernel
ACPI Debugging from Linux KernelACPI Debugging from Linux Kernel
ACPI Debugging from Linux Kernel
 
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache JamesRoom 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
 
Embedded Linux BSP Training (Intro)
Embedded Linux BSP Training (Intro)Embedded Linux BSP Training (Intro)
Embedded Linux BSP Training (Intro)
 
Android for Embedded Linux Developers
Android for Embedded Linux DevelopersAndroid for Embedded Linux Developers
Android for Embedded Linux Developers
 
FreeBSD and Drivers
FreeBSD and DriversFreeBSD and Drivers
FreeBSD and Drivers
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot)
 
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
 
Enforcing Bespoke Policies in Kubernetes
Enforcing Bespoke Policies in KubernetesEnforcing Bespoke Policies in Kubernetes
Enforcing Bespoke Policies in Kubernetes
 
Embedded Android : System Development - Part III
Embedded Android : System Development - Part IIIEmbedded Android : System Development - Part III
Embedded Android : System Development - Part III
 
Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)
 
Ipmi spec ch1~6_simon_20110422
Ipmi spec ch1~6_simon_20110422Ipmi spec ch1~6_simon_20110422
Ipmi spec ch1~6_simon_20110422
 
HBaseCon 2015: Taming GC Pauses for Large Java Heap in HBase
HBaseCon 2015: Taming GC Pauses for Large Java Heap in HBaseHBaseCon 2015: Taming GC Pauses for Large Java Heap in HBase
HBaseCon 2015: Taming GC Pauses for Large Java Heap in HBase
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
 
BlueStore, A New Storage Backend for Ceph, One Year In
BlueStore, A New Storage Backend for Ceph, One Year InBlueStore, A New Storage Backend for Ceph, One Year In
BlueStore, A New Storage Backend for Ceph, One Year In
 
Introduction to armv8 aarch64
Introduction to armv8 aarch64Introduction to armv8 aarch64
Introduction to armv8 aarch64
 
Memory Compaction in Linux Kernel.pdf
Memory Compaction in Linux Kernel.pdfMemory Compaction in Linux Kernel.pdf
Memory Compaction in Linux Kernel.pdf
 
COSCUP 2020 RISC-V 32 bit linux highmem porting
COSCUP 2020 RISC-V 32 bit linux highmem portingCOSCUP 2020 RISC-V 32 bit linux highmem porting
COSCUP 2020 RISC-V 32 bit linux highmem porting
 
Linux Kernel Booting Process (2) - For NLKB
Linux Kernel Booting Process (2) - For NLKBLinux Kernel Booting Process (2) - For NLKB
Linux Kernel Booting Process (2) - For NLKB
 

Similar to cross compile

리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"
리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"
리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"리얼리눅스
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편Sam Kim
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍NDOORS
 
망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9종인 전
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340Samsung Electronics
 
시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203doo rip choi
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기Chanwoong Kim
 
망고100 보드로 놀아보자 6
망고100 보드로 놀아보자 6망고100 보드로 놀아보자 6
망고100 보드로 놀아보자 6종인 전
 
우분투에 시스템콜 추가하기
우분투에 시스템콜 추가하기우분투에 시스템콜 추가하기
우분투에 시스템콜 추가하기Hoyoung Jung
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoMario Cho
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows TerminalOnGameServer
 
Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)wonyong hwang
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱Jong Wook Kim
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)NAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3Wooseok Seo
 
망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324종인 전
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfkwbak
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 YoungSu Son
 

Similar to cross compile (20)

리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"
리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"
리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203
 
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
[NDC18] 만들고 붓고 부수고 - 〈야생의 땅: 듀랑고〉 서버 관리 배포 이야기
 
망고100 보드로 놀아보자 6
망고100 보드로 놀아보자 6망고100 보드로 놀아보자 6
망고100 보드로 놀아보자 6
 
우분투에 시스템콜 추가하기
우분투에 시스템콜 추가하기우분투에 시스템콜 추가하기
우분투에 시스템콜 추가하기
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
 
Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324
 
Raspberry Pi Basic Usage
Raspberry Pi Basic UsageRaspberry Pi Basic Usage
Raspberry Pi Basic Usage
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 

cross compile

  • 2. 목차 1. 크로스 컴파일에 자주 등장하는 용어들 2. 크로스 컴파일 환경 구축 3. 크로스 컴파일 실습 하기
  • 3. 크로스 컴파일에 자주 등장하는 용어들 i386환경 intel 80386 CPU i686환경 intel 80686 CPU (Pentium Pro 이상급) x86 32 비트 운영체제, x32 기반 프로세서 ex) 32 비트 처리 표현 “0xffffffff” == 8bit * 4 = 32bit “1111 1111 1111 1111 1111 1111 1111 1111” x64 64 비트 운영체제, x64 기반 프로세서 ex) 64 비트 처리 표현 “0xffffffffffffffff” == 8bit * 8= 64bit “1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111” GCC(GNU Compiler Collection)컴파일러 우선 GCC를 사용하는 이유는 무료이고, Linux와 함께 관리와 업데이트가 되고 있습니다. GCC안에는 C Complie와 여러가지 유틸등이 포함 되어 있습니다. 리눅스도 GCC가 있으며, 임베디드 시스템도 CPU버전마 다 ARM7, ARM9, ARM11, ARM Cortex .. 등이 있습니다. 우리들은 CPU에 맞는 GCC버전을 다운받아 사용하 면 됩니다. 쉽게 말해 linux용과 arm용 컴파일러가 다릅니다. 그러므로 생성된 바이너리도 달라질까요? 직접 실습을 해서 알아 보시면 됩니다.
  • 4. 크로스 컴파일에 자주 등장하는 용어들 Target system Embedded System 환경이 말합니다. Host system i386인텔기반 cpu환경을 말합니다. arm-linux-gnueabi EABI는 ARM에서 만들어낸 “Embedded” ABI(Application Binary Interface )라고 합니다. arm 툴체인 종류 arm-linux-gnueabi, arm-linux-gnueabihf, arm-none-linux-gnueabi-4.4.0_ARMv5TE VFP(Vector Floating-Point) ARM 컴파일러는 소프트웨어와 하드웨어에서 부동 소수점 산술을 관리하기 위한 많은 기능을 제공합니다. (소프트웨어지원, 하드웨어지원, 특정한 하드웨어 아키텍처와 IEEE 부동소수점 표준 준수 수준을 지정 가능) VFP가 지원되는 CPU가 있고, 지원되지 않는 CPU도 있습니다. ARM Cpu버전 마다 VFP기능이 있는 것도 있고, 없는 것도 있습니다.
  • 5. 크로스 컴파일에 자주 등장하는 용어들 임베디드 시스템이란? 특수한 목적을 수행하기 위해 태어난 시스템이라고 생각하면 됩니다. 단점은 일반 pc보다 속도가 느리고, 저 장 공간도 제약이 많습니다. ex) smart phone, ip camera, nvr, dvr, ip공유기, voip단말기, raspberry pi … 툴체인(Toolchanin)이란? “타겟 시스템”에서 프로그램 및 lib가 인식해서 동작 될 수 있도록 개발에 필요한 “호스트 시스템”의 소프트웨 어(유틸리티, 각종gcc) 개발환경을 한데 묶어서 보통 Toolchanin 이라고 말합니다. 크로스 컴파일이란? 우선 임베디드 시스템을 개발하기 위해서는 크로스 컴파일 환경을 구축하는 것이 기본 입니다. 이유는 임베디드 시스템의 하드웨어는 제약 사항이 많습니다. 대표적으로 성능과 저장공간이 문제가 됩니다. 그렇기 때문에 상대적으로 성능이 좋은 “호스트 시스템” 에서 작업을 진행 합니다. 즉 “타겟 시스템” 인식할 수 있는 있는 바이너리를 만듭니다. 이러한 작업들을 통칭해서 크로스 컴파일 이라고 합니다. [그림1] [그림1] 크로스 컴파일 진행 과정 호스트 타겟
  • 6. 크로스 컴파일에 자주 등장하는 용어들 임베디드 시스템 타겟 보드 종류 와 선택 임베디드 시스템 타겟 보드의 종류는 여러 가지가 있습니다. 제일 중요한 것은 무엇을 어떻게 만들 것인지 결정 후 목적에 맞는 보드와 칩을 선택 해야 합니다. 익숙한 보드들이 눈에 보이시죠? 해당 보드를 홍보하려는 목적이 아님을 말씀 드립니다. [그림5] 삼성개발 보드 [그림4] 망고 보드 [그림3] 오드로이드 보드 [그림2] 라즈베리파이 보드 [그림6] 실제 삼성 보드
  • 7. 크로스 컴파일 환경 구축 Toolchanin 다운로드 인터넷을 잘 찾아보면 됩니다. 그리고 ”호스트 시스템“ 에 다운을 받고, opt 경로에 저장 합니다. Toolchanin 설치 Toolchanin 설치 방법은 크게 2가지로 볼 수 있습니다. Toolchanin 을 다운받아 압축을 풀어 사용하는 방법 Toolchanin 을 설치하는 방법
  • 8. Toolchanin 환경 설정 확인 $ pwd /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin $ ls arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc-ranlib arm-linux- gnueabihf-ld arm-linux-gnueabihf-objdump arm-linux-gnueabihf-strings arm-linux-gnueabihf-ar arm-linux-gnueabihf-cpp arm-linux-gnueabihf-gcc-4.9.4 arm-linux-gnueabihf-gcov arm-linux- gnueabihf-ld.bfd arm-linux-gnueabihf-ranlib arm-linux-gnueabihf-strip arm-linux-gnueabihf-as arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-gdb arm-linux- gnueabihf-nm arm-linux-gnueabihf-readelf gdbserver arm-linux-gnueabihf-c++ arm-linux-gnueabihf-g++ arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-gfortran arm-linux- gnueabihf-objcopy arm-linux-gnueabihf-size runtest $ arm-linux-gnueabihf-gcc -v Using built-in specs. COLLECT_GCC=arm-linux-gnueabihf-gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/5/lto-wrapper Target: arm-linux-gnueabihf Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4' --with-bugurl=file:///usr/share/doc/gcc- 5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable- linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ -- enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object - -disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk- cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-armhf-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj- 5-armhf-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-armhf-cross --with-arch-directory=arm --with-ecj- jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --enable-objc-gc --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with- arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --disable-werror --enable-multilib --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- -- includedir=/usr/arm-linux-gnueabihf/include Thread model: posix gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4) 크로스 컴파일 환경 구축 [Toolchanin 을 다운받아 압축을 풀어 사용하는 방법]
  • 9. $ ls /usr/bin/arm-linux-gnueabi* /usr/bin/arm-linux-gnueabi-addr2line /usr/bin/arm-linux-gnueabi-dwp /usr/bin/arm-linux-gnueabi-gcc-nm /usr/bin/arm-linux- gnueabi-gcov-tool /usr/bin/arm-linux-gnueabi-nm /usr/bin/arm-linux-gnueabi-strings /usr/bin/arm-linux-gnueabi-ar /usr/bin/arm-linux-gnueabi-elfedit /usr/bin/arm-linux-gnueabi-gcc-nm-5 /usr/bin/arm-linux- gnueabi-gcov-tool-5 /usr/bin/arm-linux-gnueabi-objcopy /usr/bin/arm-linux-gnueabi-strip /usr/bin/arm-linux-gnueabi-as /usr/bin/arm-linux-gnueabi-gcc /usr/bin/arm-linux-gnueabi-gcc-ranlib /usr/bin/arm-linux- gnueabi-gprof /usr/bin/arm-linux-gnueabi-objdump /usr/bin/arm-linux-gnueabi-c++filt /usr/bin/arm-linux-gnueabi-gcc-5 /usr/bin/arm-linux-gnueabi-gcc-ranlib-5 /usr/bin/arm-linux- gnueabi-ld /usr/bin/arm-linux-gnueabi-ranlib /usr/bin/arm-linux-gnueabi-cpp /usr/bin/arm-linux-gnueabi-gcc-ar /usr/bin/arm-linux-gnueabi-gcov /usr/bin/arm-linux- gnueabi-ld.bfd /usr/bin/arm-linux-gnueabi-readelf /usr/bin/arm-linux-gnueabi-cpp-5 /usr/bin/arm-linux-gnueabi-gcc-ar-5 /usr/bin/arm-linux-gnueabi-gcov-5 /usr/bin/arm-linux- gnueabi-ld.gold /usr/bin/arm-linux-gnueabi-size 크로스 컴파일 환경 구축 [Toolchanin 을 설치하는 방법]
  • 10. $ sudo apt-get install gcc-arm-linux-gnueabihf* $ ls /usr/bin/arm-linux-gnueabi* /usr/bin/arm-linux-gnueabi-addr2line /usr/bin/arm-linux-gnueabi-gcc-nm-5 /usr/bin/arm-linux-gnueabi-objdump /usr/bin/arm- linux-gnueabihf-elfedit /usr/bin/arm-linux-gnueabihf-gprof /usr/bin/arm-linux-gnueabi-ar /usr/bin/arm-linux-gnueabi-gcc-ranlib /usr/bin/arm-linux-gnueabi-ranlib /usr/bin/arm-linux- gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-ld /usr/bin/arm-linux-gnueabi-as /usr/bin/arm-linux-gnueabi-gcc-ranlib-5 /usr/bin/arm-linux-gnueabi-readelf /usr/bin/arm-linux- gnueabihf-gcc-5 /usr/bin/arm-linux-gnueabihf-ld.bfd /usr/bin/arm-linux-gnueabi-c++filt /usr/bin/arm-linux-gnueabi-gcov /usr/bin/arm-linux-gnueabi-size /usr/bin/arm-linux- gnueabihf-gcc-ar /usr/bin/arm-linux-gnueabihf-ld.gold /usr/bin/arm-linux-gnueabi-cpp /usr/bin/arm-linux-gnueabi-gcov-5 /usr/bin/arm-linux-gnueabi-strings /usr/bin/arm-linux- gnueabihf-gcc-ar-5 /usr/bin/arm-linux-gnueabihf-nm /usr/bin/arm-linux-gnueabi-cpp-5 /usr/bin/arm-linux-gnueabi-gcov-tool /usr/bin/arm-linux-gnueabi-strip /usr/bin/arm-linux- gnueabihf-gcc-nm /usr/bin/arm-linux-gnueabihf-objcopy /usr/bin/arm-linux-gnueabi-dwp /usr/bin/arm-linux-gnueabi-gcov-tool-5 /usr/bin/arm-linux-gnueabihf-addr2line /usr/bin/arm- linux-gnueabihf-gcc-nm-5 /usr/bin/arm-linux-gnueabihf-objdump /usr/bin/arm-linux-gnueabi-elfedit /usr/bin/arm-linux-gnueabi-gprof /usr/bin/arm-linux-gnueabihf-ar /usr/bin/arm-linux- gnueabihf-gcc-ranlib /usr/bin/arm-linux-gnueabihf-ranlib /usr/bin/arm-linux-gnueabi-gcc /usr/bin/arm-linux-gnueabi-ld /usr/bin/arm-linux-gnueabihf-as /usr/bin/arm-linux- gnueabihf-gcc-ranlib-5 /usr/bin/arm-linux-gnueabihf-readelf /usr/bin/arm-linux-gnueabi-gcc-5 /usr/bin/arm-linux-gnueabi-ld.bfd /usr/bin/arm-linux-gnueabihf-c++filt /usr/bin/arm-linux- gnueabihf-gcov /usr/bin/arm-linux-gnueabihf-size /usr/bin/arm-linux-gnueabi-gcc-ar /usr/bin/arm-linux-gnueabi-ld.gold /usr/bin/arm-linux-gnueabihf-cpp /usr/bin/arm-linux- gnueabihf-gcov-5 /usr/bin/arm-linux-gnueabihf-strings /usr/bin/arm-linux-gnueabi-gcc-ar-5 /usr/bin/arm-linux-gnueabi-nm /usr/bin/arm-linux-gnueabihf-cpp-5 /usr/bin/arm-linux- gnueabihf-gcov-tool /usr/bin/arm-linux-gnueabihf-strip /usr/bin/arm-linux-gnueabi-gcc-nm /usr/bin/arm-linux-gnueabi-objcopy /usr/bin/arm-linux-gnueabihf-dwp /usr/bin/arm- linux-gnueabihf-gcov-tool-5 크로스 컴파일 환경 구축 [Toolchanin 을 설치하는 방법] 이전 페이지와 현 페이지의 차이점을 이해 하시길 바랍니다.
  • 11. 설치패키지 요약 내용 $ sudo apt-get install emdebian-archive-keyring $ sudo apt-get install libc6-armel-cross libc6-dev-armel-cross $ sudo apt-get install binutils-arm-linux-gnueabi $ sudo apt-get install gcc-arm-linux-gnueabi $ sudo apt-get install g++-arm-linux-gnueabi $ sudo apt-get install u-boot-tools $ sudo apt-get install libncurses5-dev 크로스 컴파일 환경 구축 [Toolchanin 을 설치하는 방법]
  • 12. 테스트 할 C 코드 작성 소스코드는 “호스트 시스템” 에서 작성 한다. 파일명 test.c 소스코드 #include <stdio.h> int main(void) { printf("hellon"); return 0; } 크로스 컴파일 실습 하기
  • 13. 바이너리 실행 파일 만들기 $ /opt/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -o arm- hello test.c 바이너리 버전 확인하기 $ file arm-hello arm-hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.16, BuildID[sha1]=c2bfa28dc043812bd6e1c95702a7a2952a593434, not stripped 바이너리 파일을 복사하기 생성된 바이너리 arm-hello 파일을 “타겟 시스템” 에 복사합니다. 바이너리 파일을 실행하기 복사한 바이너리 파일을 실행하여 결과를 확인합니다. $ ./arm-hello hello 크로스 컴파일 실습 하기
  • 14. 리눅스 버전과 arm용 비교 하기 $ gcc -o hello test.c $ file hello hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld- linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=465eccf3c6ec7b684ee494da79c624f74ca23665, not stripped $ ./arm-linux-gnueabihf-gcc -o arm-hello test.c $ file arm-hello arm-hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.16, BuildID[sha1]=2bbee689bf0e94b11a489d780200792a273acd6c, not stripped 크로스 컴파일 실습 하기