리눅스 설치를 위한 리눅스 커널의 기본구조와 특징
- 리눅스 커널 재구성시 필요
- 운영체제에 대한 기본적인 이해 -> 커널 소스 구조 및 커널 내부를 구성하는 구성요소에 대한 이해
- 리눅스 소스 설치 -> 커널 컴파일 -> 부트로더 설정
- 리눅스 커널 수정은 커널에 대한 이해 필요 -> 컴파일은 매우 복잡
* 수정 후 컴파일 보단 설정 변경으로 절차 최소화 하는것이 편리
(1) 리눅스 커널 구조
1) 커널 개요
2) 커널 구조
3) 마이크로 커널
4) 모노리식 커널
5) 리눅스 커널 소스
6) 리눅스 커널 내부구조
1) 커널 개요
운영체제
- 하드웨어 자원 관리, 응용 프로그램 실행시키는 통합적 환경 제공
- 구성요소 : 커널, 디바이스 드라이버, 명령어 쉘, 사용자 인터페이스, 파일시스템, 시스템유틸리티
- 응용프로그램 인터페이스 -> 시스템 콜
- 하드웨어 인터페이스 -> 디바이스 드라이버
커널 kernel
- 운영체제의 가장 핵심적인부분
- 하드웨어 자원관리
- 시스템 원할히 동작하도록 제어
- 사용자가 입력한 명령어 수행
커널 구성요소
- 스케줄러 : 프로세서 실행 제어
- 인터럽트 핸들러
- 메모리 메니저
- 시스템 서비스 모듈 : 네트워크, 프로세스간 통신
2) 커널 구조
- 사용자 레벨- 응용프로그램
- 커널 레벨 - 시스템콜 인터페이스 / 커널 코어/ 디바이스 드라이버
- HW 레벨-하드웨어
자원 관리자로서의 커널
- 하드웨어 요소들과 주변장치 등 물리적 자원 관리
- 물리적 자원을 추상화 시켜 추상적인 자원으로 관리
- 자원의 추상화 : 물리적 자원에 적용되는 연산들을 단순화 시켜 물리적 장치를 다루는 세부적인 사항을 다룸
- 물리적 자원 기반 추상화 : 태스크 스레드, 세그먼트와 페이지, 파일, 디스크 드라이버, 터미널 드라이버
- 물리적 자원과 무관한 추상화 : 세마포어, 메시지
커널 동작 레벨
1. 사용자 레벨 : 응용프로그램 레벨. 사용자 프로그램과 응용프로그램이 위치하는 사용자공간사용.
일반적인 명령어 +프로그램 실행파일(프로세스
2. 커널 레벨 - 하드웨어 자원 관리. 사용자 레벨 프로세스의 요청 받아 서비스 제공
- 커널은 하드웨어 인터페이스와 인터럽트 등을 통해 하드웨어와 통신
- 사용자 프로세스와는 시스템 콜로 통신
3. 하드웨어 레벨 - CPU, 메모리, 하드디스크 같은 물리적인 자원들로 구성
커널의 종류
1. 모노리식 커널
2. 마이크로 커널
3) 마이크로 커널
마이크로 커널
- 커널의 기능을 최소화 하여 가장 핵심적인 부분만 커널에 포함시킨 구조
- 이외 기능들은 서브 모듈(서비스 서버)로 나누어 각각 프로세스로 구현되어 동작
- 상호간의 메시지 전송 기능을 통해 서비스의 요청과 응답을 수행
마이크로 커널의 장단점
- 장점 : 기능 확장과 수정 용이, 다른 시스템으로 이식 쉬움
- 단점 : 프로세스간 통신에 있어 메시지 전달에 따른 오버헤드발생, 문맥 교환으로 인한 자원 이용 효율성 저하
대표적인 마이크로 커널
- Mach : 1980년 카네기 멜론대에서 개발
- EROS, Spring OS, VSTa, Symbian OS 등 ..
4) 모노리식 커널
- 시스템 관리에 필요한 모든 커널기능들이 통합되어 동작
모노리식 커널 장단점
- 장점 : 마이크로 커널에 비해 구현쉽고 빠름. 효율적자원관리
- 단점 : 커널이 커짐, 커널 변경시 커널 전체를 재컴파일 해야함. 다양한 시스템에 포팅이 힘듬
대표적인 모노리식 커널
- 리눅스 커널
- UNIX 계열
- 윈도우
5) 리눅스 커널 소스
커널 소스 구조
- 압축된 리눅스 커널 소스 다운로드 및 설치시 아래와 같은 디렉토리 구조
- arch : 플랫폼 아키텍처 관련 코드
arch 디렉토리
- 모든 아키텍처 및 CPU에 종속적인 커널 코드 포함
- 각 아키텍처별 부트 관련 코드 존재
- 지원하는 아키텍처별 하위 디렉토리가 구성 ex)i386, alpha, arm
include 디렉토리
- 커널 코드를 생성에 필요한 모든 헤더파일들
- 지원하는 아키텍처별로 서브디렉토리 존재 ex) 인텔 i386 계열 : include/asm-i386
init 디렉토리
- 커널 초기화 코드, 메인함수
ipc 디렉토리
- 프로세스간 통신 코드 기능을 위한 코드
- 파이프, 시그널, 소켓, 메시지 패싱 등
mm 디렉토리
- 모든 메모리 관리 코드
- 아키텍처에 종속적인 메모리 관리 코드 : arm/해당아키텍처/mm ex) arch/i386/mm
drivers 디렉토리
- 블록 디바이스 드라이버, 문자 디바이스드라이버, 네트워크 디바이스 드라이버. 디바이스 드라이버들이 세분화
fs 디렉토리
- 파일 시스템 코드가 파일 시스템 별로 디렉토리 세분화 되어 존재
kernel 디렉토리
- 메인 커널 코드 : 프로세스, 인터럽트, 타이머, 시그널, 프로그램의 실행 등
- arch/아키텍처이름/kernel 디렉토리에 저장 ex) arch/i386/kernel
net 디렉토리
- 커널의 네트워크 관련 디렉토리
lib 디렉토리
- 커널에서 사용하는 라이브러리 코드 ex)arch/i386/lib
scripts 디렉토리
- 커널 설정에 필요한 스크립트들이 존재
6) 리눅스 커널 내부구조
리눅스 커널 내부구조
- 크게 사용자/커널/디바이스 공간으로 나뉨
- 시스템 콜 : 사용자와 커널 사이 인터페이스
- 디바이스 인터페이스 (디바이스 드라이버) : 커널과 디바이스 사이 인터페이스
프로세스 매니저
- 프로세스의 생성 및 소멸
- 프로세스간 통실
- CPU 스케쥴링
- 시그널 처리
- 프로세스간 동기화
- 다중 프로세서의 효율적인 관리 기능
메모리 매니저
- 프로세스에 메모리 할당
- 페이징 기법을 이용한 가상 메모리 관리
- 가상 주소를 실제적인 물리 메모리 주소로 변환
- 페이지 폴트와 같은 예외 상황 처리
파일 매니저
- 파일의 생성과 파일 디렉토리 관리
- 파일에 대한 사용자들의 접근 제어
- 가상 파일 시스템을 사용한 다양한 파일시스템 지원
- 디스크 물리구조에 따른 논리적 기법 표현
- 블록디바이스의 입출력을 위한 버퍼캐시관리
네트워크 매니저
-통신 자원 관리
- 소켓인터페이스, 통신프로토콜 등 서비스 제공
<- 통신 프로토콜 구현, 네트워크 라우팅 및 주소지정, 네트워크 제어기 관리, 네트워크 드라이버와 접속작업
디바이스 매니저
- 시스템에 연결된 여러 주변장치들의 디바이스 드라이버들을 구성하여 관리
- 입출력 요청의 검증
- 입출력 작업 스캐줄링
- 주변장치간의 자료 전송
- 제어기 관리
- 인터럽트 요청 및 처리
(2) 리눅스 커널 컴파일
1) 커널 다운로드
- 커널 컴파일 과정은 2.4 버전 사용
- www.kernel.org /usr/src 디렉토리에 다운
2) 압축 풀기
- tar xvfz linux-2.4.32.tar.gz
3) 설정 초기화
- make mrproper : 기존 설정 있는 커널 설정을 초기화 -> 기존 .config 파일 삭제
4) 커널 옵션 설정
- make menuconfig : 커널 옵션 설정하는 부분 -> 커널 설정 정보가 .config에 저장
- make oldconfig : 기존 설정값들로 재설정
- make config : 콘솔 환경에서 설정
- make xconfig : x윈도우 환경에서 설정
5) 파일 종속성 검사
- make dep : 커널 설정을 바탕으로 각 파일들의 종속성을 검사
6) 오브젝트 파일 제거
- make clean : 기존 컴파일시 생성되었던 object 파일 제거
7) 커널 이미지 만들기
- make bzImage : 커널 이미지를 만들기 위한 컴파일 과정
- 커널 이미지 : arch/i386/boot 디렉토리에 생성
- vmIinux : 압축되지 않은 커널 이미지
- zImage : 압축 커널, 1MB 이하
- bzImage : 압축 커널 = vmInux + 초기화 코드 (bootsect.S, setup) + bzImage
8) 이미지 복사
- cp arch/i386/boot/bzImage /boot/bzImage-2.4.32
9) 모듈 컴파일
- make module : 모듈 컴파일
- 옵션으로 설정한 모듈들을 컴파일
- 처음 컴파일 하는 경우에만 쓰면됨
10) 모듈 복사 및 확인
- make modules_install : 컴파일 모듈들을 적절한 디렉토리에 복사
- ls /lib/modules/2.4.32
11) 환경 설정 파일 수정
- vi /etc/grub.config 하여 수정(부트로더가 LILO or GRUB)
- default : 부팅 순서. 0이번 1번째, 1이면 두번째 커널 선택해 부팅
- timeout : 대기 시간
- splashimage : GRUB 사용시 표시되는 배경화면
- title : 리눅스 커널의 이름
- root : 루트 파티션 위치
ex) root(hd0,4) /boot 가 hda5에 위치
- kernel : 부팅시 로딩할 커널파일 위치와 이름 설정
- reboot : 시스템 재시작
'컴퓨터과학 > 임베디드' 카테고리의 다른 글
ARM을 활용한 임베디드 시스템 설계 20 - 리눅스 파일 시스템 (0) | 2020.05.05 |
---|---|
ARM을 활용한 임베디드 시스템 설계 19 - 커널 재구성 (0) | 2020.05.05 |
ARM을 활용한 임베디드 시스템 설계 17 - 부트로더 분석 (0) | 2020.05.04 |
ARM을 활용한 임베디드 시스템 설계 16 - 부트로더 구조 (0) | 2020.05.04 |
ARM을 활용한 임베디드 시스템 설계 15 - 임베디드 시스템 개발 환경 (0) | 2020.05.04 |