はじめに
この記事では、SoC FPGA ターゲット上で Linux から FPGA 回路のコンフィグレーションを実行する方法を記載します。
最近の Linux カーネルバージョン(v4.x~)では、FPGA 関連のドライバの仕組みが変更された事により、古いカーネルバージョン(v3.x)で利用できていた方法では対応できなくなっています。
そのため、ここでは最近のカーネルバージョンで利用可能なコンフィグレーション方法を紹介します。
参考:
古いカーネルバージョンを使用している場合は下記の記事を参照ください。
FPGA Configuration from Linux | Rocketboards.org
1.デバイスツリー・ファイルの準備
最近のカーネルバージョンで FPGA をコンフィグレーションを行う場合は、デバイスツリー・オーバーレイと呼ばれる仕組みを利用します。デバイスツリー・オーバーレイを使用するためには、以下2つのデバイスツリー双方に対応の記述が必要となります。
- ベース・デバイスツリー(Linux 起動時に適用)
- Overlay 用デバイスツリー(Overlay 実行時に適用)
2.デバイスツリー・オーバーレイ実行(コンフィグレーション実行)
”fpga-region” を含むベース・デバイスツリーを使用して起動した Linux ターミナル上から、以下の手順でデバイスツリー・オーバーレイを実行します。
- 事前準備:Overlay 用デバイスツリー(.dtb)とコンフィグデータ(.rbf)を所定の場所へ格納。
- overlay 実行:dtbt コマンドに -a オプションと Overlay 用デバイスツリーを指定。
- overlay 削除:dtbt コマンドに -r オプションを指定(※ 削除したい場合のみ)。
詳細は、実行時のターミナル画像と吹き出しのコメントを参照ください。
3.補足事項(コンフィグ実行時の HPS-FPGA 間ブリッジの制御)
FPGA 側のコンフィグを実行する場合は、コンフィグ実行中に HPS-FPGA 間ブリッジが無効の状態となるように、事前に無効化、コンフィグ完了後に再度有効化する制御が必要です。
ただし、デバイスツリー・オーバーレイの仕組みを使用する場合には、ブリッジの制御も自動的に行われるため、無効化/有効化の操作を別途行う必要はありません。
まとめ
今回はデバイスツリー・オーバーレイを使用した FPGA コンフィグレーション方法を紹介させて頂きました。
より詳細な情報については、カーネルソース・ツリーのドキュメントも参照ください。
Documentation/devicetree/overlay-notes.txt
Documentation/devicetree/bindings/fpga/fpga-region.txt
参考:
その他、関連情報へのリンクも掲載しておきます。
HOWTO Create a Device Tree | Rocketboards.org
The Devicetree Specification | devicetree.org
Upstream v5.0 Kernel Device Tree Changes | Rocketboards.org