chapter. 2 embedded system iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 ·...

63
Embedded System I Chapter. 2 Jaeheung, Lee Embedded Linux

Upload: others

Post on 18-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

Embedded System I Chapter. 2

Jaeheung, Lee

Embedded Linux

Page 2: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

1

목차

운영체제 운영체제 종류 실시간 시스템 임베디드 운영체제 임베디드 운영체제의 개념 임베디드 리눅스 리눅스 리눅스 부팅과정 리눅스 디렉토리 구조 리눅스 디렉토리 설명 리눅스 파일시스템 리눅스 소프트웨어 패키지 리눅스 컴파일러

Page 3: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

2

운영체제

운영체제란? 자원 관리자 (Resource Manager) 응용 자원에 대한 서비스 제공 (Computing Environment)

자원의 종류 물리적 자원 : 처리기, 메모리, 디스크, 터미널, 네트워크, … 추상적 자원 : 태스크, 세그먼트/페이지, 파일, 드라이버, 통신 프로토콜, 패킷, 보안, …

X window system

RDBMS

Network package

Kernel

Hardware

Device Driver

ls, who, … Compiler

vi, emacs,…

Page 4: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

3

운영체제 종류

RTOS(Real-Time OS) VxWorks, pSOS, LEX, uITRON, EPOCH, Nucleus

UNIX SVR4, Solaris BSD, HP-UX

Linux Ubuntu, Fedora

Windows System Windows XP Windows CE.NET

Page 5: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

4

실시간 시스템

실시간 시스템의 정의 정해진 시간 내에 시스템이 결과를 출력하는 시스템 주어진 작업을 빨리 처리하는 것이 아니고 정해진 시간을 넘어서는 안 된다는 뜻임

임베디드 시스템은 대부분 실시간 적인 요소 내포

임베디드 시스템에 실시간 시스템이 포함됨

Page 6: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

5

실시간 시스템

Hard real-time system/Soft real-time system Hard real-time system

정해진 시간 내에 작업의 결과가 절대적으로 출력되어야 하는 시스템 시간 내에 처리되지 않으면 치명적인 결과를 초래하는 경우 전투기의 비행제어 시스템, 핵발전소의 제어 시스템, 인공위성의 제어 시스템

Soft real-time system 정해진 범위를 넘는 시간 지연이 발생하더라도 그것이 시스템의 에러가 되지 않는 시스템

Page 7: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

6

임베디드 운영체제

실시간 시스템에서의 S/W 간단하고 단순한 순차적인 작업에 관련 순차적인 프로그램으로 충분하였음 8bit, 16bit 마이크로프로세서 및 마이크로 컨트롤러 사용

임베디드 시스템에서의 운영체제 시스템의 규모가 커짐에 따른 Multi Tasking 기능 요구 Network나 Multimedia가 시스템의 기본으로 자리 잡음

Networking, GUI, Audio, Video

임베디드 시스템의 특성상 실시간이라는 요소를 만족해야 함 지능성이 부각되고 기능이 많아지고 복잡해짐 순차적인 프로그램 작성이 불가능하여 운영체제가 도입됨

Page 8: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

7

임베디드 운영체제

임베디드 운영체제 기존의 상용 RTOS(Real-Time OS) 윈도우 CE 임베디드 Linux 임베디드 JAVA

Page 9: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

8

임베디드 운영체제

상용 RTOS : Hard Real-Time/Multi-thread/Preemptive pSOS, VxWorks, VRTX 등 다수 일반 운영체제와 거의 같은 기능을 수행 시간 제약성, 신뢰성 등을 일반 운영체제 보다 중요시 함 일반적으로 한가지 목적에 최적화 되어있음

임베디드 OS : Soft Real-Time/Multi-process/non-Preemptive

Windows CE 임베디드 리눅스 임베디드 자바

Page 10: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

9

임베디드 운영체제

최근 동향 임베디드 OS 세계시장 :

