Xenomai[1]とは?
Xenomaiとは, Linuxにいくつかのパッチを当てることにより, ユーザスペースでハードリアルタイム性を持たせたアプリケーションを開発可能にするフレームワークのことです. リアルタイムを実現するコアな部分は互換性を維持したまま, GNU/Linuxを使って開発することができるような設計になっています[2].
BeagleBone Black[3]へのインストール
今回はこのXenomaiをBeagleBone Blackの標準OSであるAngstrom[4]にインストールする手順を説明します. 前提としてクロスコンパイル環境は整っている, BeagleBone Blackがすでに動作済み(SDカード上にすでにイメージを書き込んでいる)ものとします. 作業手順は大まかに以下のとおりになり,
- BeagleBone用のLinuxのソースをダウンロードする.
- パッチを当てる.
- Xenomaiをダウンロードする.
- XenomaiのパッチをLinuxのソースに当てる.
- カーネルをビルドする.
- ライブラリをビルド, インストール.
ではインストールしていきます. まずカーネルをビルドします
# mkdir bbb
# cd bbb
BeagleBoneのカーネルソースをダウンロード
# git clone https://github.com/beagleboard/kernel.git
Xenomaiをダウンロード
# wget http://download.gna.org/xenomai/stable/xenomai-2.6.3.tar.bz2
# tar xvjf xenomai-2.6.3.tar.bz2
BeagleBoneのカーネルへ移動
# cd kernel
# git checkout origin/3.8 -b 3.8
# ./patch.sh
# cd kernel
# wget "http://arago-project.org/git/projects/?p=am33x-cm3.git;a=blob_plain;f=bin/am335x-pm-firmware.bin;hb=HEAD" -O firmware/am335x-pm-firmware.bin
# cp ../configs/beaglebone .config
次にXenomaiのパッチを当ててカーネルをビルドします.# cd bbb
BeagleBoneのカーネルソースをダウンロード
# git clone https://github.com/beagleboard/kernel.git
Xenomaiをダウンロード
# wget http://download.gna.org/xenomai/stable/xenomai-2.6.3.tar.bz2
# tar xvjf xenomai-2.6.3.tar.bz2
BeagleBoneのカーネルへ移動
# cd kernel
# git checkout origin/3.8 -b 3.8
# ./patch.sh
# cd kernel
# wget "http://arago-project.org/git/projects/?p=am33x-cm3.git;a=blob_plain;f=bin/am335x-pm-firmware.bin;hb=HEAD" -O firmware/am335x-pm-firmware.bin
# cp ../configs/beaglebone .config
Xenomaiのパッチを当てる
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-pre.patch
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/ipipe-core-3.8.13-arm-3.patch
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-post.patch
# cd ../../xenomai-2.6.3/scripts/
# ./prepare-kernel.sh --arch=arm --linux=../../kernel/kernel
# cd ../../kernel/kernel
# make oldconfig
# make -j5 ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- LOADADDR=0x80008000 uImage dtbs modules
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-pre.patch
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/ipipe-core-3.8.13-arm-3.patch
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-post.patch
# cd ../../xenomai-2.6.3/scripts/
# ./prepare-kernel.sh --arch=arm --linux=../../kernel/kernel
# cd ../../kernel/kernel
# make oldconfig
# make -j5 ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- LOADADDR=0x80008000 uImage dtbs modules
ビルドが終了すると, uImageができているのでSDカードの方に移動させます. また, カーネルモジュールのインストールも行います. XenomaiのコマンドはクロスコンパイルではうまくビルドできないのでBeagleBone Black上でビルドし, インストールを行います.
SDカードへuImageを移動させる(/mediaにマウント済みの場合)
# cp ./arch/arm /boot/uImage /media/Angstrom/boot/uImage-3.8.13
# cp -r ../../xenomai-2.6.3 /media/Angstrom/home/root
カーネルモジュールのインストール
# make ARCH=arm INSTALL_MOD_PATH=/media/Angstrom modules_install
# cp ./arch/arm /boot/uImage /media/Angstrom/boot/uImage-3.8.13
# cp -r ../../xenomai-2.6.3 /media/Angstrom/home/root
カーネルモジュールのインストール
# make ARCH=arm INSTALL_MOD_PATH=/media/Angstrom modules_install
作業をBeagleBonoe Black上に移します. Xenomaiのライブラリとコマンドをインストールします
# cd ~/xenomai-2.6.3
# ./configure CFLAGS="-march=armv7-a -mfpu=vfp3" LDFLAGS="-march=armv7-a -mfpu=vfp3"
# make
# make install
# ./configure CFLAGS="-march=armv7-a -mfpu=vfp3" LDFLAGS="-march=armv7-a -mfpu=vfp3"
# make
# make install
# dmesg | grep Xenomai
とした時に, 以下のように表示されれば正常に動作しています.
I-pipe: head domain Xenomai registered.
Xenomai: hal/arm started.
Xenomai: scheduling class idle registered.
Xenomai: scheduling class rt registered.
Xenomai: real-time nucleus v2.6.3 (Lies and Truths) loaded.
Xenomai: debug mode enabled.
Xenomai: starting native API services.
Xenomai: starting POSIX services.
Xenomai: starting RTDM services.
Xenomai: hal/arm started.
Xenomai: scheduling class idle registered.
Xenomai: scheduling class rt registered.
Xenomai: real-time nucleus v2.6.3 (Lies and Truths) loaded.
Xenomai: debug mode enabled.
Xenomai: starting native API services.
Xenomai: starting POSIX services.
Xenomai: starting RTDM services.
最後に
Xenomaiをインストールするにあたりいくつかのサイトを参考にさせて頂きました[5], [6], [7]. Xenomaiは航空宇宙関連やロボットなどのリアルタイム性を追求される現場で使われているようです[8]. 今後はXenomaiのフレームワークを使ったソフトを作っていこうと思います.また, この記事をを英訳し, 内容を加筆修正したBruno Martins氏に感謝を申し上げます[9].
Bruno Martins, thank you for translating this article into English and modifying better.
参考文献
- 1
- "Xenomai", http://xenomai.org/
- 2
- Xenomai, "Documentation summary", http://www.xenomai.org/documentation/branches/v2.3.x/pdf/Native-API-Tour-rev-C.pdf, (accessed 2013-12-26)
- 3
- "BeagleBone Black", http://beagleboard.org/, (accessed 2013-12-26)
- 4
- "Angstrom", http://www.angstrom-distribution.org/, (accessed 2013-12-26)
- 5
- Gentoo Linux Documentation, "Gentoo on the BeagleBone Black", http://dev.gentoo.org/~armin76/arm/beagleboneblack/install.xml, (accessed 2013-12-26)
- 6
- たけおか ぼちぼち日記, "Raspberry Pi に Xenomai(Linux実時間拡張)を入れる", http://ameblo.jp/takeoka/entry-11582930289.html, (accessed 2013-12-26)
- 7
- Silicon Linux, "BBB
_
kernel - Silicon Linux Wiki", http://www.si-linux.co.jp/techinfo/index.php?BBB_kernel, (accessed 2013-12-26) - 8
- トータル・メジャーメント・システム株式会社, "Xenomaiとは リアルタイムOS用ソフト開発", http://www.tmsystem.co.jp/product/xenomai/, (accessed 2013-12-26)
- 9
- Bruno Martins Random ramblings and occasional worthwhile stuff, "Xenomai on the Beaglebone Black in 14 easy steps" http://brunosmartins.info/xenomai-on-the-beaglebone-black-in-14-easy-steps/, (accessed 2014-03-10)