
강좌 & 팁
xenomai는 Linux와 여러 embedded-OS에 적용할 수 있는 RTOS패치로서
커널패치와 라이브러리로 구성되어 있다.
이번 강좌에서는 Linux x86에 RTOS패치 및 패키지 xenomai를 설치하는 방법을 알아본다.
먼저 xenomai는 pure-linux만을 지원하는데 다음과 같은 설치조합을 만들 수 있다.
xenomai-2.6.3 --- ipipe-core-3.10.32-x86-2.patch --- linux-3.10.32
ipipe-core-3.10.32-x86-2.patch는 Adeos프로젝트에서 제공하는 RTOS용 커널패치로서,
http://download.gna.org/adeos/patches/v3.x/x86에서 구할 수 있다.
1. 소스를 푼다.
a) tar -xf xenomai-2.6.3.tar.bz2
b) tar -xf linux-3.10.32.tar.bz2
c) ls
xenomai-2.6.3
linux-3.10.32
ipipe-core-3.10.32-x86-2.patch
2. xenomai디렉토리로 가서 adeos패치를 실행시킨다.
a) cd xenomai-2.6.3
b) scripts/prepare-kernel.sh --arch=i386 --adeos=../ipipe-core-3.10.32-x86-2.patch --linux=../linux-3.10.32
64bit 플랫폼에 대해서는 arch옵션에 x86_64를 값으로 준다. 다른값으로는 powerpc, ppc, blackfin, arm이 있다.
3. 리눅스커널디렉토리로 가서 현 LinuxOs의 Configuration를 목표커널의 Configuration과 일치시킨다.
a) cd linux-3.10.32
b) /boot밑에서 현재 설치된(또는 실행중인) 리눅스 커널의 config 파일을 얻어온다.
파일명은 'config-'로 시작한다.
cp /boot/config-3.2.0-26-generic-pae .config
현재커널이 configuration을 /proc파일로 보이고 있다면, /proc/config.gz파일이 있다.
이것을 사용할 수도 있다.
zcat /proc/config.gz > .config
c) make menuconfig(또는 'make xconfig', 'make gconfig')
4. (Xenomai를 위한) Kernel 파라메터를 세팅한다.
RTOS는 Power Management에 민감하다. Suspend/Resume을 같은 동작은 RTOS에서 허용하지 않는다.
USB도 enable시킨다. USB_LEGACY_EMULATION는 시스템성능에 큰 영향을 미친다.
USB enable은 USB_LEGACY_EMULATION을 disable시키는 효과가 있다.
a) CONFIG_CPU_FREQ ---> disable
"Power Management and ACPI options" -- "CPU Frequency scaling" -- "CPU Frequency scaling"
b) CONFIG_ACPI_PROCESSOR ---> disable
"Power Management and ACPI options" -- "ACPI(~) Support" -- "Processor"
c) CONFIG_APM ---> disable ;; x64에서는 표시되지 않는다.
"Power Management and ACPI options" -- "APM(Advanced Power Management) BIOS support"
d) CONFIG_INTEL_IDLE ---> disable ;; CPU_IDLE에 의존한다.
"Power Management and ACPI options" -- "Cpuidle Driver for Intel Processors"
e) CONFIG_CPU_IDLE ---> disable
"Power Management and ACPI options" -- "CPU idle PM Support"
f) CONFIG_CC_STACKPROTECTOR --> x86_64가 아니면 disable
"Processor type and features" -- "Enable -fstack-protector buffer overflow detection"
g) CONFIG_AMD_IOMMU ---> disable; x86_64일 경우
"Device Drivers" -- "IOMMU Hardware Support" -- "AMD IOMMU support"
h) CONFIG_PCI_MSI ---> disable
"Bus options(PCI etc.)" -- "Message Signaled Interrupts (MSI and MSI-X)"
i) CONFIG_KGDB ---> disable
"Kernel hacking" -- "KGDB: kernel debugger"
j) CONFIG_INPUT_PCSPKR---> disable
"Device Drivers" -- "Input device support" -- "Miscellaneous devices" -- "PC Speaker support"
CONFIG_ACPI_PROCESSOR이 CONFIG_CPU_IDLE을 선택(select)하기 때문에
CONFIG_ACPI_PROCESSOR, CONFIG_CPU_IDLE, 이 순서대로 diable시킨다.
5. 커널빌드하고 설치한다.
a) make
b) make modules_install; make install
6. 다시 Xenomai디렉토리로 와서 나머지 빌드를 수행한다.
a) cd xenomai-2.6.3
b) mkdir ../xenomai_build # object파일을 위해 따로 폴더를 만든다.
c) ../xenomai-2.6.3/configure --enable-x86-sep
d) make; sudo make install
(디폴트) 설치된 디렉토리는 '/usr/xenomai'이다.
7. 설치된 디렉토리는 '/usr/xenomai'이다.
a) ls /usr/xenomai
bin/ include/ lib/ sbin/ share/
b) ls /usr/xenomai/bin
arith* dohell* mutex-torture-posix* wrap-link.sh*
check-vdso* insn_bits* regression/ xeno*
clocktest* insn_read* rtcanrecv* xeno-config*
cmd_bits* insn_write* rtcansend* xeno-regression-test*
cmd_read* irqbench* rtdm* xeno-test*
cmd_write* irqloop* sched-tp* xeno-test-run*
cond-torture-native* klatency* switchtest* xeno-test-run-wrapper*
cond-torture-posix* latency* wakeup-time*
cyclictest* mutex-torture-native* wf_generate*
c) ls /usr/xenomai/lib
libanalogy.a libpsos.so@ librtdm.so.1.0.0* libvxworks.la*
libanalogy.la* libpsos.so.0@ libuitron.a libvxworks.so@
libanalogy.so@ libpsos.so.0.0.0* libuitron.la* libvxworks.so.1@
libanalogy.so.1@ libpthread_rt.a libuitron.so@ libvxworks.so.1.0.0*
libanalogy.so.1.0.0* libpthread_rt.la* libuitron.so.0@ libxenomai.a
libnative.a libpthread_rt.so@ libuitron.so.0.0.0* libxenomai.la*
libnative.la* libpthread_rt.so.1@ libvrtx.a libxenomai.so@
libnative.so@ libpthread_rt.so.1.0.0* libvrtx.la* libxenomai.so.0@
libnative.so.3@ librtdm.a libvrtx.so@ libxenomai.so.0.0.0*
libnative.so.3.0.0* librtdm.la* libvrtx.so.0@ pkgconfig/
libpsos.a librtdm.so@ libvrtx.so.0.0.0* posix.wrappers
libpsos.la* librtdm.so.1@ libvxworks.a
d) ls /usr/xenomai/include
analogy/ asm-blackfin/ asm-powerpc/ asm-x86/ posix/ rtdm/ vxworks/
asm@ asm-generic/ asm-sh/ native/ psos+/ uitron/ xeno_config.h
asm-arm/ asm-nios2/ asm-sim/ nucleus/ rtdk.h vrtx/ xenomai@