리눅스 커널

24
- 1 - 리리리 리리 Linux kernel

Upload: mariam-carver

Post on 02-Jan-2016

40 views

Category:

Documents


10 download

DESCRIPTION

Linux kernel. 리눅스 커널. Kernel. 리눅스 커널 개요 운영체제 Operating System 에서 Kernel 은 운영체제의 핵심 사용해야할 시스템 자원을 관리해주는 기능 안드로이드가 적용되면서 기본적인 커널에 추가적인 기능이 포함됨 기존 리눅스 커널 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 리눅스 커널

- 1 -

리눅스 커널Linux kernel

Page 2: 리눅스 커널

- 2 -Huins. R&D Center

Kernel

리눅스 커널 개요 운영체제

- Operating System 에서 Kernel 은 운영체제의 핵심- 사용해야할 시스템 자원을 관리해주는 기능- 안드로이드가 적용되면서 기본적인 커널에 추가적인 기능이 포함됨

기존 리눅스 커널

프로세스 관리- 하나의 프로그램은 하나 이상의 프로세스를 가질 수 있다 .- 커널은 해당 프로세스가 시스템 자원을 분배하고 , 다른 자원을 침해할 수 없도록 관리- 프로세스의 생성과 소멸에대한 전반적인 내용을 관리한다 .

메모리 관리- 시스템에서 구동되는 프로세스는 프로세스만의 독립적인 메모리를 갖는다 .- 리눅스는 물리메모리에 집접적으로 데이터를 기록하는 것을 허용하지 않는다 .- 반환된 메모리의 관리등과 같은 기능을 수행

2

∎ 프로세스 관리 (Process Management) ∎ 메모리 관리 (Memory Management) ∎ 파일 시스템 관리 (File System Management) ∎ 디바이스 관리 (Device Management) ∎ 네트워크 관리 (Network Management)

Page 3: 리눅스 커널

- 3 -Huins. R&D Center

Kernel

파일시스템 관리- 리눅스는 범용운영체제로 다양한 파일시스템을 지원- 리눅스에서 모든 장치는 파일로 표현된다 .- CDFS, FAT, JFFS, YAFFS, FAT16/32, EXT3/4, NTFS 등을 지원

디바이스 관리- 부트로더에서 초기화된 이후 모든 디바이스는 커널의 관리를 받는다 .- 응용 프로그램에서 디바이스를 이용해야 하는 경우 커널을 통해야만 제어가 가능하다 .- 사용하고자 하는 장치 드라이버에 따라서 문자 , 블록 방식으로 나뉘게 된다 .

네트워크 관리- 커널은 기기와 외부시스템이 정상적인 네트워크를 통해서 통신할 수 있도록 한다 .- IPv4, IPv6, Ethernet, ATM, CDMA 등이 지원된다 .

커널 Diagram

3

Page 4: 리눅스 커널

- 4 -Huins. R&D Center

Kernel

커널 소스 디렉터리 구조

arch 프로세서종류에 의존적인 부분 (arch/i386, arch/alpha, arch/arm… )

▪ arch/arm/boot/ : 부트 스트랩 코드의 내용 ▪ arch/arm/kernel/ : 하드웨어 의존적인 커널 관리 루틴 , Trap 과 인터럽트 처리 루틴 , 문맥전환

(Context Switching) 루틴 , 장치 설정과 초기화 루틴 ▪ arch/arm/mm/ : 하드웨어 의존적인 메모리 관리 루틴 init

▪ 하드웨어 비 의존적 커널 초기화 (start_kernel)

4

Page 5: 리눅스 커널

- 5 -Huins. R&D Center

Kernel

kernel ▪ 리눅스 커널의 중요 부분

▪ 하드웨어 비의존적인 커널 관리 루틴 ▪ 태스크 (fork, exit) 관련 시스템 호출 처리 루틴 ▪ 스케줄러 , 시그널 핸들링 , 시간 관리 루틴 mm

▪ 하드웨어 비의존적인 메모리 관리 루틴 가상 메모리 관리▪

페이징 기법▪ , 스와핑 기법 fs

▪ 가상 파일 시스템 관리 파일시스템 관련 시스템 콜▪ (open, read...) 루틴

