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/etc

[Linux] pkg-config 사용법

pkg-config는 소스 코드를 컴파일할 목적으로 설치된 라이브러리를 조회하기 위해 통일된 인터페이스를 제공하는 소프트웨어이다. pkg-config는 설치된 라이브러리에 대해 다양한 정보를 출력한다. C, C++ 컴파일러를 위한 매개변수 링커를 위한 매개변수 패키지 버전 apt-get 등으로 library를 설치한 후, 컴파일에 필요한 header들과 so파일이 어디 있는지 찾기 힘들 때 사용할 수 있다. gcc 옵션에 -I는 header 파일들이 위치한 폴더를 지정하고 -L 옵션으로 파일들의 경로를 지정하며 -l은 특정 so 파일을 지정한다. ● 설치된 라이브러리 목록 확인 $ pkg-config --list-all ● --libs, --cflags 아래와 같이 명령어를 입력하면 include 경로와..

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/[KOCW] 운영체제

[운영체제] Virtual Memory 7 (Page-Falut Frequency)

[ PFF (Page-Fault Frequency) ] 멀티프로그래밍 Degree를 조절하면서 Thrashing을 방지하는 알고리즘이다. 이 방식은 Working-Set 알고리즘처럼 Working-Set을 추정하는 방식이 아니라 직접 Page Fault Rate을 본다. ​ 현재 시점에 이 시스템에서 Page Fault가 얼마나 일어나는지를 보고, 특정 프로그램이 Page Fault를 얼마나 내는지 본다. 프로그램이 Page Fault를 많이 내고 있으면, 이 프로그램의 Working-Set은 메모리에 보장이 안 되어 있는 상태라고 판단하여 페이지를 더 내어준다. ​ 보통 일반적으로 프로그램에 할당되어 있는 메모리의 크기가 커지면 Page Fault 발생 비율이 줄어든다. 프로그램의 상황에 따라 곡선의 ..

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에서..

728x90
반응형
라닝
'Embedded system' 카테고리의 글 목록 (3 Page)