System Programming
GCC Compiler Manual
컴파일 과정소스코드는 다음과 같은 과정으로 컴파일되어 실행파일이 된다.전처리기(preprocessor): 소스코드의 주석제거, define을 치환하는 기능컴파일러(compiler): 어셈블리 파일로 변환(어셈블리어는 CPU 명령어 조합으로 CPU에 의존적)어셈블러(assembler): object 코드 파일로 변환. object 파일은 0과 1로 이루어진 바이너리 코드(아직 주소 정보가 확정되지 않음)링커(linker): object 파일을 묶어 실행 코드 파일로 변환. 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 낸다.(링커는 운영체제에 의존적)GCC 명령어명령창에서 gcc 매뉴얼을 확인해보자.GCC(1) GNU ..
Linux Inside #1 Booting: Bootloader에서 Kernel까지
이 게시물은 x86_64 아키텍쳐를 기준으로 하고 있다. 로우레벨이 내부적으로 어떻게 동작하는지 프로그램이 컴퓨터에서 어떻게 실행되는지 어떻게 그것들이 메모리에 적재되는지 커널이 프로세스와 메모리 관리를 어떻게 하는지, 네트워크 스택이 로우레벨에서 어떻게 동작하는지 등... 컴퓨터의 시작: 전원 버튼에서 리얼모드까지컴퓨터를 켤 때 먼저 메인보드가 전력을 공급받아야한다. 그 후 메인보드는 CPU를 작동시킨다. 이 때 CPU는 리셋 상태에서 시작하며 기본 레지스터 값을 초기화하고 real mode 라는 매우 기초적인 운영모드에서 작동을 시작한다. Real Mode란리얼 모드는 8086이라는 매우 오래된 CPU 부터 모든 현대적인 x86 프로세서까지 지원되는 모드이다. 리얼모드에서는 CPU가 최대 1MB 의 ..
BuildRoot 사용법 요약
Buildroot는 uClibc 개발자들이 uClibc를 테스트하기 위해 작은 임베디드 리눅스 시스템을 빌드할 수 있도록 만든 도구 cross compile을 사용하여 임베디드 시스템을 위한 리눅스 시스템을 빌드하는 과정을 단순화하고 자동화하는 도구이다. Buildroot는 cross compile toolchain, root file system, linux kernel image, bootloader를 생성할 수 있다. 또한 옵션을 통해 독립적으로 사용가능하여 이미 존재하는 툴체인을 사용하고 buildroot를 통해 root file system만 빌드할 수 있다. buildroot 는 특히 임베디드 분야에서 유용하다. 임베디드 시스템은 일반적인 x86 processor가 아닌 PowerPC, MI..
linux에서 process 간 통신 #1 program and process
운영체제의 근본 개념 중 하나는 프로세스이다. 프로세스는 운영체제에 의해 스케쥴링 되고 제어되는 동적 entity이다.추상적으로 프로세스는 실행 중인 프로그램, 현재 값, 상태 정보, 운영체제가 프로세스를 관리하는 데 사용하는 리소스로 구성된다.Linux와 같은 Unix 기반 운영체제에서 특정 시점에 여러 프로세스가 동시에 실행되고 각 프로세스는 독립된 환경에서 모든 시스템 리소스에 접근하고 제어할 수 있는 것으로 보이지만, 실제로 어느 한순간에 단일 프로세스만이 실행되고 있다.현재 실행 중인 프로세스를 빠르게 전환(context switching)함으로써 운영체제는 동시 프로세스 실행이 이루어지는 것처럼 보이게 한다. 멀티 프로그래밍(멀티 태스킹) : os가 여러 실행단계에 있는 프로세스들 간에 자원을..
Linux Device Driver 기초 #2 System Call 추가하기
운영체제의 구성: user mode와 kernel mode운영체제는 하드웨어 자원을 효율적으로 관리하고 자원에 대한 인터페이스를 제공한다. 그렇기 때문에 운영체제는 하드웨어와 어플리케이션 사이에서 동작한다. 다음은 운영체제의 기본적인 구성이다.커널은 하드웨어 자원 직접 관리하고 어플리케이션은 시스템 콜을 통해 커널에 자원을 요청한다.어플리케이션은 보통 user mode에서 동작하며 시스템 자원에 접근할 수 있는 권한이 제한되어있다. 시스템 자원에 접근할 때 어플리케이션은 시스템 콜을 통해 kernel mode로 전환된다. kernel mode에서 운영체제는 요청된 자원을 처리하고 다시 user mode로 돌아 간다. 운영체제에서 커널 모드와 사용자 모드는 시스템의 안전성을 보장하고 자원을 효율적으로 관..
Linux Device Driver 기초 #1 Linux Build System
Linux 개발 환경 이해 컴파일러: C/C++ 같은 소스 코드를 타겟 아키텍처에 맞는 바이너리로 변환링커: 여러 개의 오브젝트 파일을 하나의 실행 파일로 결합어셈블러: 어셈블리 코드를 기계어로 변환라이브러리: 프로그램 실행 시 필요한 기본 함수들을 제공 리눅스를 빌드하는 과정은 간단하게 다음과 같다.1. buildroot를 사용하여 rootfs을 빌드한다.2. linux kernel 최신 코드를 다운받아 빌드한다.3. 이 두가지를 사용하여 qemu에서 가상의 머신을 부팅한다. Rootfs 빌드Buildroot는 임베디드 리눅스 시스템을 위한 경량화된 루트 파일 시스템(root filesystem), 커널 및 부트로더를 쉽게 빌드할 수 있는 도구이다.# Git 설치 (필요한 경우)sudo apt-get ..
KVM 가상화 환경 구성
커널 기반 가상 머신(KVM)은 물리적 Linux 시스템에 설치하여 가상 머신을 생성할 수 있는 소프트웨어 기능이다. 가상 머신은 물리적 시스템과 CPU 사이클, 네트워크 대역폭 및 메모리와 같은 리소스를 공유한다. KVM은 Linux에서 가상 머신에 대한 네이티브 지원을 제공하는 Linux 운영 체제 구성 요소이다. KVM 설치 사전 환경 구성Lab SetupManufacturer: eSlim KoreaOperating System: CentOS Linux 7 (Core)processor-version: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHzKernel: Linux 3.10.0-1160.el7.x86_64 사전 환경 체크1. Processor 가상화 지원 활성화 확..