ipc▪ 프로세스간 통신 (Inter Process Communication)▪ 세마포어 , 공유메모리 , 메시지 큐

drvier디바이스 드라이버 루틴- drivers/block/ : 블록 디바이스- drivers/char/ : 문자 디바이스 - drivers/net : 네트워크 디바이스- drivers/pci/ : PCI 버스 컨트롤러- drivers/sound/ : 사운드 카드- drivers/cdrom/ : CD-ROM 드라이버- drivers/scsi/ : SCSI 장치 드라이버

Net▪ 네트워크 관련 프로토콜과 드라이버Network protocols : TCP/IP, ARP 등 (device driver 는 driver/net 에 존재 )▪ Socket interface

5

Page 6: 리눅스 커널

- 6 -Huins. R&D Center

Kernel

include▪ 커널을 위한 헤더파일- include/linux/ : 하드웨어 비의존적인 헤더 파일- include/asm-***/ : 하드웨어 의존적인 헤더 파일

modules▪ 커널 모듈 루틴

모듈의 동적 등록과 제거를 위한 부분 ▪ (insmod, modprobe, rmmod 등 ) lib

▪ 커널 라이브러리 루틴 doc

▪ 커널관련 문서

안드로이드를 위한 리눅스 커널안드로이드에서 사용이 가능하도록 기능이 확장된 리눅스 커널 확장된 기능

6

∎ Alarm

∎ Low Memory Killer

∎ Ashmem

∎ Kernel Debugger

∎ Binder

∎ Logger

Page 7: 리눅스 커널

- 7 -Huins. R&D Center

Kernel

Android Kernel Enhancement

Features Description

Alarm Android.app.AlarmManager

Low Memory Killer Android Out Of Memory (OOM) Killer Driver

Ashmem Android (Anonymous) Shared Memory Driver (Share memory kernel level)

Kernel Debugger Android Kernel Debugger

Binder

1. Driver to facilitate Inter-Process Communication (IPC)

2. High Performance through shared memory

3. Per-Process thread poolfor process requests

4. Reference counting and mapping of Object references across processes

5. Synchronous calls between processes

Power Management

1. Built on top of standard Linux Power Management (PM)

2. More aggressive power management policy

3. Components make requests to keep the power on through

“wake locks”

4. Supports different types of wake locks

Logger

- Support Android Logcat Utility

- Using logcat commands, Filtering

- Log outpot,

- Controlling Log output format, Alternative Log Buffer, Listing of Logcat Command Options

7

Page 8: 리눅스 커널

- 8 -Huins. R&D Center

Kernel

Open Binder Component-based 시스템 레벨 디자인을 지원할 수 있도록 설계됨 기존 IPC 의 보안이슈와 오버헤드 이슈를 개선 바인더는 커널에서 구동 되는 것이 아니라 바인더라는 서비를 통해서 사용한다 . 서로다른 서비스 혹은 응용간 데이터를 주고 받을 때 이용 각 서비스는 독립적인 바인더를 가지고 있어야 하지만 가로챔을 당하지 않는 장점이 있다 . Binder 는 ParlmOS 에 처음 적용되었으며 해당 라이선스도 해당사에서 가지고 있다 . Binder 는 스레드 풀을 유지한다 .

자료 요청 이전에 미리 자료를 구조화 시키며 , 빠른 시간내에 연결이 가능 여러 개의 프로세스가 이용하는 하나의 서비스가 있다면 모든 서비스가 종료될 때 해제됨 Open Binder 의 특징

8

∎ 프로세스간 리소스 관리

∎ 시스템 지향적인 설계

∎ 새로운 컴포넌트 기반 시스템 레벨의 개발을 지원

∎ 다양한 기본서비스를 위한 컴포넌트와 오브젝트를 보유

∎ Binder 는 스스로 Thread 모델을 지원하지 않음

∎ 상용 수준의 시스템 레벨 서비스를 구현하는데 넓게 사용되어짐

Page 9: 리눅스 커널

- 9 -Huins. R&D Center

Kernel

Open Binder 의 기본 동작

Open Binder 의 동작 메커니즘

