# Xenomai 커널 설치

### 준비 단계

Xenomai 커널 설치는 여러 가지 단계를 포함하며, 이는 주로 리눅스 커널 패치를 통해 이루어진다. Xenomai 기반의 실시간 애플리케이션을 개발하려면 먼저 Xenomai 커널과 리눅스 커널 소스를 준비해야 한다.

#### 필요 소프트웨어

1. **필수 패키지 설치:** 다음의 패키지가 설치되어야 한다.

   ```bash
   sudo apt-get install build-essential libncurses5-dev bison flex libssl-dev
   ```
2. **커널 소스 다운로드:** 적당한 리눅스 커널 소스를 다운로드한다. 예제에서는 리눅스 커널 4.19를 사용한다.

   ```bash
   wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.tar.xz
   tar -xf linux-4.19.tar.xz
   ```
3. **Xenomai 소스 다운로드:** Xenomai의 적당한 버전을 다운로드한다. 예제에서는 Xenomai 3.1을 사용한다.

   ```bash
   wget https://xenomai.org/downloads/xenomai/stable/xenomai-3.1.tar.bz2
   tar -xf xenomai-3.1.tar.bz2
   ```

### Xenomai 커널 패치

#### I-pipe 패치 적용

Xenomai 커널은 I-pipe 패치를 사용하여 실시간 기능을 추가한다. 따라서 커널 소스를 패치해야 한다.

1. **패치 파일을 확인:** Xenomai 소스 디렉토리 내의 kernel/cobalt/patches 디렉토리에서 적절한 패치 파일을 확인한다.

   ```bash
   cd xenomai-3.1/kernel/cobalt/patches
   ls
   ```
2. **패치 적용:** 해당 커널 버전과 일치하는 패치를 리눅스 커널 소스에 적용한다.

   ```bash
   cd ~/linux-4.19
   patch -p1 < ~/xenomai-3.1/kernel/cobalt/patches/ipipe-core-4.19.59-x86-4.patch
   ```

### 커널 설정

#### 기존 설정 복사

기존 리눅스 커널 설정을 복사하여 사용한다. 이는 새로운 커널 설정을 간편하게 하기 위함이다.

```bash
cp /boot/config-$(uname -r) .config
```

#### Xenomai 설정 추가

Xenomai 설정을 위해 메뉴 설정 도구를 활용한다.

```bash
make menuconfig
```

그 다음 다음 옵션을 설정한다:

* **Enable CONFIG\_IPIPE option:** `Kernel Features -> Support for multiple binary formats -> I-pipe support`
* **Enable CONFIG\_XENOMAI option:** `Device Drivers -> [*] Xenomai/cobalt`

#### 커널 컴파일 및 설치

```bash
make -j $(nproc)
sudo make modules_install
sudo make install
```

### 부팅 설정

#### initramfs 업데이트

initramfs 이미지를 업데이트한다.

```bash
sudo update-initramfs -c -k 4.19.x-ipipe
```

#### 그럽 업데이트

그럽 설정을 업데이트하고 시스템을 재부팅한다.

```bash
sudo update-grub
sudo reboot
```

시스템 재부팅 후, 부팅 시 Grub 메뉴에서 새로 설치된 Xenomai 커널을 선택한다.
