Linux に平行してベアメタルプログラムを走らせる のバックアップソース(No.14)

更新

[[公開メモ]]

#contents

* CPU でリアルタイム処理をしたい [#p86d9575]

UI や通信に関する処理を Linux で行いつつ、~
リアルタイム性能の必要な処理を別途動かしたい。

Zynq には CPU が2つあるので、1つを Linux に、
1つをベアメタルに使えば完全な並列処理ができるはず?

http://www.wiki.xilinx.com/Real-Time+Linux によれば、~
IRQ Affinity という機能で、Linux で受け取る IRQ を特定の CPU 
に回すという方法もあるらしい。そちらの CPU を常時 Idle にしておき、
割り込み処理中の追加割り込みを禁止できるなら、Linux 
だけでリアルタイム処理ができるのかもしれないけれど、
そういう話にはなっていないようで。

** まだまだ道半ばです [#b66245bd]

結構大変・・・
** 資料 [#w2117929]

シンプルな AMP : 2 つの Zynq SoC プロセッサ上で動作する Linux およびベアメタルシステム~
https://japan.xilinx.com/support/documentation/application_notes/j_xapp1078-amp-linux-bare-metal.pdf

上記に対する最新の補遺~
http://www.wiki.xilinx.com/XAPP1078+Latest+Information

むしろこっちが最新か?~
http://www.wiki.xilinx.com/Multi-OS+Support+(AMP+%26+Hypervisor)

FPGAマガジンの16に FreeRTOS をメインに動かして、
後から Linux を起動する方法が書かれている。

OpenAmp~
https://github.com/OpenAMP/open-amp ~
http://www.wiki.xilinx.com/OpenAMP

これを読めばいいのかも。

** OpenAmp を使えるとよさそう [#ya93739b]

https://github.com/OpenAMP/open-amp

Xilinx の OpenAmp というしくみを使うと、
CPU0 で走る Linux アプリから FreeRTOS や ベアメタル アプリを CPU1 で立ち上げたり、
そのリモートアプリとの間で通信をしたり、リモートアプリに Linux の資源を使わせたり
できるとのことで、まさに欲しかった機能と言えます。

- OpenAmp の機能
-- remoteproc ホストからリモートのプロセスを制御する
-- RPMsg ホストとリモートとの間での通信手段を提供する

OpenAmp は petalinux を前提としていて、libmetal に依存しているのだそうです。

ただ、試してみると petalinux のビルドシステムは重すぎて使いづらい気が・・・
どうするべきか。

* petalinux [#ma53223d]

Xilinx がメンテナンスしている Linux ディストリビューション。

開発環境、ブートローダ、カーネル、ソフトウェアパッケージ、すべてがこれでまかなえる。

ただし設定、コンパイル、デプロイにものすごく時間がかかるので、
そのままの形で開発に使うには向かないのかも。

- [[電気回路/zynq/Petalinux のビルド]]~
とりあえず標準の形でビルドするところまで~
~
- [[電気回路/zynq/Petalinux のカスタマイズ]]~
いろいろカスタマイズして開発環境を整えた内容

* libmetal [#nc69c479]

https://github.com/OpenAMP/libmetal

linux, freertos, baremetal で共通に使えるライブラリ API を提供し、
デバイスへのアクセスや割り込み制御、メモリ確保、その他ユーティリティ機能を提供するもの
のようです。

- Linux user space (based on UIO and VFIO support in the kernel)
- RTOS (with and without virtual memory)
- Bare-metal environments

となっているので、metal_xxx という共通の名前の関数ではあるものの、
環境によって実装を変え、適切な API 呼び出しに変換してくれる、ということみたい。

** petalinux ではチェックボックス一つでインストール可能? [#x0e2da29]

petalinux-config -c rootfs で選択できるので、 チェックするだけでインストールできルっぽい?

ただこれでやるとユーザープロジェクトもすべて petalinux のビルドシステムを使わなければならなくなってややこしい。

GitHub で公開されているソースから単独でインストールできないものか、
と四苦八苦しているのがこちらです。~
>> [[電気回路/zynq/libmetal のインストール]] ← あんまり意味が無いことが後から判明

** そうじゃなくて Xilinx SDK から使うべき [#u1313afb]

libmetal も openamp も、Xilinx SDK の GUI から使わないととてもじゃないけど
使いこなせない感じ。

以降、そっちでやってみる。

* Xilinx SDK から OpenAMP を使う [#oa16b34b]

リポジトリは https://github.com/OpenAMP/open-amp にあるけれど、
Xilinx SDK から使う分にはそのあたりを気にする必要はないようです。

(以下未稿)

Counter: 20462 (from 2010/06/03), today: 1, yesterday: 0