#概要
前回Xenomaiを導入するためのKernelを構築する手順を説明した。
今回はXenomai本体をビルドして、RaspberryPi上のXenomaiの機能を使えるようにする。Xenomaiをマイコンに導入できればロボット操作などリアルタイム性を求められる動作が可能となる。
#注意事項
前回の続きとなるので、まだそちらを見てない人はこちらを先に読むのを推奨
#####RaspberryPi 3 model B+にXenomaiを導入する手順 その1
https://qiita.com/TordanHatiman/items/697aaa520914e159de2b
スペック等についてはその1と全く変わらないので省略
#目次
- 作業内容
- 動作確認
#作業内容
前回同様Xenomai用のKernelをビルドしたクロスコンパイル環境で作業する。
Xenomai本体も同じ作業ディレクトリ内に配置されている。
(前回の作業ディレクトリはkernel_cnstとしていた)
では、作業をしていこう。まずはXenomaiのライブラリ群をビルドする。
クロスコンパイル環境のため、クロスコンパイラにパスを通す。(前回やったことと一緒)
linux_user@TN-201709Fxxxx:~$ cd ~/kernel_cnst
linux_user@TN-201709Fxxxx:~$ cd ./Xenomai3.x/
linux_user@TN-201709Fxxxx:~$ export CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-
次にXenomaiをビルドするが、ビルドしたファイル群をRPiに移すためにビルドしたファイルを格納しておくディレクトリを作成する。
linux_user@TN-201709Fxxxx:~$ mkdir ~/kernel_cnst/target
linux_user@TN-201709Fxxxx:~$ ./scripts/bootstrap
linux_user@TN-201709Fxxxx:~$ ./configure CFLAGS="-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=neon -ffast-math" --enable-smp --with-core=cobalt
linux_user@TN-201709Fxxxx:~$ make -j4 install DESTDIR=~/kernel_cnst/target/
これでビルドが通ればコンパイル完了。
前回同様にファイル群を圧縮し、RPiへ持ってくる。
(SSHとかでも転送できるけど、セキュリティ上おすすめしない)
linux_user@TN-201709Fxxxx:~$ cd ~/kernel_cnst
linux_user@TN-201709Fxxxx:~$ tar -zcvf xenomai_tools.tgz ./target
適当なところに持ってきて解凍
--------ここからはRPiで作業--------
linux_user@TN-201709Fxxxx:~$ cd ~/workspace(解凍する場所なのでどこでもいい)
linux_user@TN-201709Fxxxx:~$ tar -zxvf ./target.tgz
解凍できたら、持ってきたファイルをRPiにインストール
linux_user@TN-201709Fxxxx:~$ sudo cp -rd ./target/dev/* /dev/
linux_user@TN-201709Fxxxx:~$ sudo cp -rd ./target/usr/* /usr/
このときも必ず導入前の/dev/や/usr/のバックアップを取っておくこと
これでXenomai自体の導入も完了となる
#動作確認
特にエラーもなく、Xenomai導入作業が完了したら以下を実行する
linux_user@TN-201709Fxxxx:~$ sudo /usr/xenomai/bin/latency
もし正常に動作すれば以下のようにlatencyの計測が行われる
== Sampling period: 1000 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT| 00:00:01 (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| 12.239| 12.693| 19.427| 0| 0| 12.239| 19.427
RTD| 12.291| 12.720| 16.926| 0| 0| 12.239| 19.427
RTD| 12.290| 12.701| 17.447| 0| 0| 12.239| 19.427
RTD| 12.238| 12.709| 14.634| 0| 0| 12.238| 19.427
出展:https://lemariva.com/blog/2018/07/raspberry-pi-xenomai-patching-tutorial-for-kernel-4-14-y
(今回このログを取り忘れてしまったので、以上を参照した。)
このようにXenomaiは1ms単位のアプリケーション動作でも処理できるリアルタイム性を持っている。
C言語でXenomaiの関数を使ったアプリケーション動作確認コードなどもネット上で公開されたりしているので、そちらは調べてみるといいかも。
私も実際XenomaiのLatencyを計測したけど確かに1ms周期で動作するプログラムに対してLatencyがどんなに遅くとも1ms±0.1msで動作し、ほとんどが1msで応答を返すので、Linuxベースのマイコンをリアルタイムで動作させるには最適だと思う。
(諸事情により、計測データは載せられないよ.....)
#終わりに
Xenomaiの導入は日本語ベースの資料がほぼないので、海外の資料とかを読み解いていくのに慣れてないと結構難しいです。
もし、同じようにやろうとして詰まってしまったら遠慮なく質問してください。
(できる限り答えます)
パッチについては別記事で書こうかなと思います。文章化して見たい人は申し訳ないですが、それまでお待ちを......
ではまたね!