# 커널 컴파일 및 설치

Preempt RT 패치가 적용된 커널을 직접 컴파일하고 설치하는 과정은 실시간 애플리케이션을 위한 시스템을 구축하는 중요한 단계이다. 이 과정은 커널 소스 코드를 다운로드하고, Preempt RT 패치를 적용한 후, 원하는 설정에 따라 커널을 컴파일하고 시스템에 설치하는 과정을 포함한다.

#### 커널 소스 코드 다운로드

먼저, 커널 소스 코드를 다운로드해야 한다. 우분투와 같은 리눅스 배포판에서는 다음과 같은 명령어로 커널 소스를 다운로드할 수 있다:

```bash
sudo apt-get install linux-source
cd /usr/src
tar xvf linux-source-<version>.tar.bz2
cd linux-source-<version>
```

여기서 `<version>`은 설치하려는 커널 버전을 나타낸다. 최신 커널 소스는 [kernel.org](https://www.kernel.org)에서 직접 다운로드할 수도 있다.

#### Preempt RT 패치 적용

커널 소스를 다운로드한 후, Preempt RT 패치를 적용해야 한다. Preempt RT 패치는 [RT 프로젝트 페이지](https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO)에서 다운로드할 수 있다. 해당 페이지에서 자신의 커널 버전에 맞는 패치를 다운로드한 후 다음 명령어를 사용하여 패치를 적용한다:

```bash
cd /usr/src/linux-source-<version>
patch -p1 < /path/to/patch-<version>-rt.patch
```

이 명령어는 커널 소스에 실시간 기능을 추가하는 Preempt RT 패치를 적용한다.

#### 커널 설정

패치가 성공적으로 적용되면, 커널 설정을 수행해야 한다. 이 단계에서는 커널이 시스템의 요구에 맞게 구성되도록 다양한 설정을 조정한다. 설정을 시작하려면 다음 명령어를 실행한다:

```bash
make menuconfig
```

이 명령어는 터미널 기반의 메뉴 형식의 설정 화면을 열어준다. 여기서 실시간 패치와 관련된 설정들을 활성화해야 한다. 다음과 같은 옵션들을 검토하고 설정할 수 있다:

* **Preemption Model (PREEMPT\_RT\_FULL)**: 이 옵션은 실시간 기능을 활성화하는 핵심 옵션이다.
* **Timer frequency**: 이 값을 1000Hz로 설정하는 것이 일반적이다. 이는 타이머 인터럽트의 빈도를 결정한다.
* **High Resolution Timer Support**: 실시간 애플리케이션의 정확도를 높이기 위해 활성화한다.
* **Processor type and features**: 사용하는 CPU 아키텍처에 맞게 설정한다.

이 외에도 시스템 요구사항에 따라 다양한 설정을 조정할 수 있다.

#### 커널 컴파일

설정이 완료되면 커널을 컴파일한다. 이 과정은 컴퓨터의 성능에 따라 몇 분에서 몇 시간까지 소요될 수 있다. 다음 명령어를 사용하여 컴파일을 시작한다:

```bash
make -j$(nproc)
```

여기서 `$(nproc)`는 현재 시스템에서 사용할 수 있는 CPU 코어 수를 자동으로 감지하여 병렬 컴파일을 수행한다. 컴파일이 완료되면 다음 단계로 설치를 진행한다.

#### 커널 설치

컴파일이 완료되면, 이제 새로 빌드된 커널을 시스템에 설치할 수 있다. 다음 명령어를 사용하여 커널을 설치한다:

```bash
sudo make modules_install
sudo make install
```

이 명령어는 커널 모듈을 설치하고, 새로 빌드된 커널을 시스템의 부팅 로더에 추가한다.

#### GRUB 설정 및 부팅

커널이 설치되면, 새 커널로 부팅하기 위해 GRUB 설정을 업데이트해야 한다. 우분투 시스템에서는 이 과정이 자동으로 이루어진다. 그러나, GRUB 메뉴에서 새로운 커널이 기본값으로 설정되지 않은 경우 수동으로 설정할 수 있다:

```bash
sudo update-grub
```

시스템을 재부팅한 후, GRUB 메뉴에서 새로 설치된 Preempt RT 커널을 선택하여 부팅할 수 있다.

이제 시스템이 실시간 커널로 부팅되었으며, 실시간 애플리케이션 개발 및 실행을 위한 환경이 준비되었다.
