1. 커널 개요
1) 임베디드 리눅스의 커널의 사용 목적과 기능에 대해서
커널은 운영체제의 핵심 요소로 응용 프로그램의 동작 환경을 제공한다. 또한, 부팅 시 메모리에 적재되며 컴퓨터의 모든 자원을 관리한다.
특히 운영체계의 다른 모든 부분에 여러 가지 기본적인 서비스를 제공하는데 프로세스(생성 및 소멸, 프로세스간 통신, CPU 스케줄링 동기화 등), 메모리(가상 메모리 관리기법, 메모리 하드웨어의 효율적인 관리), 파일 시스템(가상 파일 시스템에 의한 여러 파일 시스템 지원 등), 디바이스 드라이버(입출력 요청의 검증, 입출력 작업 스케쥴링 등), 네트워크(통신 프로토콜 구현(TCP/UDP, IP 등))를 관리하며 정보통신과 컴퓨터 기술의 발전으로 네트워크, GUI 관리까지 확장되었다.
커널의 서비스는 운영체계의 다른 부분이나, 흔히 시스템 호출이라고 알려진 일련의 프로그램 인터페이스들을 통해 요청된다.
전체적인 그림으로 보면 밑의 그림을 참고하면 된다.
2) 커널모드와 사용자모드에 대해
커널 모드(kernel mode)는 하드웨어나 시스템을 요청할 때 사용되는 모드로 사용자가 하드웨어를 직접적으로 사용하는 것을 방지하기 위해 프로그램이 실행되면 하드웨어 제어를 커널에서만 가능하게 하는 CPU 동작 모드이다.
모든 자원(디바이스, 메모리, 프로세서 등)에 접근 및 명령이 가능하다. 그 만큼 중요한 자원을 건드리기 때문에 일반적으로 사용할 때는 사용자 모드와 커널 모드를 넘나들며(모드 변환) 실행이 된다.
사용자 모드(user mode)는 일반적인 사용자 프로세스가 처리되는 동작 모드이며, 커널에서는 중요한 자원을 관리하기 때문에 사용자가 자원에 접근하지 못하도록 모드를 나눈 것이다.
사용자가 접근할 수 있는 영역이 제한되며 프로그램의 자원에 함부로 침범하지 못한다.
밑은 모드 변환의 예이다.
2. 커널 빌드 준비
1) 커널 빌드 과정
① 커널 초기화 |
make mrproper - 기존에 설정된 의존관계를 제거하는 단계 “config” 파일을 비롯하여 커널 컴파일 및 linking을 위해 생성된 여러 가지 설정 파일들만 삭제 make distclean - 커널 컴파일 후 생성된 모든 오브젝트, 백업 파일 삭제 |
② 커널 설정 |
make menuconfig or kconfig - 커널 환경설정, “config” 파일이 생성됨 자신의 시스템 장치에 맞는 커널 요소들을 선택하는 과정 |
③ 커널 컴파일 |
make zImage – 커널 이미지 빌드 커널을 컴파일하고 바이너리들을 링킹하여 단일 바이너리 파일인 “zImage” 생성 |
④ 커널 설치 |
NandWrite – NAND 플래시 사용의 경우 이용하는 명령어 fastboot zImage – fastboot는 USB 인터페이스를 지원하는 U-Boot 명령어이며, 호스트의 fastboot 응용 프로그램이 타깃과 USB로 통신함. |
만들어진 커널 이미지를 /boot 폴더내에 복사후 부트로더에 등록
2) 커널 설치 파일 저장 및 압축 해제
우선 커널 폴더로 이동한 다음, 안에 있는 커널 설치 파일을 압축 해제한다.
여기서 루트 계정 로그인을 안 하고 캡처했는데, 루트 계정으로 하거나 sudo 붙이고 진행해야 한다.
압축 해제 진행 후, 커널 폴더로 이동하여 파일을 확인하면 다음과 같다.
밑은 디렉토리에 대한 간단한 설명이다.
파일 이름 | 파일 설명 |
Documents | 커널에 관계된 문서들이 들어 있음. |
kernel | 커널의 핵심 코드, 스케줄러, 시그널 핸들링 등 |
ipc | 전통적 프로세스 간의 통신, 공유 메모리, 메시지 큐 등 |
lib | 커널 라이브러리 함수 |
mm | 버추얼 메모리 관리, 페이징, 커널 메모리 관리 |
scripts | 코드 사이의 의존성을 만들어 주는 등의 스크립트, 실행파일 |
arch | 아키텍쳐에 관계된 코드 alpha, arm, m68k, i386 등이 있다. |
fs | 버추얼 파일 시스템 인터페이스, 여러 파일시스템 지원 coda. ext2, hpfs, msdos 등이 있다. |
init | 커널이 실행되기 위한 모든 코드, 프로세스 0, 프로세스 생성 |
include | 커널에 관계된 헤더 파일 asm-*은 아키텍처 관련, linux는 리눅스 커널 관련 |
net | 많은 종류의 네크워크 프로토콜 지원, 소켓 지원 |
driver | 하드웨어에 대한 드라이버 block, char, net, pci, scsi, sound 등이 있다. |
3. 커널 빌드
우선 ‘make mrproper’, ‘make distclean’ 명령으로 초기화를 진행한다.
파일을 확인하면 밑 캡쳐와 같다.
여기서 ‘make menuconfig’ 명령을 진행하면 밑의 캡쳐 화면이 나온다.
설정을 하고 ‘.config’로 저장.
과정은 길어서 캡쳐 안했습니다.
(ps. 하라는 대로 하면 버전이 달라서 섞여있기도 하고 다른 블로그 참고해서 진행하는 것을 추천)
이후 ‘make zIamge’ 명령어로 이미지를 생성할 수 있다.