최근 WinCE, 임베디드 리눅스가 기존의 RTOS 보다 시장 점유율이 높아지는 추세

OS 선정 시스템의 특성 파악 그 시스템에 적합한 OS 선정이 매우 중요

Page 11: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

10

임베디드 운영체제

윈도우 CE MS사에서 임베디드 시스템을 위하여 제공하는 운영체제 기존의 데스크 탑 PC와 동일한 윈도우 환경 제공 데스크 탑 윈도우 및 응용 프로그램과의 호환성 우수 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수) 실행 환경에서 요구되는 H/W 사양이 높고, 가격이 고가 MS사에서 제공되는 라이브러리에 종속적

Page 12: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

11

임베디드 운영체제

리눅스 일반 리눅스

일반 데스크 탑 환경인 고성능 프로세서와 대용량 메모리 환경에서 동작 하는 범용 컴퓨터용 리눅스

임베디드 리눅스 저성능의 마이크로 프로세서와 제한된 메모리 환경에서 동작하는 임베디드 시스템용 리눅스

Page 13: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

12

임베디드 운영체제의 개념

태스크 수행 중인 프로그램(an instance of a running program) 프로그램의 수행환경(an execution environment of a program) 스케줄링 단위(scheduling entity) 제어 흐름과 주소공간의 집합(a control flow and address space)

Page 14: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

13

임베디드 운영체제의 개념

멀티 태스킹 여러 개의 태스크를 동시에 실행시키는 것 일반 OS에서의 태스크

각 태스크들은 대부분 무관한 프로그램

임베디드 시스템에서의 태스크 하나의 큰 응용 프로그램을 논리적으로 나눈 것

기능상 매우 밀접한 관계 태스크 사이에 이루어지는 작업이 대다수

응용 프로그램의 실행을 위해 여러 기능들이 동시 실행됨을 요구 순차적이 아닌 동시 실행의 필요성이 존재

Page 15: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

14

임베디드 운영체제의 개념

스케줄러(Scheduler) OS의 핵심기능 다음 번에 어떤 태스크를 실행해야 하는 지를 결정하는 코드 부분 태스크 선택 정책 : 우선순위 기반의 스케줄링

FIFO(First In First Out), Round-robin 등

선점(Preemptive) 어떤 태스크가 수행되고 있을 때 커널이 중간에 그 태스크의 수행을 중지시키고 다른 태스크의 기능을 수행시키는 기능 선점형 커널 / 비선점형 커널

다른 태스크로 실행이 넘어갈 때 문맥전환(Context Switching) 발생

Page 16: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

15

임베디드 운영체제의 개념

문맥전환(Context Switching) 일단 현재 수행 중인 태스크 상황 하에서의 시스템 상태(문맥)를 TCB(Task Control Block)이라는 특정한 자료구조에 저장하고, 다음에 새로운 태스크의 문맥을 가져와 시스템 상태를 복원한 후에 실행하는 것 Context Switching은 overhead이기 때문에 짧을 수록 효율적임

thread의 개념을 통해 이를 보완하는 방법

상호배제(Mutual Exclusion) 두 개의 태스크가 동시에 하나의 공유자원에 접근하려고 할 때 하나의 태스크에게 자원 사용에 대한 배타적 권리를 보장하는 것

Critical section : 공유자원을 access하는 일련의 코드부분 다른 태스크에 의해서 중단되어서는 안 되는 일련의 명령 혹은 코드 블록

Page 17: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

16

임베디드 운영체제의 개념

상호배제(Mutual Exclusion) 인터럽트 발생을 방지

Critical section에 들어가기 전에 인터럽트를 disable시키고(CLI), 빠져 나오면서 다시 인터럽트를 enable 시키는 방법(STI) 단일 CPU의 경우 단순하게 사용 가능

Semaphore 이용 Semaphore를 얻지 못하면 공유자원을 얻을 수 없으며, Semaphore를 얻으면 공유자원을 마음 놓고 사용가능 다른 태스크를 위해 공유자원을 모두 사용하면 Semaphore를 해제 Semaphore가 0 이면 waiting

