Home Xenomai 패치 적용 - ARM Sabre Lite(NXP)
Post
Cancel

Xenomai 패치 적용 - ARM Sabre Lite(NXP)

설치 환경

  • ‘리눅스 커널 빌드 환경 구축’ 글을 참고하여 리눅스 커널 빌드 환경을 사전에 구축해야 한다.
  • ‘리눅스 커널 빌드 - ARM Sabre Lite(Kernel.org)’ 또는 ‘리눅스 커널 빌드 - ARM Sabre Lite(NXP)’ 글을 참고하여 Sabre Lite에 리눅스가 올라가야 한다.
  • 호스트: Ubuntu 18.04
  • 타겟: Sabre Lite에 Linux kernel 4.14.85 Xenomai-3.0.8 ipipe(Cobalt)

Xenomai란?

  • Xenomai는 리눅스에 실시간성을 지원하기 위한 개발 프레임워크로서, 리눅스 커널을 패치하여 실시간성을 지원한다.
  • Xenomai는 VxWorks, pSOS 그리고 Alchemy라는 자체 RTOS API를 지원하며, 이를 사용하여 실시간 태스크를 생성할 수 있다. 에뮬레이터를 사용하여 다른 RTOS의 API를 적은 오버헤드로 모방할 수 있다.

Xenomai 형태

  • Xenomai는 Mercury 형태와 Cobalt 형태의 두 개의 커널 옵션을 제공한다.

Mercury(Single kernel)

  • 기존 리눅스 커널의 실시간성에 의존하는 형태로 Xenomai 라이브러리를 사용하는 형태다.
  • 커널이 실시간성을 가지기 위해서는 PREEMPT-RT 패치를 적용해야한 다. 즉 실시간성은 PREEMPT-RT 패치에 의존적이다.
  • Xenomai가 제공하는 RTOS API를 사용할 수 있다.

Cobalt(Dual kernel)

  • 리눅스와 병행 실행되는 실시간 co-kernel를 사용하여 실시간성을 보완하는 형태다.
  • Cobalt라는 작은 확장 기능이 리눅스 커널 내에 빌드되어 인터럽트, 실시간 태스크 스케줄링과 같은 시간이 매우 중요한 작업을 실행한다.
  • Cobalt 코어는 기존 커널보다 우선순위가 높으며, 실시간 작업을 처리할 때 기존 리눅스 커널의 lock을 공유하지 않기에 mecury 커널 보다 더 좋은 실시간성을 제공한다.
  • Xenomai가 제공하는 RTOS API를 사용해야 실시간 태스크가 생성된다.

리눅스 커널 다운로드

1
2
3
4
5
# 커널 다운로드, .xz 확장자: 뛰어난 압축률
$ wget https://kernel.org/pub/linux/kernel/v4.x/linux-4.14.85.tar.xz

# 압축 해제
$ tar -xvJf linux-4.14.85.tar.xz

Xenomai 다운로드

  • Xenomai ipipe(Cobalt) 패치가 지원하는 리눅스 버전하고 일치하는 경우만 ipipe 패치 적용 가능하며, 버전이 일치하지 않는 경우 패치 오류 발생한다.
  • 지원하는 ARM 리눅스 커널 4.* 버전은 하단 출처에서 확인 가능하다.

출처: https://xenomai.org/downloads/ipipe/v4.x/arm/

1
2
3
4
5
6
7
8
# Xenomai 다운로드
$ wget https://xenomai.org/downloads/xenomai/stable/xenomai-3.0.8.tar.bz2

# 압축 해제
$ tar xfvj xenomai-3.0.8.tar.bz2

# Xenomai ipipe 패치 파일 다운로드
$ wget https://xenomai.org/downloads/ipipe/v4.x/arm/ipipe-core-4.14.85-arm-6.patch

Xenomai ipipe 패치 적용

1
2
# --linux=[리눅스 코드 경로], --ipipe=[ipipe 패치 경로]
$ ./xenomai-3.0.8/scripts/prepare-kernel.sh --arch=arm --linux=/home/sdy/linux-4.14.85 --ipipe=ipipe-core-4.14.85-arm-6.patch
  • 성공적으로 xenomai 패치가 적용된 경우

image

리눅스 커널 빌드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ cd linux-4.14.85

# 컴파일 의존성 삭제(mrproper + remove editor backup and patch files)
$ sudo make distclean

# 환경 변수 선언
$ export KERNEL_SRC=PWD
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabihf-
$ export INSTALL_MOD_PATH=KERNEL_SRC/modules

# Sabre Lite 컴파일 옵션 적용
$  make imx_v6_v7_defconfig

# 커널 컴파일 설정으로 특별히 설정할 항목은 없으며 사용자 필요에 따라 수정
$  make menuconfig

# 해당 디렉토리에 커널 모듈 설치
$ mkdir modules

# 커널 컴파일
$ make zImage modules dtbs -j4

# 커널 모듈 설치
$ make modules_install

리눅스 커널 부팅에 필요한 파일 정리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$  cd modules
$  mkdir boot

# imx6 관련 rdts, dtb 복사
$ cp ../arch/arm/boot/dts/imx6* ./boot

# zImage 파일 이동
# zImage는 vmlinuz과 같은 파일
$ cp ../arch/arm/boot/zImage ./boot/vmlinuz-4.14.85

# 링크 파일 생성
$ ln -s boot/initrd.img-4.14.85 initrd.img
$ ln -sfv boot/vmlinuz-4.14.85 vmlinuz

# scp 전송을 위한 파일 압축
$ tar -zcvf  linux-4.14.85.tar.gz ./*

# 생성된 파일 목록 확인
$ ls -al

image

1
2
3
# scp으로 타겟에 파일 전송
# ex) sudo scp -r /home/sdy/linux-4.14.87-rt49/modules/linux-4.14.87-rt49.tar.gz ubuntu@168.188.127.63:/home
$ sudo scp -r /home/<username>/linux-4.14.87-rt49/modules/linux-4.14.87-rt49.tar.gz ubuntu@<ip>:/home

타겟에 리눅스 커널 설치

1
2
3
4
5
6
7
8
9
10
11
12
# 처음 리눅스 커널 변경할 때 한 번만 실행
$ sudo apt-get purge -y linux-boundary-* linux-header-* linux-image-* qcacld-module

$ sudo tar --numeric-owner -xf /home/linux-4.14.85.tar.gz -C /
$ sudo update-initramfs -c -k4.14.85

$ rm /home/linux-4.14.85.tar.gz

$ sudo sync && sudo reboot

# 재부팅 후 Xenomai 적용 커널 메시지 확인
$ dmesg | grep Xenomai

image

This post is licensed under CC BY 4.0 by the author.

Project Lab 0. 연구실 홈페이지 개발 프로젝트 소개

Xenomai 애플리케이션 테스트 - ARM Sabre Lite(NXP)

Comments powered by Disqus.

Trending Tags