# Xenomai 커널 설정

#### 커널 소스 코드 준비

Xenomai를 설정하기 위해 필요한 첫 번째 단계는 적절한 커널 소스를 준비하는 것이다. 주로 사용되는 리눅스 커널 소스를 Raspberry Pi와 같은 특정 하드웨어에 맞추어 선택하는 것이 좋다.

#### 패치 적용

Xenomai는 일반 리눅스 커널에 패치를 적용함으로써 실시간 기능을 추가한다. 이 패치를 적용하려면 아래와 같은 명령어를 사용한다:

```sh
wget https://xenomai.org/downloads/xenomai/stable/xenomai-3.x.x.tar.bz2
tar xjf xenomai-3.x.x.tar.bz2
cd xenomai-3.x.x
./scripts/prepare-kernel.sh --linux=<linux-kernel-source-path> --arch=<your-architecture> --ipipe=<I-pipe-patch>
```

여기서 `<linux-kernel-source-path>`는 커널 소스 디렉토리 경로를, `<your-architecture>`는 시스템 아키텍처를, `<I-pipe-patch>`는 i-pipe 패치 경로를 나타낸다.

#### 커널 구성

패치를 적용한 후, 커널을 구성해야 한다. 이를 위해선 `menuconfig` 명령어를 사용한다:

```sh
cd <linux-kernel-source-path>
make menuconfig
```

`menuconfig` UI에서 `Kernel Features`로 이동하여 Xenomai와 관련된 항목을 선택해야 한다.

#### 설정 항목

**I-pipe 설정**

`Kernel Features -> Enable CONFIG_XENO_OPT_POSIX` 항목을 선택하여, POSIX 스킨을 활성화할 수 있다.

**Timer 설정**

`Processor type and features -> High Resolution Timer Support`를 활성화하여, 고해상도 타이머 지원을 켜야 한다.

**기타 설정**

`General Setup -> Xenomai/cobalt` 옵션을 선택하여, Xenomai의 타임리소스 접근 방식을 설정할 수 있다.

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

커널 구성을 완료한 후, 커널을 컴파일하고 설치해야 한다.

```sh
make -j<n> bzImage
make -j<n> modules
sudo make modules_install
sudo make install
```

여기서 `<n>`은 사용하고자 하는 컴파일 스레드의 개수를 지정한다. 이는 CPU 코어 수에 맞추어 설정하는 것이 일반적이다.

#### 부트로더 설정

라이브 부팅 가능한 커널을 만들기 위해 부트로더를 업데이트해야 한다. 주로 사용되는 GRUB 부트로더의 경우, 아래의 명령어를 사용한다:

```sh
sudo update-grub
```

부트 메뉴를 수동으로 편집해야 할 수도 있다. `/boot/grub/grub.cfg` 파일을 확인하고 새로운 커널 항목이 추가되었는지 확인한다.

#### 커널 부팅

시스템을 재부팅한 후, GRUB 부트 메뉴에서 Xenomai 커널로 부팅한다. 부팅 성공 여부는 `dmesg` 명령어를 통해 로드된 커널 모듈과 Xenomai 관련 메시지를 확인함으로써 판단할 수 있다.

```sh
dmesg | grep Xenomai
```

#### Xenomai 테스트

Xenomai가 정상적으로 설치되었는지 확인하기 위한 테스트를 수행한다. Xenomai는 다양한 예제와 테스트 유틸리티를 제공하므로 이를 활용할 수 있다. 예를 들어, `latency` 테스트를 실행하여 시스템의 실시간 성능을 검증할 수 있다.

```sh
cd /usr/xenomai/testsuite/latency
./run
```

테스트 결과는 Xenomai의 응답 시간과 시스템의 실시간 성능을 평가하는 데 중요한 자료가 된다.

***

이로써 Xenomai 커널 설정이 완료되었다. 다음 단계로, 실시간 어플리케이션 개발이나 Xenomai의 추가적인 기능 활용을 고려해 볼 수 있다. 문제 발생 시, Xenomai 커뮤니티나 공식 문서를 참고하여 문제를 해결할 수 있다.