Page 18: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

17

임베디드 운영체제의 개념

인터럽트 서비스(Interrupt Service) Asynchronous event를 CPU에 알리는 방법 Interrupt는 외부에서 들어오는 중요한 신호로서 시간에 민감한 경우가 있기 때문에 interrupt latency가 짧은 것이 좋음 ISR자체도 짧은 것이 좋은데 그 이유는 ISR 자체가 길어지면 interrupt nesting이 되기 쉽기 때문 ISR에서는 보통 그에 상응하는 태스크 수준의 service routine을 부르고(HISR) 끝나도록 구성 HISR에서는 마치 태스크처럼 존재해서 수행

Page 19: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

18

임베디드 운영체제의 개념

임베디드 리눅스 출현 배경 H/W의 발전

32/64bit 고성능 CPU

S/W의 많은 기능 요구 OS의 기능이 중요, 안정된 운영체제의 제공(멀티 태스킹 제공)

강력하고 다양한 네트워크 환경의 제공 다양한 형태의 파일시스템과 실행파일 포맷 지원 확장성의 다양함과 용이함의 제공 Free Software

Page 20: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

19

임베디드 리눅스

임베디드 리눅스 장점 기능성과 확장성이 우수 (리눅스 이용에 따른 장점) PowerPC, ARM, MIPS 등 다양한 CPU Platform지원함 로열티가 없으므로 가격 경쟁력이 우수 사용자 층이 넓어 오류 수정이 빠르고 안정성이 우수 기존의 데스크 탑 개발 환경과 동일하여 개발이 용이함

임베디드 리눅스 단점 기존의 RTOS보다 많은 메모리를 요구함 개발 환경이 Text 기반의 환경임으로 개발에 어려움이 있음 제품화하기 위한 솔루션 구성이 어려움 많은 업체들과 개발자들이 독자적으로 개발하고 있어 표준화가 어려움

Page 21: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

20

리눅스

리눅스의 특징 멀티 유저, 멀티 태스킹 시스템 인텔 계열의 프로세서 및 Cyrix와 AMD의 CPU에 최적화 효율적인 가상 메모리 사용 동적 공유 라이브러리 사용 UNIX표준인 POSIX와 완벽한 호환

리눅스의 장점 GUI의 불필요 원격 관리의 용이성 리부팅의 불필요 바이러스 안전 보안

Page 22: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

21

리눅스

커널 버전 역사 : http://www.linux.org/

버전 숫자 : X.Y.ZZ X : 커널의 버전 Y : 릴리즈 번호, 홀수 → 개발 중, 짝수 → 안정된 버전 ZZ : Modifications, 사소한 변화를 의미

최신 버전 새로운 다양한 기능이 이미 추가되어 있음 크기가 매우 크다는 단점이 있음

커널 버전의 선택 임베디드 시스템의 크기를 고려 필요한 기능을 고려 확장성을 고려

Page 23: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

22

리눅스

리눅스 시작

START

System BIOS

Boot Manager

Linux Kernel

Initd

klogd xinetd xfs

• ROM에 위치 • 메모리 체크 및 하드웨어 초기화 • Boot Manager 실행

• 부팅매체의 0번 섹터(MBR)에 위치 • 운영체제 선택 • Linux Kernel 압축을 풀고 메모리에 적재 • 커널 실행(Boot Loader)

• PID가 0인 swapper 프로세스가 시스템 체크 및 초기화 (dmesg 명령 또는 /var/log/dmesg 파일) • PID가 1인 init을 실행

• 파일시스템 구조검사 • 파일시스템 마운트 • 데몬서버 실행 • 사용자 로그인 및 쉘 실행

Page 24: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

23

리눅스 부팅과정

전원스위치 ON

시스템 전원공급

메인보드의 ROM-BIOS에 있는 BIOS 프로그램 자동실행

