Linux に平行してベアメタルプログラムを走らせる の履歴(No.8)
更新- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 電気回路/zynq/Linux に平行してベアメタルプログラムを走らせる へ行く。
CPU でリアルタイム処理をしたい†
UI や通信を Linux で行いつつ、
リアルタイム性能の必要な処理を別途動かしたい。
Zynq には CPU が2つあるので、1つを Linux に、 1つをベアメタルに使えば完全な並列処理ができるはず?
http://www.wiki.xilinx.com/Real-Time+Linux によれば、
IRQ Affinity という機能で、Linux で受け取る IRQ を特定の CPU
に回すという方法もあるらしい。そちらの CPU を常時 Idle にしておき、
割り込み処理中の追加割り込みを禁止できるなら、Linux
だけでリアルタイム処理ができるのかもしれないけれど、
そういう話にはなっていないようで。
資料†
シンプルな 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
これを読めばいいのかも。
概要†
https://github.com/OpenAMP/open-amp
Xilinx の OpenAmp というしくみを使うと、 CPU0 で走る Linux アプリから FreeRTOS や ベアメタル アプリを CPU1 で立ち上げたり、 そのリモートアプリとの間で通信をしたり、リモートアプリに Linux の資源を使わせたり できるとのことで、まさに欲しかった機能と言えます。
- OpenAmp の機能
- remoteproc ホストからリモートのプロセスを制御する
- RPMsg ホストとリモートとの間での通信手段を提供する
OpenAMP は petalinux と、libmetal ライブラリの上に成り立っています。
petalinux†
Xilinx がメンテナンスしている Linux ディストリビューション。
開発環境、ブートローダ、カーネル、ソフトウェアパッケージ、すべてがこれでまかなえる。
ただし設定、コンパイル、デプロイにものすごく時間がかかるので、 そのままの形で開発に使うには向かないのかも。
- 電気回路/zynq/Petalinux のビルド
とりあえず標準の形でビルドするところまで
- 電気回路/zynq/Petalinux のカスタマイズ
いろいろカスタマイズして開発環境を整えた内容
libmetal†
https://github.com/OpenAMP/libmetal
linux, freertos, baremetal で共通に使えるライブラリ API を提供し、 デバイスへのアクセスや割り込み制御、メモリ確保、その他ユーティリティ機能を提供するもの のようです。
make には cmake, doxygen, libsysfs-dev, libhugetlbfs-dev が必要になりますが、 Debian には libhugetlbfs-dev が含まれていないことがわかりました orz