728x90
반응형

Embedded system/임베디드 리눅스 프로그래밍 완전정복

728x90
반응형
Embedded system/임베디드 리눅스 프로그래밍 완전정복

[2장/툴체인] 크로스 컴파일 (Makefile, Autotools)

빌드 시스템 툴체인이 주로 make 변수 CROSS_COMPILE로 제어되는 순수한 makefile들 Autotools로 알려진 GNU 빌드 시스템 CMake (http://cmake.org) [ makefile ] 리눅스 커널, U-Boot 부트로더, BusyBox를 포함한 몇몇 중요한 패키지들은 크로스 컴파일이 매우 쉽다. 각각 컴파일할 때, make 변수 CROSS_COMPILE에 툴체인 접두어를 넣기만 하면 된다. (끝에 대시(-)가 붙는다.) BusyBox를 컴파일할 때 명령어 $ make CROSS_COMPILE=aarch 셸 변수로 설정할 경우 $ export CROSS_COMPILE=aarch $ make U-Boot와 리눅스의 경우, make 변수 ARCH도 지원하는 아키텍처로 설정해야 ..

Embedded system/임베디드 리눅스 프로그래밍 완전정복

[2장/툴체인] 라이브러리 링크 (정적 링크 & 동적 링크)

리눅스용 프로그램은 C 라이브러리인 libc와 링크가 된다. libc 링크는 매우 기본적이라서 gcc나 g++에 따로 지시하지 않아도 항상 libc 라이브러리와 링크한다. 그 외 링크하고 싶은 라이브러리는 명시해주어야 한다. 라이브러리 코드 링크 방법 정적 링크 응용 프로그램의 모든 라이브러리 함수와 의존 관계가 라이브러리 아카이브로부터 추출되어 실행 파일에 복사한다. 동적 링크 라이브러리 파일과 함수로의 참조가 코드 안에 만들어지지만 실제 링크는 실행 시에 동적으로 이루어진다. [ 정적 라이브러리 ] BusyBox와 스크립트 파일만으로 구성된 작은 시스템을 만든다면, BusyBox를 정적으로 링크해서 런타임 라이브러리 파일과 링커를 복사할 필요가 없는 편이 더 간단하다. 전체 C 라이브러리를 제공하기보..

Embedded system/임베디드 리눅스 프로그래밍 완전정복

[2장/툴체인] 툴체인 구조 및 구성

툴체인 안에 무엇이 들어있는지 알기 위해, crosstool-NG 툴체인을 살펴보자. 홈 디렉토리의 x-tools를 보면 두 가지 디렉토리가 있는 것을 볼 수 있다. aarch64-rpi3-linux-gnu : 라즈베리파이용 툴체인 디렉토리 arm-unknown-linux-gnueabi : QEMU용 ARM926EJ-S 툴체인 디렉토리 [ 툴체인 사용 ] 라즈베리파이 툴체인을 사용해 보자. $ cd ~/x-tools/aarch64-rpi3-linux-gnu/bin ~/x-tools/aarch64-rpi3-linux-gnu/bin/에 가면 크로스 컴파일러 aarch64-rpi3-linux-gnu-gcc가 있다. 이 컴파일러를 사용하려면 다음 명령으로 해당 디렉토리를 경로에 넣어야 한다. $ PATH=~/x..

Embedded system/임베디드 리눅스 프로그래밍 완전정복

[2장/툴체인] Crosstool-NG를 이용한 QEMU용 툴체인 빌드

[ QEMU용 configure ] QEMU Target은 ARMv5TE 명령어 세트를 구현한 ARM926EJ-S 프로세서 코어를 탑재한 ARM Versatile PB 평가보드를 에뮬레이트한다. 절차는 라즈베리파이 툴체인을 만들 때와 비슷하다. ● distclean 우선, distclean을 실행해 이전 빌드에서 남아 있는 것들이 없게 한다. $ ./ct-ng distclean ● 타깃 구성 선택 $ ./ct-ng arm-unknown-linux-gnueabi ● counfigure 변경 $ ./ct-ng menuconfig Paths and misc options에서 Render the toolchain read-only 끄기 (라이브러리를 추가하기 위함) ● 툴체인 빌드 $ ./ct-ng build ..

Embedded system/임베디드 리눅스 프로그래밍 완전정복

[2장/툴체인] Crosstool-NG를 이용한 라즈베리파이 3B+ 툴체인 빌드 (isl: download failed 에러)

[ 라즈베리파이용 configure ] crosstool-NG는 각기 다른 여러 가지 조합의 툴체인 빌드를 할 수 있다. 아래의 명령어는 다양한 플랫폼에 대한 설정에(arch: armv7, armv8, aarch64 등, 라이브러리: uClibc, libc 등) 대해 미리 정의된 구성을 보여준다. $ ./ct-ng list-samples crosstool-NG는 라즈베리파이 3 모델에 대한 config를 갖고 있기 때문에 그걸 이용해서 ARMv8 아키텍처와 libc 라이브러리용 64Bit 툴체인을 만들 수 있다. 이름에 접두어 show-를 붙이면 다음과 같이 default 구성을 볼 수 있다. ./ct-ng show-aarch64-rpi3-linux-gnu 표준 라이브러리는 glibc이며, 나중에 변경 ..

Embedded system/임베디드 리눅스 프로그래밍 완전정복

[2장/툴체인] crosstool-NG 설치

댄 케겔(Dan Kegel)이 크로스 개발 툴체인을 만드는 스크립트와 makefile을 작성하고 crosstool라고 불렀다. 그 기반을 이용해 차세대 crosstool인 crosstool-NG를 만들었으며, 소스로부터 독립형 크로스 툴체인을 만드는 가장 편리한 방법이다. [ crosstool-NG 설치 ] 우분투 Host PC에서 crosstool-NG를 사용하려면 다음 명령으로 패키지들을 설치해야 한다. $ sudo apt-get install automake bison chrpath flex g++ git gperf gawk libexpat1-dev libncurses5-dev libsdl1.2-dev libtool python2.7-dev texinfo 설치 후, crosstool-NG git에서..

Embedded system/임베디드 리눅스 프로그래밍 완전정복

[2장/툴체인] 툴체인(toolchain)이란?

툴체인은 임베디드 리눅스의 첫 번째 요소이자 프로젝트의 시작점으로 장치에서 실행될 모든 코드는 툴체인을 통해 컴파일된다. 초기 단계에서의 선택이 최종 산출물에 엄청난 영향을 끼칠 수도 있다. ● 툴체인 요건 프로젝트에 필요한 언어를 지원해야 한다. POSIX (Portable Operatin System Inerface) 및 기타 시스템 인터페이스에 대한 구현을 갖고 있어야 한다. 보안 결함이나 버그가 발견되면 업데이트가 되어야 한다. 프로젝트 내내 바뀌지 않아야 한다. (프로젝트 도중 컴파일러와 개발 라이브러리를 바꾸면 버그가 생기기 쉽다.) ● 툴체인 얻는 방법 파일을 다운로드해서 설치 crosstool-NG 도구를 통해 소스 코드로부터 툴체인 빌드 빌드 시스템이 생성한 툴체인 [ 툴체인 소개 ] 소..

Embedded system/임베디드 리눅스 프로그래밍 완전정복

[1장/시작] 임베디드 리눅스의 4요소 및 오픈소스

[ 프로젝트 생명주기 ] 이 책은 프로젝트 단계에 따라 네 부분으로 나뉘어 있으며 각 단계가 반드시 순차적인 것은 아니다. 1장 ~ 6장 : 보드 브링업 단계. 개발 환경을 설정하고 플랫폼을 만드는 데 필요한 요소들 7장 ~ 11장 : 시스템 아키텍처와 설계 선택. 프로그램과 데이터의 저장소, 시스템을 어떻게 초기화할지 12장 ~ 13장 : 응용 프로그램 작성. 프로세스와 스레드 모델을 효과적으로 사용하는 방법과 메모리 관리 방법 14장 ~ 15장 : 디버깅과 성능 최적화. 응용 프로그램과 커널의 코드를 추적, 프로파일, 디버깅 방법 16장 : 실시간 프로그래밍 임베디드 리눅스 4요소 모든 프로젝트는 이 4요소를 구하고 수정하고 배포하면서 시작한다. 툴체인 (toolchain) : 타깃 장치를 위한 코드..

728x90
반응형
라닝
'Embedded system/임베디드 리눅스 프로그래밍 완전정복' 카테고리의 글 목록