9

Service Manager 는 Process communication 이 필요한 두개의 process 에 서비스를 시작하게 해주는 deamon processor

각 Process 는 libutil.lib 를 호출함으로서 통신이 이루어지며 , 실제 통신에서는 커널 영역의 공유 메모리를 사용하게 된다 .

Binder 의 각 Process 는 libutil.lib 를 호출함으로서 통신이 이루어지며 , 실제 통신에서는 커널 영역의 공유 메모리를 사용하게 된다 .

Page 10: 리눅스 커널

- 10 -Huins. R&D Center

Kernel

Low Memory Killer 메모리 고갈 상태에서 Out Of Memory (OOM) 발생 시키않는 방법 프로세스를 중요도에 따라 메모리에서 제거하는 방법 Lowmem_shrink 함수를 이용 메모리 부족현상 발생시 lowmem_shrink 함수를 이용 연결리스트로 되어있는 프로스를 검색 제거해야될 프로세스가 있는경우 SIGKILL 을 전송

프로세스의 우선순위 사용하고 있는 프로세스는 각 프로세스의 상태에 따라서 우선순위가 결정된다 .

메모리가 부족한 현상이 발생하게 될 때 , 우선순위가 낮은 프로세스 부터 제거된다 .

Foreground Process > Visible Process > Service Process > Background Process > Empty Process

10

Page 11: 리눅스 커널

- 11 -Huins. R&D Center

Kernel

활성 프로세스 (Foreground) 사용자와 상호작용을 하고 있는 최상위의 액티비티나 수행중인 인텐트 리시버를 소유하는 프로세스 현재 프로세스가 실행될 수 없는 최악의 메모리 부족 상태에서만 종료됨

화면에 보이는 프로세스 (Visiable) 화면상에 표시되지만 foreground 상태가 아닌 Activiry 를 소유한 프로세스 기기의 화면에 표시되지만 사용자와 인터페이스를 하지 못하는 경우 . 현재 실행 화면위에 다이얼로그가 표시되어 인터페이스를 하는 경우 해당 프로세스가 수행하지 않을 때까지 수행됨

시작된 서비스 프로세스 SstartService() 메서드를 이용하여 Service 를 점유하고 있는 프로세스 사용자에게 직접적으로 표시되지 않음 Foreground 와 visable 프로세서가 수행되기 충분한 메모리가 존재하는한 스스로 실행 상태를 유지

백그라운드 프로세서 (Background) 사용자에게 현재 보이지 않는 Activity 를 소유한 프로세스 백그라운드 프로세스는 사용자에게 어떠한 영향도 미치지 않음 Foreground, Visiable, Service 프로세서에서 메모리 요청이 있을 경우 프로세스를 종료

빈 프로세스 (Empty) 활성화된 애플리케이션 컴포넌트를 점유하지 않는 프로세스 안드로이드에서 어플리케이션을 실행하는데 시동시간을 개선하기 위한 캐시로 사용됨 안드로이드는 전반적인 시스템 균형을 유지하기 위해 empty 프로세스를 간혹 종료시킴

11

Page 12: 리눅스 커널

- 12 -Huins. R&D Center

Kernel

Android Power Management Android PM 은 전통적인 리눅스 PM 에 기반을 둔다

Wakelock 안드로이드 커널에 추가됨 Suspend 로 넘어가기 이전에 Driver 및 Application 이 현재 수행하는 작업을 마칠 수 있도록 기회를 줌

커널에 추가된 내용

지원하는 기능

12

obj-$(CONFIG_WAKELOCK) += wakelock.o

obj-$(CONFIG_USER_WAKELOCK) += userwakelock.o

obj-$(CONFIG_EARLYSUSPEND) += earlysuspend.o

obj-$(CONFIG_CONSOLE_EARLYSUSPEND) += consoleearlysus-

pend.o

obj-$(CONFIG_FB_EARLYSUSPEND) += fbearlysuspend.o

Support

Screen on/off

Screen backlight on/off

Keyboard backlight on/off

Button backlight on/off

Adjust screen brightness

Not Support Sleep or Standby mode to fully use CPU’s capability

Page 13: 리눅스 커널