• CPU는 전원공급과 함께 특정 번지의 BIOS 프로그램을 자동실행 • CPU는 전원공급과 함께 특정 번지의 BIOS 프로그램을 자동실행

• BIOS 프로그램은 전원공급과 함께 메모리의 특정번지에 자동으로 로드 • BIOS 프로그램은 전원공급과 함께 메모리의 특정번지에 자동으로 로드

Page 25: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

24

리눅스 부팅과정

BIOS 프로그램들의 실행내용 자체진단기능(POST)

CMOS검사, CPU, MEMORY, 그래픽카드 등 하드웨어의 이상유무를 검사하고 초기화

부팅매체검색과 부트로더 실행 POST 과정이 이상없이 진행완료되면 검색된 부팅매체에서 부트로더를 불러옴

부팅매체로 선택되었다면 부팅파티션에 있는 0번 섹터(MBR)에 있는 부트로더를 읽음

부트로더가 메모리에 적재되면 BIOS는 종료, 시스템 제어권은 부트로더(GRUB)

Page 26: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

25

리눅스 부팅과정

부트로더의 실행 부트로더 실행과 함께 /boot/grub/grub.conf 파일을 읽어서 부팅 커널을 결정 부트로더는 커널 이미지를 불러오고, 시스템 제어권을 커널로 넘김

Page 27: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

26

리눅스 부팅과정

커널의 로딩 커널은 swapper 프로세스(PID 0번)를 호출함

Swapper는 커널이 사용할 각 장치드라이브들을 초기화, init 프로세스(PID 1번)를 실행

Init 프로세스가 실행되면서 /etc/inittab 파일을 읽어들여서 그 내용들을 차례대로 실행

Page 28: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

27

리눅스 부팅과정

Init 프로세스의 실행 로그인 프롬프트가 나오기까지의 부팅완료화면까지 /etc/init 프로세스에 의해 실행되는 내용들

부팅레벨 선택

/etc/rc.d/rc.sysinit 스크립트를 실행

선택된 레벨에 따라서 /etc/rc.d/rc3.d 디렉토리의 파일을 순차대로 실행

시스템 매직키(ctrl + alt + del) 설정, 전원공급설정

6개의 가상 터미널을 각각 실행

5번 부팅레벨로 부팅될 경우에 X윈도우 실행

Page 29: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

28

리눅스 디렉토리 구조

/etc - 시스템 설정 파일 디렉토리

/bin - 시스템의 기초 명령

/dev - 장치파일

/lib - 시스템 공유 라이브러리 디렉토리

/home - 사용자 홈 디렉토리

/root - 루트사용자의 홈 디렉토리

Page 30: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

29

리눅스 디렉토리 구조

/proc - 시스템 정보

/sbin - 시스템 관리 명령 디렉토리

/tmp - 임시파일 생성 디렉토리

/var - 시스템 가동 중 가변 자료 저장 디렉토리

/usr - 애플리케이션이 설치되는 디렉토리

Page 31: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

30

리눅스 디렉토리 구조

