cd_context_init()がオープンできない原因がわからないので、デバイスサイズが同じZed Boardで同じソースコードでプロジェクトを作成して検証することにした。
Zedの環境にはOpenCVは無いので、OpenCVでエラーが発生するのは問題なく、確認したいのはcf_context_init()が通過するかどうかである。
無理やり環境を作成して、試した結果・・・
sh-4.3# /mnt/OpenCV_Sample4-1.elf
cf_context_init()
cf_get_current_context()
axi_lite_open()
axi_lite_open()
axi_lite_open()
accel_open()
libpng warning: Image width is zero in IHDR
libpng warning: Image height is zero in IHDR
libpng error: Invalid IHDR data
accel_close()
axi_lite_close()
axi_lite_close()
axi_lite_close()
とりあえず、Zed Board環境であればcf_context_init()が通過して、曲がりなりにもOpenCVの関数を実行したようだ。
Z-TurnとZed Boardの環境での相違点はPlatformがメーカ製か自作かというところまで絞ることができた。
と、いうことはZ-TurnのPlatformに問題があるということだな。
SDxのVivadoプロジェクトは正常にビルドできているようだ。
![]()
SDxはM_AXI_GP1とS_AXI_ACPを追加して、conv_data()を実装したようだ。
アドレスも0x83C0_0000に割り振っている。
じゃぁ、Zed Boardの環境は0x43C0_0000に割り振っている。
GP0とGP1の違いだから問題ないはずだよなぁ。
設定ファイル自体は問題ないと思う・・・
SDxでM_AXI_GP1とM_AXI_ACPを使用したのだが、この情報がu-bootのSPLに入っていなかった。
Platformを作成したVivadoプロジェクトからps7_initを抜き出してu-bootのSPLを作成していたのでM_AXI_GP1とM_AXI_ACPがDisableになっていたのだ。
だから、アプリケーションからFPGAにアクセスしようとしても応答なし状態になってエラーになったんだ。
と、仮定してみた。
トライしたけど同じ結果でダメだった。
そこでZedの環境を見てみると・・・
あれ、FSBLはPlaformで定義したものを使っている。
つまり、SDxのVivadoで生成したものは使っていない。
もしかして、最初から「全砲門開けぇ〜!!!」のFSBLを用意しているということなのか?
と、いうかわからなくなってきた。