ZYNQのLinux上でSDSoCアプリを動かすための条件
ZYNQのLinux上でSDSoCアプリを動かせる条件がわかってきました。
まとめると、
- デバイスツリーにxlnkドライバを登録しておく
- デバイスツリー・オーバーレイは採用はしなくてもよい。SDSoCで作るハードが変わっても、デバイスツリーに変化はないので、オーバーレイはしなくてもよい。
- アプリを作り替えるたびの再起動やデバイスツリーの再構築はしなくてもよい。
- U-Bootは普通のU-Bootでよい。
- デバイスドライバとして、xlnk-eng.koとxlnk-dma.koとxlnk-apf.koが必要。ただし、これをビルドするのはかなり面倒。
- Linuxのカーネルは4.9でよいが、/dev/xdevcfgが必要。
- Linuxのカーネルを4.14に上げる必要はない
デバイスツリーは、/ {の中に
xlnk {
compatible = "xlnx,xlnk-1.0";
};
を書いておきます。そして、
insmod /usr/bin/xlnk-eng.ko insmod /usr/bin/xlnk-dma.ko insmod /usr/bin/xlnk-apf.ko
でドライバをインストールします。この3つのドライバはこの順序でインストールします。
SDSoCのプロジェクトをビルドすると、sd_cardというフォルダに_sds/_p0_.binとelfが出来上がります。
この_sds/_p0_.binをsambaのファイル共有でZYNQシステム上にコピーして、
cat _sds/_p0_.bin > /dev/xdevcfg
でFPGAのPLに書き込んで、elfを実行すれば、SDSoCアプリが起動します。
パーシャル・リコンフィギュレーションは使用しませんが、XC7Z010では上のcatコマンドは一瞬で終了するので、パーシャルでなくても時間的には気になりません。
ただ、PLの全レジスタがクリアされてしまうので、HDMI出力機能とかに弊害は出てきます。
SDSoCのアプリが起動するとxlnk_engドライバが動いてハードウェア関数が実装されているのを探しますが、SDSoCのハードウェアが全く入っていないFPGAだとハングするようです。
また、ハードウェア関数が変わるとbitファイルも変わりますが、異なるデザイン用に作ったbitファイルを書き込んでしまっても、運がよければプログラムは実行できると思います。正しい結果にはならないでしょうが。
| 固定リンク


コメント