리눅스 커널 맵(http://www.makelinux.com/kernel_map/)

Page 32: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

31

리눅스 디렉토리 구조

리눅스 커널 소스트리 구조 sound sound kernel kernel ipc ipc lib lib mm mm scripts scripts security security

doc doc

arch arch crypto crypto fs fs init init include include user user net net

drivers drivers /usr/src/linux /usr/src/linux

alpha alpha

i386 i386

m68k m68k

mips mips

ppc ppc

sparc sparc

arm arm

coda coda

ext2 ext2

ext3 ext3

ext4 ext4

jffs jffs

nfs nfs

··· ···

boot boot

kernel kernel

lib lib

mach-pxa mach-pxa

asm asm

asm-arm asm-arm

linux linux

net net

scsi scsi

video video

block block

net net

usb usb

video video

audio audio

sound sound

··· ···

ethernet ethernet

ipv4 ipv4

ipv6 ipv6

unix unix

x25 x25

atm atm

··· ···

Page 33: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

32

리눅스 디렉토리 설명

arch/ CPU 종속적인 부분, 각 처리기 마다 하위 디렉토리로 구성됨

(arch/arm, arch/i386, arch/alpha … ) arch/arm/boot/

부트 스트랩핑 코드

arch/arm/kernel/ 하드웨어 종속적인(hardware dependent) 커널 관리 루틴 트랩, 인터럽트 처리 루틴 문맥 교환 루틴 장치 구성, 초기화 루틴

arch/arm/mm/ 하드웨어 종속적인 메모리 관리 루틴

Page 34: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

33

리눅스 디렉토리 설명

init/ 하드웨어 독립적인 커널 초기화 루틴 (start_kernel) 태스크 0 (init_task or task[0]) 생성 태스크 1, 2, 3 등 데몬 프로세스 생성

mm/ 하드웨어 독립적인 메모리 관리 루틴 (하드웨어 종속적인 메모리 관리 루틴은 arch/arm/mm 디렉토리에 존재) 가상 메모리 관리, 페이징 (paging), 스와핑(swapping)

Page 35: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

34

리눅스 디렉토리 설명

kernel/ 리눅스 커널의 가장 중심적인 디렉토리 (central section of the kernel) 하드웨어 독립적인 커널 관리 루틴 (하드웨어 종속적인 커널 관리 루틴은 arch/arm/kernel 디렉토리에 존재) fork, exit 등 태스크 관련 시스템 호출 처리 루틴 스케줄러 (scheduler) 루틴 시그널 처리 (signal handling)/시간 관리 (time management) 루틴

fs/ 가상 파일 시스템 (virtual file system ) 관리 루틴 open, read 등 태스크 관련 시스템 호출 처리 루틴 특정 파일 시스템 관리 루틴은 하위 디렉토리에 존재 (ext2, ext3, ramfs, minix, jffs2, proc, nfs, msdos, coda, .. )

Page 36: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

35

리눅스 디렉토리 설명

drivers/ 개개의 장치를 제어하기 위한 장치 드라이버 루틴 디바이스 드라이버는 크게 문자/블록/네트워크 드라이버로 구분

drivers/block/ : 블록 장치 드라이버 drivers/char/ : 문자 장치 드라이버 drivers/net : 네트워크 장치 드라이버 drivers/pci/ : PCI Bus 제어 drivers/sound/ : sound card 드라이버 drivers/cdrom/ : CD-ROM 드라이버 drivers/scsi/ : SCSI 인터페이스 관리 …

Page 37: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

36

리눅스 디렉토리 설명

ipc/ 프로세스간 통신을 지원하기 위한 루틴 세마포어(semaphores), 공유 메모리(shared memory), 메시지 큐(message queues)

net/ TCP/IP, ARP 등 네트웍 통신 프로토콜

(네트웍 장치 드라이버는 drivers/net에 존재) 소켓 인터페이스

Page 38: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

37

리눅스 디렉토리 설명

include/ 커널 헤더 하드웨어 독립적인 헤더 : include/linux/ 하드웨어 종속적인 헤더 : include/asm-***

modules/ 커널 모듈 루틴 모듈은 insmod(modprobe), rmmod 등의 명령으로 동적 적재/제거 가능

lib/ 커널 라이브러리 루틴

doc/ or Documentation/ 커널 문서 디렉토리

Page 39: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

38

리눅스 파일시스템

리눅스 파일시스템 구조

Page 40: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

39

리눅스 파일시스템

정의 파티션 안에 정보를 저장하고 관리하는 실질적인 방법을 제공

종류 ext : Extended File System

255자의 파일 이름과 2GB의 파티션 지원

ext2 : Second Extended File System 최대 64GB의 파티션 허용

ext3 : ext2의 기능을 강화시킨 파일시스템 버전 강력한 저널링 기능 메타데이터와 데이터의 확실한 통합

Page 41: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

40

리눅스 파일시스템

종류 FAT : File Allocation Table(클러스터 크기 고정)

도스에서 사용, 2GB의 파티션 및 8자의 파일 이름 지원

FAT32 윈도우에서 사용 최대 2TB의 파티션을 지원

Page 42: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

41

리눅스 소프트웨어 패키지

RPM 이란? RedHat Package Manager 레드햇사에서 만들어낸 패키지 관리 툴의 의미 www.rpm.org에서 자유롭게 공개 및 개발

RPM 실행 설치 파일과 설치 정보를 함께 가지고 있음 설치 될 때의 설치 정보를 시스템 설치 데이터베이스에 갱신 의존성 추적으로 설치 요구조건 검증

RPM 기능 패키지 자동설치 및 제거 업그레이드 기능

Page 43: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

42

리눅스 소프트웨어 패키지

RPM 패키지 설치(-ivh) RPM 패키지 설치 시 ‘-i’, ‘-v’, ‘-h’ 옵션 사용

-i : RPM 패키지 설치 -v : RPM 패키지 설치 과정을 보여줌(‘-i’ 옵션과 같이 사용) -h : RPM 패키지 설치경과 막대그래프를 보여줌

RPM 패키지 제거(-e) RPM 패키지 삭제 시 ‘-e’ 옵션 사용

RPM 패키지 업그레이드(-Uvh) RPM 패키지 업그레이드 시 ‘-U’옵션 사용

Page 44: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

43

리눅스 소프트웨어 패키지

Example 파일명 : Embedded_System.rpm

설치 : # rpm –ivh Embedded_System.rpm 삭제 : # rpm –e Embedded_System.rpm 업그레이드 : # rpm –Uvh Embedded_System.rpm

Page 45: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

44

리눅스 컴파일러

컴파일 과정

Page 46: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

45

리눅스 컴파일러

컴파일 과정 전처리(preprocessing)

#define, #include, #if와 같은 전처리 지시자 해석 전처리 작업을 위한 c 프로그램을 호출

컴파일(compile) 고급 언어 소스 프로그램을 입력 받아서 어셈블리 파일을 만듬(.s) 일반적으로 어셈블리 파일은 저장하지 않고, 바로 어셈블러를 호출함 여기서 컴파일은 좁은 의미의 컴파일이며, 넓은 의미의 컴파일은 모든 과정을 포함함

Page 47: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

46

리눅스 컴파일러

컴파일 과정 어셈블(assemble)

어셈블리 파일을 입력 받아서 오브젝트 파일을 만듬(.o) 어셈블을 위한 gas 프로그램을 호출함 어셈블러는 플랫폼(CPU+OS)마다 다르며 해당 전용 어셈블러 호출 가능

링크(linking) 오브젝트 파일을 엮어서 실행 파일을 만듬(.o) 라이브러리 함수도 이 단계에서 사용함 링크를 위한 ld 프로그램을 호출

Page 48: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

47

리눅스 컴파일러

GNU C Compiler , GNU Compiler Collection 의미

FSF (Free Software Foundation)의 C, C++ 컴파일러

컴파일러, 어셈블러, 로더 역할을 함

한 개의 파일(hello.c)을 컴파일 하기 # gcc –o hello hello.c

-o 옵션 : 실행파일명을 지정하는 옵션 -S 옵션 : c언어 컴파일 과정 까지만 처리 → 어셈블리 코드 출력

Page 49: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

48

리눅스 컴파일러

모든 컴파일 과정을 한번에 처리하기 $ gcc –o hello hello.c hello_world.c

-o 옵션이 없으면 hello.out이 실행 파일임

컴파일러 매크로 컴파일러가 파일을 제어할 때 사용하는 정보 -D 옵션을 사용한 매크로 정의

# gcc –c –DEM_FILE=“embedded” helloworld.c -DEM_FILE은 소스에서 #define EM_FILE embedded와 동일한 결과

-U 옵션은 매크로 정의를 해제함 - #undef와 동일한 효과임

Page 50: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

49

리눅스 컴파일러

Gcc 컴파일러 옵션 ‘-I’ : 헤더 파일 위치 지정

# gcc –I ../include hello_world.c 비-표준 라이브러리를 위한 헤더 파일의 디렉토리 지정

‘-l’ : 라이브러리 지정 # gcc –o hello hello.o hello_test.o –lm ‘-lm’은 수학 라이브러리를 포함한다는 의미 표준 라이브러리를 담고 있는 디렉토리에서 libm.a를 찾음

‘-L’ : 비-표준 라이브러리 지정 # gcc –o hello –L/usr/local/mylib hello.o hello_test.o –lx 표준 라이브러리가 아닌 비-표준 라이브러리 사용

Page 51: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

50

리눅스 컴파일러

Gcc 컴파일러 옵션 디버깅과 프로파일링

컴파일할 때 디버깅을 위한 코드와 심볼 테이블을 삽입 g : 디버거 gdb에서 사용할 수 있는 확장된 심볼 테이블 생성 p :prof에서 프로파일링 할 수 있는 프로그램 생성 pg : gprof에서 프로파일링 할 수 있는 프로그램 생성

최적화 프로그램의 수행속도를 컴파일러가 최적화함 Gcc는 최적화와 디버깅 옵션을 동시에 사용하도록 허용

O0 : 최적화 X (정확한 동작, 컴파일시간이 줄어듬) O1 : 코드 크기와 실행시간을 줄여줌 O2 : 더 많은 최적화를 수행 ffast-math : 부동소수점 연산에 대한 최적화를 수행 finline-functions : 단순한 함수의 경우 inline 함수로 변경하여 사용

Page 52: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

51

리눅스 컴파일러

어셈블러(Assembler) 어셈블리 프로그램에서 오브젝트 모듈 생성

각 플랫폼마다 별도의 GNU 어셈블러 존재

어셈블러 실행 # as list-of-option list-of-source-files Assemble 옵션

-ah : C 프로그램의 리스트를 생성 -al : 어셈블리 언어 코드의 리스트를 생성 -as : 심볼 테이블에 대한 리스트를 생성

Page 53: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

52

리눅스 컴파일러

링커(Linker) ld 링커

오브젝트 모듈과 라이브러리들을 결합하여 실행 파일생성 외부 변수, 외부 함수, 라이브러리에 대한 참조 위치를 찾아내 완전한 실행 프로그램 생성 일반적으로 ld를 직접 수행하지 않고, gcc로 수행

ld 실행 # ld list-of-options list-of-files-and-libraries 라이브러리는 –lib-name 형태로 사용 라이브러리의 경우 외부 참조에 의해 필요한 함수만 추출 순서와 관계없이 라이브러리에서 모듈을 찾기 위해 색인을 생성

Page 54: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

53

리눅스 컴파일러

링커(Linker) ld 실행파일 생성

실행파일 생성시 시작위치는 첫번째 파일의 시작 부분 C 프로그램의 시작점과 같지 않음 OS에서 프로그램 시작 전에 표준 런타임 초기화 루틴 실행 다음의 두 표현은 동일

# gcc test.o # ld –dc –dp –e start –X –o a.out /usr/lib/crt0.o expo.o -lc

Page 55: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

54

리눅스 컴파일러

라이브러리 만들기 ar 명령으로 오브젝트 모듈의 라이브러리 만듦

하나의 c프로젝트를 이루는 여러 목적 모듈들을 만들고 이들을 그룹화시키기 위해 사용

새로운 라이브러리 생성 # ar rs libname list-of-files r 옵션: 파일을 추가하고 없으면 새로운 라이브러리 생성 s 옵션: 정적 라이브러리 색인 생성(ranlib 불필요)

Page 56: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

55

리눅스 컴파일러

라이브러리 만들기 라이브러리 갱신

# ar rus libname list-of-files 라이브러리의 모듈과 파일의 날짜를 비교하여 갱신

라이브러리에서 파일 지우기 # ar ds libname list-of-files

라이브러리에서 파일 추출 # ar x libname list-of-files

Page 57: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

56

리눅스 컴파일러

공유 라이브러리 업그레이드 공유 라이브러리와 정적인 라이브러리 분리

정적 라이브러리 일반적으로 /usr/lib에 있으며 libXXX.a 로 존재 컴파일 시에 사용됨

동적 라이브러리 /lib에 있으며 libXXX.so.version으로 되어 있음 Version은 major.minor로 구성되어 있음 Ld.so는 version에서 major 번호만 참조함

정적 라이브러리는 복사로 완료 동적 라이브러리는 소프트링크로 연결

Page 58: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

57

리눅스 컴파일러

Make File Make 기능 및 목적

컴파일을 자동화 하는 프로그램

실행 파일을 만드는 과정(빌드)을 정의하면 필요한 작업만을 수행하여 실행 파일 생성

프로그램 그룹 중에서 어느 부분이 새롭게 컴파일 되어야 하는지를 자동적으로 판단해서 필요한 명령어를 이용해서 그들을 재-컴파일

다중 모듈 프로그램의 재사용을 유지하고, 프로그램 수정에 대한 재-번역을 최소화

gmake gnumake는 make 보다 발전된 것임

Page 59: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

58

리눅스 컴파일러

Make File Make 사용

입력 파일이 변경되면 자동적으로 결과 파일이 변경되기를 원할 때나 명령어 방식으로 처리되는 모든 곳에 유용하게 사용 가능

파일의 상호 의존 관계를 나타내는 목록 파일(makefile)이 필요 GNUmakefile, Makefile, makefile 중 하나의 파일이 필요

makefile을 참조하여 파일을 최신버전으로 개정

Page 60: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

59

리눅스 컴파일러

Make File Make 사용법

make [ -f makefile_name ] -f : 파일이름 명시 기본이름 : Makefile 복수개의 파일과 목적 파일 컴파일

Makefiles 이름에 제한이 없으나 파일 이름 뒤에 .make 표기 권장

Page 61: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

60

리눅스 컴파일러

Make File 작성 및 규칙 Make 사용법

master : master.o pirami.o gcc master.o pirami.o -o master master.o : master.c pirami.h gcc -c main.c pirami.o : pirami.c pirami.h gcc -c pirami.c

(예)

targetList : dependencyList [TAB] commandList

targetList : 목적 파일 목록 dependencyList : 의존 파일 목록 commandList : 명령어 목록

Page 62: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

61

리눅스 컴파일러

Make 실행 $ make -f main1.make

매크로(Macro) make에서 지원하는 기능 일련의 반복되는 특정 코드를 간단하게 표현. 사용법

이름= 내용들… $(이름) , ${이름} , 대문자로 작성. (예)token = replacementText

make 파일 내에 모든 $(token)는 replacementText로 대치

정해진 Macro ASFLAGS, CFLAGS, CPPFLAGS, …

Page 63: Chapter. 2 Embedded System Iartoa.hanbat.ac.kr/lecture_data/embedded_sw/02.pdf · 2012-08-02 · 프로그램 개발 환경이 아주 우수 (특히, GUI 개발 환경 우수)

A Research Team Of ASIC & CAD Lab.

Embedded System I

62

리눅스 컴파일러

Makefile 작성 예 OBJECTS = main.o helloworld.o helloworld: $(OBJECTS) [TAB]gcc –o helloworld ($OBJECTS) main.o: main.c [TAB]gcc –c main.c helloworld.o: helloworld.h helloworld.c [TAB]gcc –c helloworld.c clean: [TAB]rm $(OBJECTS) helloworld

.SUFFIXES: .c.o OBJECTS = main.o helloworld.o CC = gcc CFLAGS = -g -c TARGET = helloworld $(TARGET): $(OBJECTS) $(CC) -o $(TARGET) $(OBJECTS) clean: rm $(TARGET) $(OBJECTS) core main.o: main.c helloworld.o: helloworld.h helloworld.c