# GRUB을 통한 커널 선택 및 부팅

Preempt RT 커널을 설치하고 컴파일한 후, 이를 시스템에서 사용하려면 GRUB 부트로더를 통해 해당 커널을 선택하고 부팅할 수 있어야 한다. 이 과정에서는 GRUB 설정 파일을 수정하여 Preempt RT 커널을 기본 부팅 커널로 설정하거나, 부팅 시 선택할 수 있도록 설정한다.

#### GRUB 설정 파일 개요

GRUB 설정 파일은 일반적으로 `/etc/default/grub` 경로에 위치하며, 이 파일을 편집하여 부팅 시 표시될 커널 옵션을 구성할 수 있다. 또한, GRUB은 `grub.cfg`라는 설정 파일을 사용하여 부팅 가능한 커널 리스트를 관리한다. 이 파일은 보통 `/boot/grub/grub.cfg` 경로에 위치하며, 이 파일은 직접 수정하지 않고, `/etc/default/grub` 파일의 설정을 기반으로 `update-grub` 명령을 실행하여 자동으로 생성된다.

#### Preempt RT 커널 선택

1. **GRUB 설정 파일 편집**: 먼저, 텍스트 편집기를 사용하여 `/etc/default/grub` 파일을 열고, 기본 커널을 설정할 수 있다. 예를 들어, `nano` 편집기를 사용하려면 다음 명령을 입력한다.

   ```bash
   sudo nano /etc/default/grub
   ```
2. **GRUB\_DEFAULT 설정**: `GRUB_DEFAULT` 변수는 기본 부팅 커널을 지정하는 데 사용된다. 이 변수를 특정 메뉴 엔트리 이름이나 숫자로 설정할 수 있다.

   * **기본 커널을 숫자로 설정**: 부팅 메뉴의 순서에 따라 커널을 선택할 수 있다. 예를 들어, 두 번째 커널을 기본으로 설정하려면 다음과 같이 수정한다.

     ```bash
     GRUB_DEFAULT=1
     ```
   * **메뉴 엔트리 이름으로 설정**: 커널 이름을 정확하게 지정하여 설정할 수도 있다. 예를 들어, "Ubuntu, with Linux 5.4.0-rt"와 같은 커널 이름을 사용할 수 있다.

     ```bash
     GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.4.0-rt"
     ```

   이 경우, 커널의 정확한 이름은 `/boot/grub/grub.cfg` 파일에서 확인할 수 있다.
3. **GRUB\_TIMEOUT 설정**: `GRUB_TIMEOUT` 변수는 부팅 메뉴에서 자동으로 선택될 때까지의 대기 시간을 초 단위로 설정한다. 기본적으로 5초로 설정되어 있으며, 0으로 설정하면 즉시 기본 커널로 부팅된다.

   ```bash
   GRUB_TIMEOUT=5
   ```
4. **GRUB 설정 업데이트**: 파일을 수정한 후에는 변경 사항을 적용하기 위해 GRUB 설정을 업데이트해야 한다. 이를 위해 다음 명령을 실행한다.

   ```bash
   sudo update-grub
   ```

   이 명령은 `/etc/default/grub` 파일의 설정을 반영하여 `/boot/grub/grub.cfg` 파일을 자동으로 생성한다.

#### 커널 부팅 확인

설정을 완료하고 시스템을 재부팅하면, GRUB 부팅 메뉴에서 새로 설치한 Preempt RT 커널이 기본으로 선택되는 것을 확인할 수 있다. 만약 기본 부팅 커널을 수동으로 선택하고 싶다면, 부팅 시 `Shift` 또는 `Esc` 키를 눌러 GRUB 메뉴를 표시하고, 원하는 커널을 선택하면 된다.

#### 실시간 커널 부팅 후 확인

시스템이 부팅된 후, 실제로 Preempt RT 커널이 사용되고 있는지 확인하려면 다음 명령을 터미널에 입력하여 커널 버전을 확인할 수 있다.

```bash
uname -r
```

이 명령은 현재 사용 중인 커널 버전을 출력한다. 출력된 커널 버전이 Preempt RT 패치를 포함한 커널인지 확인하여 설정이 올바르게 적용되었는지 검증할 수 있다.

