728x90
반응형

전체 글

C/C++, 임베디드 리눅스 시스템
728x90
반응형
Embedded system/[KOCW] 운영체제

[운영체제] 파일 시스템 구현 1 (연속 할당, 연결 할당, 색인 할당)

Storage에 있는 데이터를 접근하는 방식에는 Sequential Access (순차 접근)과 Direct Access(직접 접근)이 있다. 매체에 따라서 tape 같은 것들은 순차 접근만이 되고, 하드 디스크나 플래시 메모리 같은 매체들은 직접 접근이 가능하다. ​ 직접 접근이 가능한 매체라고 하더라도 데이터를 어떻게 관리하느냐에 따라 순차 접근만 허용하는 경우도 있고 직접 접근이 가능한 경우도 있다. ​ ✓ Allocation of File Data in Disk 연속 할당 (Contiguous Allocation) 연결 할당 (Linked Allocation) 색인 할당 (Indexed Allocation) 파일 시스템은 디스크를 논리적인 디스크 블록들의 집합으로 보며, 디스크 블록은 0, 1, ..

Embedded system/[KOCW] 운영체제

[운영체제] 파일 시스템 (File Open, File Descriptor, File System Mount)

[ File System ] 파일은 하드 디스크에 이름을 가지고 저장한다. 메모리는 주소를 통해서 접근하는 장치인 반면 파일은 이름을 통해서 접근한다. 리눅스 같은 운영체제에서는 장치들을 관리하기 위해서 파일이라는 이름을 사용해서 관리하기도 한다. 다양한 저장 장치들을 서로 다른 파일로 관리하고 있으며 이러한 파일을 Device Special File이라고 한다. 일반적으로 우리가 접근하는 파일과는 약간 다른 개념이다. ​ '이름'을 입력으로 받아 해당 데이터를 리턴해주는 소프트웨어가 바로 파일 시스템이다. 파일 시스템이 하드 디스크에 저장하는 정보는 크게 메타 데이터와 사용자 데이터로 나뉜다. 메타 데이터 : 파일의 속성 정보나 데이터 블록 인덱스 정보 사용자 데이터 : 사용자가 실제 기록하려고 했던 ..

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 라이브러리를 제공하기보..

프로그래밍/C & C++

[C++] 복사 생성자 (Copy Constructor), 얕은 복사 & 깊은 복사

[ 얕은 복사 (shallow copy) ] 값을 복사하는 것이 아닌, 값을 가리키는 포인터(주소 값)를 복사하는 것이다. 변수 생성에서 대입 연산자를 이용한 값의 복사는 문제가 되지 않지만, 객체에서는 문제가 발생할 수 있다. 변수 생성 시 얕은 복사 int x = 10; int y = x; 객체 생성 시 얕은 복사 class Simple { private: int num1; int num2; public: Simple(int n1, int n2) : num1(n1), num2(n2) {} void ShowSimpleData() { std::cout

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

728x90
반응형
라닝
404 Not Found