- 13 -Huins. R&D Center

Kernel

Android Power Management Process

13

Page 14: 리눅스 커널

- 14 -Huins. R&D Center

Kernel

리눅스 커널 설치 리눅스 커널 소스를 컴파일하여 , MicroSD 에 설치하여 Achro-4210 에서 커널을 사용할 수 있도록 설치

커널 소스 준비 커널 소스를 복사하여 압축을 해제한다 .

커널 컴파일 준비 Makefile 수정

수정 내용 커널 컴파일에 사용하는 크로스 컴파일러의 경로를 지정한다 .

14

# cd /work/achro4210# cp –a /media/[Achro4210 Disc]/kernel/kernel_120514.tar.gz /work/achro4210# cd /work/achro4210# tar zxvf kernel_120514.tar.gz# cd kernel

# vim Makefile

Page 15: 리눅스 커널

- 15 -Huins. R&D Center

Kernel

Achro-4210 기본 설정 기존 커널 설정 삭제

Achro-4210 초기 설정 적용 커널 소스 디렉터리 /arch/arm/config 에 achro4210_defconfig 파일을 적용한다 .

커널 컴파일 커널을 컴파일 하여 부팅 가능한 커널 이미지를 생성한다 . 컴파일이 완료되면 커널 소스 디렉터리의 arch/arm/boot 디렉터리에 zImage 파일이 생성된다 .

커널 기록 미니컴 실행

Achro4210 의 시리얼포트와 Host Linux 의 시리얼 포트 연결 Achro-4210 의 전원 인가

15

# make distclean

# make achro4210_defconfig

# make

# minicom

Page 16: 리눅스 커널

- 16 -Huins. R&D Center

Kernel

부트로더에서 dnw 명령을 이용하여 usb 수신 준비 USB 를 통해서 보드의 메모리에 다운로드 받는다 .

Host Linux 의 커널 이미지가 있는 디렉터리에서 smdk-usbdl 을 이용하여 보드로 전송

부트로더에서 movi write 를 이용하여 메모리로 전송된 커널이미지를 microSD 에 기록

16

# movi write kernel 0x40008000

# dnw 0x40008000

# cd [ 커널 소스 디렉터리 ]

# smdk-usbdl –f ./arch/arm/boot/zImage

Page 17: 리눅스 커널

- 17 -Huins. R&D Center

Kernel

Reset 을 이용해서 리부팅 한다 리부팅을 하게 되면 커널이 메모리에 로드되고 난 이후에 커널 패닉이 발생한다 . 이는 정상적인 동작으로 리눅스가 최종 부팅을 하게 되면 리눅스 루트 파일 시스템을 마운트 하게 되는데 리눅스 부팅 후 사용해야될 루트파일 시스템이 없으므로커널 패닉이 발생하게 된다 .

17

Page 18: 리눅스 커널

- 18 -

리눅스 파일 시스템Linux File System

Page 19: 리눅스 커널

- 19 -Huins. R&D Center

Linux File System

리눅스 파일 시스템 리눅스 파일 시스템 개요

Root file system 이란 “ /” 에 마운트 되는 file system 시스템에서 요구하는 기본적인 라이브러리등을 포함 glibc, uclibc, libc 등과 같은 필수라이브러리와 tslib 등과 같은 부가적인 라이브러리등이 포함 리눅스 시스템을 사용하기 위해서 필요한 유틸리티를 포함 임베디드 리눅스에서 사용하는 대부분의 명령은 busybox 를 통해서 사용 리눅스 부팅과 운용에 필요한 설정 파일등이 존재 (/etc) 디바이스 접근에 필요한 노드 파일 위치 (/dev)

일반적인 리눅스 파일 시스템의 형태

19

Page 20: 리눅스 커널

- 20 -Huins. R&D Center

Linux File System

리눅스 파일 시스템의 구성

/dev /dev 디렉터리는 시스템이 사용하는 모든 디바이스들 각각에 대응하는 특수파일들이 위치 /dev 디렉터리는 모든 리눅스 시스템에 반드시 있어야 하는 부분 /dev 디렉터리 자체는 보통의 디렉터리와 다를 바 없으므로 ‘ mkdir’ 명령어로 생성 /dev 디렉터리 내에 파일들만은 특수한 파일이므로 ‘ mknod’ 명령을