#### 부팅 시 문제 해결

GRUB을 통한 Preempt RT 커널 부팅이 예상대로 작동하지 않는 경우, 몇 가지 일반적인 문제 해결 방법을 시도할 수 있다.

1. **GRUB 메뉴 표시**: GRUB 메뉴가 나타나지 않거나 너무 빨리 사라지는 경우, 부팅 시 `Shift` 키나 `Esc` 키를 눌러 수동으로 GRUB 메뉴를 표시한다. 이 방법을 통해 원하는 커널을 선택할 수 있다.
2. **부팅 실패 시 복구 모드 사용**: 만약 Preempt RT 커널로 부팅하는 중에 문제가 발생하여 시스템이 부팅되지 않는다면, GRUB 메뉴에서 "Advanced options for Ubuntu"를 선택하고 복구 모드(recovery mode)로 부팅할 수 있다. 복구 모드에서 시스템을 복구하거나, 이전 커널로 부팅하여 문제를 해결할 수 있다.
3. **로그 확인**: 부팅 문제가 지속된다면, 시스템 로그를 확인하여 문제의 원인을 파악할 수 있다. 다음 명령을 사용하여 부팅 로그를 확인한다.

   ```bash
   sudo journalctl -b -1
   ```

   이 명령은 마지막 부팅 시의 로그를 출력한다. 로그를 살펴보면서 커널 패닉, 모듈 로딩 실패, 또는 다른 오류 메시지를 확인할 수 있다.
4. **GRUB 설정 초기화**: 여러 번의 시도에도 문제가 해결되지 않는다면, `/etc/default/grub` 파일을 초기 상태로 되돌리고, `update-grub` 명령을 다시 실행하여 기본 설정으로 돌아갈 수 있다.

#### 멀티부트 환경에서의 Preempt RT 설정

여러 운영체제가 설치된 멀티부트 시스템에서는 Preempt RT 커널이 설치된 운영체제가 기본으로 부팅되도록 설정해야 할 수 있다. 이를 위해 `GRUB_DEFAULT` 변수를 운영체제의 이름으로 설정하거나, 해당 운영체제의 커널을 선택하여 부팅할 수 있다.

1. **운영체제 선택**: `GRUB_DEFAULT` 변수에 운영체제의 메뉴 엔트리 이름을 지정한다. 예를 들어, 다른 운영체제와 함께 설치된 Ubuntu에 Preempt RT 커널이 설치된 경우:

   ```bash
   GRUB_DEFAULT="Ubuntu"
   ```
2. **특정 커널 선택**: 특정 운영체제의 특정 커널을 기본 부팅 옵션으로 설정하려면, 위에서 언급한 커널 이름을 사용하여 설정한다.

#### GRUB 커스터마이징

GRUB의 테마, 폰트, 배경 이미지 등을 커스터마이징하여 부팅 메뉴를 사용자 정의할 수 있다. 이러한 작업은 필수적이지 않지만, 특정 프로젝트나 환경에서 사용자 정의된 부팅 메뉴가 필요할 수 있다.

1. **GRUB 테마 설정**: `/boot/grub/themes` 디렉토리에 원하는 테마 파일을 추가하고, `/etc/default/grub` 파일에서 `GRUB_THEME` 변수를 설정한다.

   ```bash
   GRUB_THEME="/boot/grub/themes/mytheme/theme.txt"
   ```
2. **배경 이미지 설정**: GRUB 배경 이미지를 설정하려면, `/etc/default/grub` 파일에 다음과 같이 추가한다.

   ```bash
   GRUB_BACKGROUND="/boot/grub/mybackground.png"
   ```
3. **설정 적용**: 변경 사항을 저장하고 `update-grub` 명령을 실행하여 설정을 적용한다.

이와 같은 과정을 통해, Preempt RT 커널을 시스템에서 기본적으로 부팅하도록 설정할 수 있으며, 부팅 시 필요한 문제 해결 및 커스터마이징 방법을 이해할 수 있다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://booiljung.gitbook.io/booil-jung/docs/linux/preempt_rt/chapter_02/0204.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
