問題タブ [zynq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - libgio.so を libz.so とリンクするときの未解決のシンボル (Linux)
ショートバージョン
libgio-2.0.so.0.4800.1 (libgio-2.0.so) と libz.so.1.2.8 (libz.so) を含むいくつかのライブラリに対して実行可能ファイルをリンクすると、2 つの未解決のシンボル - deflateSetHeader@ZLIB_1.2.2 とinflateGetHeader@ZLIB_1.2.2. どちらのシンボルも libz.so で定義されていませんが、inflateGetHeader@@ZLIB_1.2.2 と deflateSetHeader@@ZLIB_1.2.2 は次のとおりです。
libgio で参照されるその他のシンボルは、libz によって正常に解決されますが、これら 2 つでは解決されません。
ロングバージョン
Linaro 4.4 カーネルで 32 ビット Ubuntu 14.04 を実行する Zynq 7010 ベースのターゲット ( krtkl.com )用に、Windows ホスト (Xilinx SDK 2016.1 (Eclipse)、ツールチェーン "arm-linux-gnueabihf") からクロス コンパイルしています。 .
ホスト プラットフォームとターゲット プラットフォームの両方が示されています。
外部共有ライブラリを使用する手順は次のとおりです。ターゲット上でライブラリをダウンロード、構成、およびビルドし (ライブラリがターゲット上に既に存在する場合を除く)、インクルード ファイルとライブラリ (libabc.so.xyz) ファイルを別のプロジェクト ディレクトリにコピーします。 libabc.so.xyz の名前を abc.so に変更し、ライブラリ パスをプロジェクト ディレクトリに、ライブラリ名を abc に設定します (つまり、gcc ... -L<project dir> -labc)。
この手順を使用して、GLib (とりわけ) をプロジェクトに含めています。GLib (libglib.so) には GIO (libgio.so) が必要であり、GIO (libgio.so) には (とりわけ) ZLIB (libz.so) が必要です。
これらのライブラリはソースから構築されています: glib-2.48.1 (gio、gobject、および gmodule を含む)、libffi-3.2.1、zlib-1.2.8。その他は Ubuntu ディストリビューションのものです。
Windowsでクロスコンパイラを実行すると(Eclipseでは「Project | Build All」)、すべてが計画どおりに進みます-libgio-2.0.so、libglib-2.0.so、gobject-2.0.so、libffi.so、libgmodule- 2.0.so、libdl.so、libpcre.so、libresolv-2.19.so、および libz.so は、deflateSetHeader@ZLIB_1.2.2 および inflateGetHeader@ZLIB_1.2.2 を除くすべての外部参照を満たします。
readelf の出力 (上記を参照) は、libz.so で使用できる類似したシンボルを示していますが、同一ではありません。オンラインで検索しているときに同様の問題についていくつか言及されているのを見たことがありますが、解決策は常に ZLIB の古いバージョンを見つけることに関係しています - 私の開発環境では可能性はありません。
libgio と libz はどちらも広く使用されている確立されたライブラリです。これはバグではありませんよね?
私はアイデアがありません - 誰かがこれまたは似たようなことに遭遇しましたか?
[アップデート]
gcc バージョン 4.9.2 20140904 (プレリリース) (crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09)
リクエストに応じて、Eclipse によって出力されるコンパイラおよびリンカー コマンドの例を以下に示します。
xilinx - ザイリンクス CDMA のデバイスツリーでアドレス指定はどのように機能しますか?
バックグラウンド:
私がやりたいことは、ARM プロセッサから Zynq 7000 上の BRAM に書き込めるようにすることです。
これを行うには、次のコンポーネントがあります。
================================================== =======================
私の考えでは、このセットアップが行うべきことは次のとおりです。
ARM DMA エンジンからトランザクションが送信されると、Zynq は GP0 を使用してコマンドを CDMA コントローラーに送信します。
CDMA コントローラーは、そのスレーブ AXI_LITE ポートでコマンドを受信し、その要求を解釈して HP3 経由で RAM にアクセスします。
CDMA コントローラーは、M01_AXI の hp3 からトランザクション データを取得し、M00_AXI を介して BRAM コントローラーに送信するために、axi_mem_intercon を介してデータを移動します。
BRAM コントローラーは AXI-4 入力を受け取り、それを適切な BRAM ポートに変換して、blk_mem_gen_0 によって生成された BRAM にデータを書き込みます。
このアクションが完了すると、CDMA は sys_concat を介して割り込みを送信し、作業が完了したことを DMA エンジンに示します。
この hdl デザインを PL ファブリックにロードした後、カーネル モジュールを介してトランザクションを DMA エンジンに送信しようとしました。その結果、タイムアウトが発生し、DMA エンジンが明らかにタスクを完了していません。
================================================== =======================
問題を解明しようとする試みの中で、私は次の観察を行いました。
タイムアウトになる書き込みトランザクションを試みた後、同じ DMA チャネルに対して読み取りトランザクションを試みましたが、データを読み取るように構成されていました。返されるのは、書き込もうとしたすべてのデータです。これは、DMA エンジンがどこかに書き込みを行っているが、タスクの完了を認識していないことを示しているように思えます。
問題の BRAM はデュアル ポート RAM で、もう一方のポートは BRAM のデータを読み取り、LED をトグルしてデータを反映します。この書き込みトランザクションを試行しても LED がトグルしないため、DMA トランザクションが BRAM まで到達していないように見えます。
cat /proc/interrupts を見ると、いくつかの割り込みが表示されますが、GIC 87 は表示されません。前述のとおり、使用している割り込みラインは IRQ concat ブロックの入力 11 に接続されています。入力 12 への割り込みラインが実際に /proc/interrupts の GIC 88 に対応していることを確認できたので、どの割り込みを探しているかについての私の理解は正しいと思います。したがって、何らかの理由で、その割り込みがプロセッサに登録されていません。
================================================== =======================
これに基づいて、この CDMA の devicetree エントリが間違っていると思います。
Vivado では、Address Editor に次のエントリが表示されます (簡潔にするために一部のエントリは省略されています)。
devicetree エントリを書き込もうとする試みは次のとおりです。
Before I added this entry in my kernel module failed to even register a transaction channel, and now it does, so I am fairly certain that the kernel is accepting this entry at least enough to assign a DMA channel. However, I don't understand much about how exactly the devicetree works, specifically with the addressing, so there is a good chance I have written this incorrectly, and that is why my transaction doesn't succeed. Can anyone help me correct my design? }
embedded-linux - Xillinux でハードウェア SPI を有効にする
Xillinux 1.3 が実行されている MicroZed ボードがあります。外部 SPI ADC をそれに接続し、Linux でアプリケーションを作成して ADC から値を読み取りたいと考えていました。Zynq デバイスのハードウェア SPI インターフェイスが Xillinux で有効になっていません。FSBL と U-Boot を再コンパイルする必要がありますが、どこから始めればよいかわかりません。Xillinux の Vivado デザインを変更してそこから先に進むことはできますか、それとも最初からやり直す必要がありますか?
linux-device-driver - デバイスツリーのシンプルなフレームバッファ
デバイスで単純なフレームバッファをセットアップしようとしていますが、デバイス ツリーに問題があります。現在、ドキュメントにあるようにセットアップしています:
起動中に表示されるエラーは次のとおりです。
simplefb コードから、次の場合に失敗することがわかります。
いくつかのインターネット ソースは、IORESOURCE_MEM が reg プロパティであり、定義されているため、何が間違っている可能性があるかについて困惑しています。
c - レジスタに浮動小数点数を送る
私はSDK vivadoのCコードでソフトウェアを書いています。レジスタに書き込むためのこの関数があります
ご覧のとおり、この関数のパラメーターの 1 つは U32 であるデータであり、U32 の意味は次のとおりです。
レジスタに浮動小数点数を送信したい。
この数字 0.0807836fのように、私がしたことは、小数部分と小数部分を分離し、それらを異なるレジスタに送信することです.(次に、他の関数を使用してレジスタから読み取り、それらを連結することができます)
私の問題は、それらをレジスタに送信するときです。小数部分は807836 で、これは0807836が必要です。
私はこのコードを書きました:
この 0807836 のような小数部分を送信する方法を教えてください。
前もって感謝します
arm - ロード/ストア レジスタの結果がメモリ ビューアーとは異なる値になる
私はザイリンクスの QEMU ビルドで実行されるプログラムに取り組んでいます。この質問にはzynqというタグが付けられていますが、実際には QEMU の Zynq MP、特に Cortex-R5 をターゲットにしています。
私のバックグラウンドはマイクロコントローラーと Cortex-M にあるため、これは大きな飛躍であり、慣れていない多くの機能 (MPU、AXI、追加のキャッシュ) があります。ハード ペリフェラルの 1 つ (低電力ドメイン) のペリフェラル レジスタにアクセスするドライバを作成しています。reginsert
これらのレジスタのビットへのアクセスを簡素化するために、関数を作成しました。
まったくエキサイティングな機能ではありません。私にとって、それはまた簡単です。
私は次のように関数を呼び出します:
追加情報:
コードをステップ実行すると、この関数がレジスタのアドレスを として正しく計算する0xFF000000
ことがわかります。ザイリンクス SDK デバッガー (gdb ベース) で の値を表示すると、これを確認できますreg
。また、アセンブリをステップ実行すると、レジスタr3
に適切なアドレスが読み込まれていることがわかります。
実行が到達したとき:
分解には次のものがあります。
そして乗り込み0x00000000
ますr3
。0xFF000000
メモリ ビューを使用すると、 の値があることがわかります0x00000114
。変数ビューを見ると*reg
、同じ値 ( 0x00000114
) を持っていることがわかります。ローカル コピーがマスクされてから書き戻される行に進むと、次のような指示になります。
これを通り過ぎると、0x00000000
(正しい値ではありませんが) の値が書き込まれているはずですが、実際には (メモリまたは変数ビューを介して) 値が変更されていないことがわかります。これらのビューのいずれかで、値を手動で変更でき、正しく書き込まれます。
Zynq MP のバス アーキテクチャがこのビルドの QEMU でどの程度完全にエミュレートされているかはわかりませんが、シリコンにはデバッグ アクセス用とプロセッサ アクセス用に別々のメモリ ポートがあり、CPU を介してメモリにアクセスすることはありません。物事が異なってマッピングされる可能性。ただし、ザイリンクスのデモ コードは同じアクションを適切に実行します。
だから、私が試したことの要約:
- 逆アセンブリがレジスタの場所からロード/ストアする必要があることを確認します。
- 手順を実行して、周辺機器レジスタにアクセスするための CPU レジスタの値が正しいことを確認します。
- デバッガーを介して直接メモリと変数にアクセスしました。
- QEMU がペリフェラルをエミュレートすることをザイリンクス コードで確認します。
- MPU設定確認済み(領域は非共有、アクセス制限無し)
他に何を試せばいいのかわからず、基本的に困惑しています。QEMU は、少なくとも gdb インターフェイスを介して、ペリフェラル レジスタを適切にシミュレートしているように見えるので、CPU が読み書きするのはかなり簡単だと思います。QEMU を開発プラットフォームとして使用するなど、私にとって新しいことはたくさんあります。
real-time - freertosを使ってリアルタイムでデータを送る方法
私はコーディングの世界で本当に新しいので、あなたの助けが必要です. 次のことを行う必要があります: Zedboard プラットフォームでは、USB ポートからデータを取得し、リアルタイム パケットを作成して TCP 経由で送信したいと考えています。
そのために FreeRTOS を確立しました。UART からデータを取得し、サイクル バッファーに保持します。送信を開始するために Matlab から TCP コマンドを送信しますが、データのパケットは 1 つだけです。これをリアルタイムにする方法は?