/etc /etc 디렉터리에는 설정파일이 위치

rc.d/* : 시스템 기동 관련 스크립트가 위치 init.d : rc.d/* 의 스크립트들은 init.d/* 에 soft link 되어있거나 init.d 에 스크립트로 되어 있음

20

Page 21: 리눅스 커널

- 21 -Huins. R&D Center

Linux File System

fstab

마운트 될 파일 시스템의 리스트 Passwd

모든 사용자 계정의 암호 파일 group

사용자 그룹들 shadow

사용자의 패스워드 passwd 의 보안상 허점을 보완하기 위한 파일로 root 사용자만이 읽을수 있다 . network

네트워크 설정 파일 udev

udev 관련 설정 파일 inittab

init 프로세스에 대한 파라미터들이 담겨 있으며 init 는 부팅 후 맨 처음 실행 되는 프로세스

/proc 커널과 프로세스 정보를 위한 가상 파일시스템이다 . /proc 를 사용하여 다음과 같은 일을 할 수 있다 . 통계적 정보를 보는 것 하드웨어 정보 알아내기 런타임 파라메터 수정하기 네트워크와 호스트 파라메터 보기 및 수정 메모리와 수행능력에 관한 정보 .

21

Page 22: 리눅스 커널

- 22 -Huins. R&D Center

Linux File System

/bin, sbin 대부분 BusyBox 로 구성되어있으며 필요한 다른 binary tools 도 추가되어 있다 . BusyBox 는 여러 리눅스의 utility 를 포함하는 대신 많은 공간을 절약 utility 를 포함하느냐에 적은 용량으로 거의 대부분의 리눅스 명령어를 사용할 수 있다 .

/lib 표준 C 라이브러리를 포함한 여러 가지 라이브러리들이 위치 사용자가 추가한 라이브러리는 /usr 디렉터리 내에 lib 를 추가하는 것이 일반적 lib 디렉터리에 추가하는 경우고 종조 있다 .

/mnt 마운트를 위한 디렉터리들이 위치 내부 디렉터리로는 nfs, mtd, nand, usbdisk 과 같은 디렉터리가 있으며 , 사용자에 의해서 생성되는 마운트위치가 포함

/tmp, var 임시 저장 디렉터리로서 var 은 시스템의 로그 , 임시 구성 파일을 저장하는데 사용

/usr 각종 어플리케이션이 설치되어 있는 디렉터리 바이너리 파일 , 라이브러리 파일 , X 윈도우 등등 여러가지 파일들로 구성 .

22

Page 23: 리눅스 커널

- 23 -Huins. R&D Center

Linux File System

리눅스 파일 시스템 설치 리눅스 파일 시스템 설치 준비

압축 해제

리눅스 파일 시스템 설치 Achro-4210 의 전원을 끄고 , MicroSD 를 리눅스 호스트에 연결 호스트에 연결이되면 , 리눅스에 자동으로 /media/Achro4210_system 디렉터리가 생성됨 파일 시스템 압축을 해제한 디렉터리로 이동

23

# mkdir /root/temp ( 해당 디렉터리가 없으면 생성 )

# cp /media/[Achro4210 Disc]/filesystem/linux_file_system/* /root/

temp

# sync

# cd /root/temp

# tar zxvf linux_file_system.tar.gz

# sync

# cd /root/temp/linux_file_system

Page 24: 리눅스 커널

- 24 -Huins. R&D Center

Linux File System

전체 파일을 /media/Achro4210_System 디렉터리로 복사

복사가 완료되면 연결을 해제

미니컴을 실행 Achro4210 의 시리얼포트와 호스트 리눅스의 시리얼포트를 연결 연결이 해제되면 MicroSD 카드를 Achro4210 에 넣고 전원 인가 정상적으로 파일 시스템이 설치되었다면 login : 문구가 출력됨

로그인 log in 이 출력되면 root 라고 입력하면 리눅스로 로그인됨 .

24

# cp -a * /media/Achro4210_System

# sync