240 likes | 425 Views
Linux kernel. 리눅스 커널. Kernel. 리눅스 커널 개요 운영체제 Operating System 에서 Kernel 은 운영체제의 핵심 사용해야할 시스템 자원을 관리해주는 기능 안드로이드가 적용되면서 기본적인 커널에 추가적인 기능이 포함됨 기존 리눅스 커널
E N D
Linux kernel 리눅스커널
Kernel • 리눅스커널 개요 • 운영체제 • Operating System에서 Kernel은 운영체제의 핵심 • 사용해야할 시스템 자원을 관리해주는 기능 • 안드로이드가 적용되면서 기본적인 커널에 추가적인 기능이 포함됨 • 기존 리눅스커널 • 프로세스 관리- 하나의 프로그램은 하나 이상의 프로세스를 가질 수 있다.- 커널은 해당 프로세스가 시스템 자원을 분배하고, 다른 자원을 침해할 수 없도록 관리- 프로세스의 생성과 소멸에대한 전반적인 내용을 관리한다. • 메모리 관리- 시스템에서 구동되는 프로세스는 프로세스만의 독립적인 메모리를 갖는다.- 리눅스는 물리메모리에 집접적으로 데이터를 기록하는 것을 허용하지 않는다.- 반환된 메모리의 관리등과 같은 기능을 수행
Kernel • 파일시스템 관리- 리눅스는 범용운영체제로 다양한 파일시스템을 지원- 리눅스에서 모든 장치는 파일로 표현된다.- CDFS, FAT, JFFS, YAFFS, FAT16/32, EXT3/4, NTFS등을 지원 • 디바이스 관리- 부트로더에서 초기화된 이후 모든 디바이스는 커널의 관리를 받는다.- 응용 프로그램에서 디바이스를 이용해야 하는 경우 커널을 통해야만 제어가 가능하다.- 사용하고자 하는 장치 드라이버에 따라서 문자, 블록 방식으로 나뉘게 된다. • 네트워크 관리- 커널은 기기와 외부시스템이 정상적인 네트워크를 통해서 통신할 수 있도록 한다.- IPv4, IPv6, Ethernet, ATM, CDMA등이 지원된다. • 커널Diagram
Kernel • 커널 소스 디렉터리 구조 • arch 프로세서종류에 의존적인 부분(arch/i386, arch/alpha, arch/arm… ) ▪ arch/arm/boot/ : 부트 스트랩 코드의 내용 ▪ arch/arm/kernel/ : 하드웨어 의존적인 커널 관리 루틴, Trap과 인터럽트 처리 루틴, 문맥전환(Context Switching) 루틴, 장치 설정과 초기화 루틴 ▪ arch/arm/mm/ : 하드웨어 의존적인 메모리 관리 루틴 • init ▪ 하드웨어 비 의존적 커널 초기화 (start_kernel)
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
Kernel • include▪ 커널을 위한 헤더파일- include/linux/ : 하드웨어 비의존적인 헤더 파일- include/asm-***/ : 하드웨어 의존적인 헤더 파일 • modules▪ 커널 모듈 루틴▪ 모듈의 동적 등록과 제거를 위한 부분 (insmod, modprobe, rmmod등) • lib▪ 커널 라이브러리 루틴 • doc▪ 커널관련 문서 • 안드로이드를 위한 리눅스커널 안드로이드에서 사용이 가능하도록 기능이 확장된 리눅스커널 • 확장된 기능
Kernel • Open Binder • Component-based 시스템 레벨 디자인을 지원할 수 있도록 설계됨 • 기존 IPC의 보안이슈와 오버헤드 이슈를 개선 • 바인더는 커널에서 구동 되는 것이 아니라 바인더라는 서비를 통해서 사용한다. • 서로다른 서비스 혹은 응용간 데이터를 주고 받을 때 이용 • 각 서비스는 독립적인 바인더를 가지고 있어야 하지만 가로챔을 당하지 않는 장점이 있다. • Binder는 ParlmOS에 처음 적용되었으며 해당 라이선스도 해당사에서 가지고 있다. • Binder는 스레드 풀을 유지한다. 자료 요청 이전에 미리 자료를 구조화 시키며, 빠른 시간내에 연결이 가능 여러 개의 프로세스가 이용하는 하나의 서비스가 있다면 모든 서비스가 종료될 때 해제됨 • Open Binder의 특징
Kernel • Open Binder의 기본 동작 • Open Binder의 동작 메커니즘 Binder의 각 Process는 libutil.lib를 호출함으로서 통신이 이루어지며, 실제 통신에서는 커널 영역의 공유 메모리를 사용하게 된다. Service Manager는 Process communication이 필요한 두개의process에 서비스를 시작하게 해주는 deamon processor 각 Process는 libutil.lib를 호출함으로서 통신이 이루어지며, 실제 통신에서는 커널 영역의 공유 메모리를 사용하게 된다.
Kernel • Low Memory Killer • 메모리 고갈 상태에서 Out Of Memory (OOM) 발생 시키않는 방법 • 프로세스를 중요도에 따라 메모리에서 제거하는 방법 • Lowmem_shrink함수를 이용 메모리 부족현상 발생시 lowmem_shrink함수를 이용 연결리스트로 되어있는 프로스를 검색 제거해야될 프로세스가 있는경우SIGKILL을 전송 • 프로세스의 우선순위 사용하고 있는 프로세스는 각 프로세스의 상태에 따라서 우선순위가 결정된다. 메모리가 부족한 현상이 발생하게 될 때, 우선순위가 낮은 프로세스 부터 제거된다. ForegroundProcess > Visible Process > Service Process > Background Process > Empty Process
Kernel • 활성프로세스 (Foreground) • 사용자와 상호작용을 하고 있는 최상위의 액티비티나 수행중인 인텐트 리시버를 소유하는 프로세스 • 현재 프로세스가 실행될 수 없는 최악의 메모리 부족 상태에서만 종료됨 • 화면에 보이는 프로세스 (Visiable) • 화면상에 표시되지만 foreground 상태가 아닌 Activiry를 소유한 프로세스 • 기기의화면에 표시되지만 사용자와 인터페이스를 하지 못하는 경우. 현재 실행 화면위에 다이얼로그가 표시되어 인터페이스를 하는 경우 • 해당 프로세스가 수행하지 않을 때까지 수행됨 • 시작된 서비스 프로세스 • SstartService() 메서드를 이용하여 Service를 점유하고 있는 프로세스 • 사용자에게 직접적으로 표시되지 않음 • Foreground와 visable프로세서가 수행되기 충분한 메모리가 존재하는한 스스로 실행 상태를 유지 • 백그라운드 프로세서(Background) • 사용자에게현재 보이지 않는 Activity를 소유한 프로세스 • 백그라운드 프로세스는 사용자에게 어떠한 영향도 미치지 않음 • Foreground, Visiable, Service 프로세서에서 메모리 요청이 있을 경우 프로세스를 종료 • 빈 프로세스(Empty) • 활성화된애플리케이션 컴포넌트를 점유하지 않는 프로세스 • 안드로이드에서 어플리케이션을 실행하는데 시동시간을 개선하기 위한 캐시로 사용됨 • 안드로이드는 전반적인 시스템 균형을 유지하기 위해 empty 프로세스를 간혹 종료시킴
Kernel • Android Power Management Android PM은 전통적인 리눅스PM에 기반을 둔다 • Wakelock • 안드로이드커널에 추가됨 • Suspend로 넘어가기 이전에 Driver 및 Application이현재 수행하는 작업을 마칠 수 있도록 기회를 줌 • 커널에 추가된 내용 • 지원하는기능
Kernel • Android Power Management Process
Kernel • 리눅스커널 설치 리눅스커널 소스를 컴파일하여, MicroSD에 설치하여 Achro-4210에서 커널을 사용할 수 있도록 설치 • 커널 소스 준비 • 커널 소스를 복사하여 압축을 해제한다. • 커널 컴파일 준비 • Makefile수정 • 수정 내용 커널 컴파일에 사용하는 크로스 컴파일러의 경로를 지정한다.
Kernel • Achro-4210 기본 설정 • 기존 커널 설정 삭제 • Achro-4210 초기 설정 적용 커널 소스 디렉터리/arch/arm/config에 achro4210_defconfig 파일을 적용한다. • 커널 컴파일 커널을 컴파일 하여 부팅 가능한 커널 이미지를 생성한다. 컴파일이 완료되면 커널 소스 디렉터리의 arch/arm/boot디렉터리에 zImage파일이 생성된다. • 커널 기록 • 미니컴 실행 • Achro4210의 시리얼포트와 Host Linux의 시리얼 포트 연결 • Achro-4210의 전원 인가
Kernel • 부트로더에서dnw명령을 이용하여 usb수신 준비 USB를 통해서 보드의 메모리에 다운로드 받는다. • Host Linux의 커널 이미지가 있는 디렉터리에서 smdk-usbdl을 이용하여 보드로 전송 • 부트로더에서movi write를 이용하여 메모리로 전송된 커널이미지를microSD에 기록
Kernel • Reset을 이용해서 리부팅 한다 리부팅을 하게 되면 커널이 메모리에 로드되고 난 이후에 커널패닉이 발생한다. 이는 정상적인 동작으로 리눅스가 최종 부팅을 하게 되면 리눅스 루트 파일 시스템을 마운트 하게 되는데 리눅스 부팅 후 사용해야될 루트파일 시스템이 없으므로커널패닉이 발생하게 된다.
Linux File System 리눅스 파일시스템
Linux File System • 리눅스 파일 시스템 • 리눅스 파일 시스템 개요 • Root file system이란 “/”에 마운트 되는 file system • 시스템에서 요구하는 기본적인 라이브러리등을 포함 glibc, uclibc, libc등과 같은 필수라이브러리와 tslib등과 같은 부가적인 라이브러리등이 포함 • 리눅스 시스템을 사용하기 위해서 필요한 유틸리티를 포함 • 임베디드리눅스에서 사용하는 대부분의 명령은 busybox를 통해서 사용 • 리눅스부팅과 운용에 필요한 설정 파일등이 존재 (/etc) • 디바이스 접근에 필요한 노드 파일 위치 (/dev) • 일반적인 리눅스 파일 시스템의 형태
Linux File System • 리눅스 파일 시스템의 구성 • /dev • /dev디렉터리는 시스템이 사용하는 모든 디바이스들 각각에 대응하는 특수파일들이 위치 • /dev디렉터리는 모든 리눅스 시스템에 반드시 있어야 하는 부분 • /dev디렉터리 자체는 보통의 디렉터리와 다를 바 없으므로 ‘mkdir’ 명령어로 생성 • /dev디렉터리 내에 파일들만은 특수한 파일이므로 ‘mknod’ 명령을 • /etc • /etc디렉터리에는 설정파일이위치 • rc.d/* : 시스템 기동 관련 스크립트가 위치 • init.d: rc.d/*의 스크립트들은 init.d/*에 soft link 되어있거나 init.d에 스크립트로 되어 있음
Linux File System • fstab 마운트될 파일 시스템의 리스트 • Passwd 모든 사용자 계정의 암호 파일 • group 사용자 그룹들 • shadow 사용자의 패스워드 passwd의 보안상 허점을 보완하기 위한 파일로 root 사용자만이 읽을수 있다. • network 네트워크 설정 파일 • udev udev관련 설정 파일 • inittab init프로세스에 대한 파라미터들이 담겨 있으며 init는 부팅 후 맨 처음 실행 • 되는 프로세스 • /proc • 커널과 프로세스 정보를 위한 가상 파일시스템이다. • /proc를 사용하여 다음과 같은 일을 할 수 있다. • 통계적 정보를 보는 것 • 하드웨어 정보 알아내기 • 런타임 파라메터 수정하기 • 네트워크와 호스트 파라메터 보기 및 수정 • 메모리와 수행능력에 관한 정보 .
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 윈도우 등등 여러가지 파일들로 구성.
Linux File System • 리눅스 파일 시스템 설치 • 리눅스 파일 시스템 설치 준비 • 압축해제 • 리눅스 파일 시스템 설치 • Achro-4210의 전원을 끄고, MicroSD를 리눅스 호스트에 연결 • 호스트에 연결이되면, 리눅스에 자동으로 /media/Achro4210_system 디렉터리가 생성됨 • 파일 시스템 압축을 해제한 디렉터리로 이동
Linux File System • 전체 파일을 /media/Achro4210_System 디렉터리로 복사 • 복사가 완료되면 연결을 해제 • 미니컴을 실행 Achro4210의 시리얼포트와 호스트 리눅스의 시리얼포트를 연결 • 연결이 해제되면 MicroSD카드를 Achro4210에 넣고 전원 인가 정상적으로 파일 시스템이 설치되었다면 login : 문구가 출력됨 • 로그인 log in이 출력되면 root라고 입력하면 리눅스로로그인됨.