« ZynqberryでSDSoCのアプリが動いた! | トップページ | ZYNQのLinux上でSDSoCを動かす方法 »

2018.06.28

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アプリが起動します。
Zbsdsoc3 Zbsdsoc4

パーシャル・リコンフィギュレーションは使用しませんが、XC7Z010では上のcatコマンドは一瞬で終了するので、パーシャルでなくても時間的には気になりません。

ただ、PLの全レジスタがクリアされてしまうので、HDMI出力機能とかに弊害は出てきます。

SDSoCのアプリが起動するとxlnk_engドライバが動いてハードウェア関数が実装されているのを探しますが、SDSoCのハードウェアが全く入っていないFPGAだとハングするようです。

また、ハードウェア関数が変わるとbitファイルも変わりますが、異なるデザイン用に作ったbitファイルを書き込んでしまっても、運がよければプログラムは実行できると思います。正しい結果にはならないでしょうが。

|

« ZynqberryでSDSoCのアプリが動いた! | トップページ | ZYNQのLinux上でSDSoCを動かす方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« ZynqberryでSDSoCのアプリが動いた! | トップページ | ZYNQのLinux上でSDSoCを動かす方法 »