Brise

arm보드(raspberry pi)에 Xenomai 설치 본문

Linux

arm보드(raspberry pi)에 Xenomai 설치

naudhizb 2014. 7. 9. 11:17
반응형


Xenomai 설치를 위해 설치해야 하는 것은 총 3개이다.


1. Xenomai API

2. linux Kernel

3. adeos ipipe patch


대략적인 설치 순서는 다음과 같다.


1) linux kernel에 adeos패치와 xenomai 패치를 한다.

2) linux kernel을 타겟과 맞게 configure한다.

3) linux kernel을 build한다.

4) linux kernel을 교체한다.


5) Xenomai를 configure한다.

6) Xenomai를 build한다.

7) Xenomai를 설치한다.


8) test

>> 완벽한 순서는 아니지만, 대략적으로 이런 식으로 진행된다.


전체 순서는 http://code.google.com/p/picnc/wiki/RPiXenomaiKernel 와 같은 방법을 취하고 있다.


일단, 라즈베리파이가 저성능이라 시간이 오래 걸리기 때문에 일반 리눅스 컴퓨터(x86)에서 최대한 빌드를 한다. (크로스 컴파일링)



<x86 리눅스 ; 크로스 컴파일링>


> 커널 빌드와 menuconfig하기 위한 패키지 설치 (한 줄씩 붙여 넣을것)

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install git-core -y

sudo apt-get install ncurses-dev -y

sudo apt-get install kernel-package -y

sudo apt-get install ia32-libs -y


> Install cross compiler

> Download and untar the crosscompiler from https://github.com/raspberrypi/tools/archive/master.tar.gz

cd <working dir>

wget https://github.com/raspberrypi/tools/archive/master.tar.gz

tar xzf master.tar.gz



>Download source files and patches


>Download kernel

git clone -b rpi-3.8.y --depth 1 git://github.com/raspberrypi/linux.git linux-rpi-3.8.y

>Download Xenomai

git clone git://git.xenomai.org/xenomai-head.git xenomai-head

>Download minimal config

wget https://www.dropbox.com/s/dcju74md5sz45at/rpi_xenomai_config


> 사실 나머지는 다 할 수 있지만, 바로 위에있는 config조정하는게 사실 가장 힘든 것 같다. 만약 다른 보드에 포팅하고 싶다면 저 config를 잘 조정해야 할 것같다.


>Apply patches

>Apply ipipe core pre-patch

(cd linux-rpi-3.8.y; patch -Np1 < ../xenomai-head/ksrc/arch/arm/patches/raspberry/ipipe-core-3.8.13-raspberry-pre-2.patch)

>Apply Xenomai ipipe core patch

cd ..; xenomai-head/scripts/prepare-kernel.sh --arch=arm --linux=linux-rpi-3.8.y \

 --adeos=xenomai-head/ksrc/arch/arm/patches/ipipe-core-3.8.13-arm-4.patch

* 3.13.15 수정 3.8.13-arm-3 --> 4

>Apply ipipe core post-patch

(cd linux-rpi-3.8.y; patch -Np1 < ../xenomai-head/ksrc/arch/arm/patches/raspberry/ipipe-core-3.8.13-raspberry-post-2.patch)

cd ..


>이제 리눅스 커널에 제노마이 패치가 되었고 리눅스를 빌드해야한다.


>Compile kernel

>Create build directory

mkdir linux-rpi-3.8.y/build


(* 자신이 직접 config를 조정하고싶다면 아래와 같이 하자)

>Configure kernel

cd linux-rpi-3.8.y

make mrproper

make ARCH=arm O=build menuconfig


/*

menuconfig 조정 옵션

1. Enable loadable module support - Module versioning support : off V

2. Processor type and features - Support sparse irq numbering : off ?

3. " " - Processor family : select your processor type V BCM2708

4. " " - Maximum number of CPUs : set correct number of cores 1?

5. " " - Preemption Model : select "Preemptible Kernel(Low-Latency Desktop)"  >Kernel option V

6. " " - High Memory Support : set correctly ?

7. Power management and ACPI option - CPU Freqency scaling - CPU Frequency scaling : off V

8. 기타 파티션과 같은 등등의 옵션 -> 원래의 config파일을 참조하시길

*/


> 미리 만들어진 config파일 사용

>Or use the minimal configuration file

cp rpi_xenomai_config linux-rpi-3.8.y/build/.config

cd linux-rpi-3.8.y

make mrproper

make ARCH=arm O=build oldconfig


>Compile

make ARCH=arm O=build CROSS_COMPILE=../../tools-master/arm-bcm2708/arm-\

bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-


>Install modules

make ARCH=arm O=build INSTALL_MOD_PATH=dist modules_install


>Install headers

make ARCH=arm O=build INSTALL_HDR_PATH=dist headers_install

find build/dist/include \( -name .install -o -name ..install.cmd \) -delete


USB FIQ fix

(taken from http://www.xenomai.org/pipermail/xenomai/2014-March/030412.html)

Download patch

cd <working dir>
wget https
://gist.githubusercontent.com/kinsamanka/10256843/raw/4d5d3e02a443e4d17d9b82a1fe027ef17fb14470/usb_fiq.patch

Apply patch

cd linux-rpi-3.8.y
patch
-p1 < ../usb_fiq.patch

Re-compile kernel

make ARCH=arm O=build CROSS_COMPILE=../../tools-master/arm-bcm2708/arm-\
bcm2708hardfp
-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-

* 추가 : usb FIQ?? 패치를 해줘야 한다.


>이제 빌드된 이미지 파일(zImage)는 linux-rpi-3.8.y/build/arch/arm/boot/ 에 위치하게 된다.

> 이 파일을 라즈베리파이의 /boot(fat32파티션)에 있는 kernel.img와 바꾸면 된다.

>The linux-rpi-3.8.y/build/dist directory contains the kernel headers and modules while the kernel image is located at linux-rpi-3.8.y/build/arch/arm/boot/ .


>> 여기서  linux-rpi-3.8.y/dist/lib와 xenomai-head 폴더는 라즈베리파이에서 필요하므로 옮길 수 있도록 하자.



<라즈베리파이 (제노마이 설치)>

cd <working dir>

> 자신이 작업할 폴더에 리눅스에서 작업했던 xenomai-head 폴더와 linux-rpi-3.8.y/build/dist/lib 를 가져옵니다. (sd카드를 리눅스에 꽂아서 가져오는게 확실하겠죠?)

sudo cp lib / -r
cd xenomai-head
./configure
make
sudo make install
sudo reboot

> 이제 제노마이가 설치되었고  테스트 하기 위해 latency를 실행합니다.

sudo /usr/xenomai/bin/latency -p 100 -T 3000

<그림 : latency 테스트 결과 -p 100 >


결과값이 그리 좋지가 않네요.. 제가 포팅을 잘못한것인지는 잘 모르겠습니다.


만약 lat값이 음수가 나온다면


echo 0 > /proc/xenomai/latency


를 하시고 다시 실행해 보았을 때에 최소값이 4.000이 나온다면

echo 4000> /proc/xenomai/latency

이런식으로 써준다면, 모두 양수로 만드실 수 있을 겁니다.



후기 

사실 부트로더부터 차근차근 만들어 보고 싶었는데 실력이 부족해서 제노마이 패치만 하게 되었습니다.

참조한 사이트의 linuxcnc이미지  생성 방법을 보시고 따라하시면 처음부터 만드는 방법을 알 수 있을 것이라고 생각합니다.

다음포스팅에는 기본적인 RT task를 생성하는 방법을 쓰겠습니다.



반응형
Comments