問題タブ [rtems]
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.
c++ - RTEMS ドライバー定義の配列セットアップ用の「初期化子が多すぎます」
バックグラウンド
RTEMS を使用しており、ネイティブ NFS クライアントをセットアップしようとしています。これを正しく含めましたが、ドライバーで使用できる動的ドライバー エントリが十分ではありません。詳細については、こちらをご覧ください。
実装
追加の動的ドライバーをセットアップするには、フリー ドライバーの大きなテーブルに NULL 要素を追加する必要があります。以下を参照してください。
基本的にこれが行っているのは、デバイス ドライバー テーブルの構築です...
deice ドライバーは次のようになります。
問題
非常に単純な問題は、これをビルドすると次のエラーが発生することです。
ここを見ると、不特定の数のテーブル要素を使用してコンパイルする際の問題のようです。私が理解していないのは、これが現在機能NULL_DRIVER_TABLE_ENTRY
しているということです.7秒(必要な数)を指定するNULL
と失敗しますが、6NULL
秒では完全に正常に動作しますか?
私が知る限り、このテーブルまたはその要素のサイズに関する定義はありませんか? 何か案は?
c - Eclipse でプロジェクトをビルド中にエラー 2
16:22:14 **** 構成のインクリメンタル ビルド プロジェクト ccsds-compression.git.old のデフォルト **** make all
'Building file: ../../src/AC_Coding.c' sparc-leon3-none -gcc.exe -c -O3 -pedantic -Wall -msoft-float -mcpu=v8 -mtune=leon -Wno-long-long -funroll-loops -fmessage-length=0 -std=c99 -I. -I....\src -o AC_Coding.o ../../src/AC_Coding.c process_begin: CreateProcess((null), sparc-leon3-none-gcc.exe -c -O3 -pedantic -Wall - msoft-float -mcpu=v8 -mtune=leon -Wno-long-long -funroll-loops -fmessage-length=0 -std=c99 -I. -I....\src -o AC_Coding.o ../ ../src/AC_Coding.c, ...) 失敗しました。make (e=2): 指定されたファイルが見つかりません。
make: *** [AC_Coding.o] エラー 2
プロジェクトのビルド時にこのエラーが発生します。これをどのように解決すればよいか、誰かが私を導くことができますか?
c - UbuntuでRTEMS RTOSをコンパイルし(インストールしていません)、そのリンカースクリプトを使用して単純なcプログラムを実行します
私のプロジェクトの一環として、ubuntu で RTEMS をコンパイルし、リンカー スクリプトにアクセスして単純な C プログラムを実行する必要があります。
主に、次の手ごわい最初の部分について助けが必要です: PART 1. Ubuntu で Rtems をコンパイルする (Rtems をインストールしない)。オペレーティング システムをインストールせずにコンパイルするにはどうすればよいですか?
どこから始めればよいですか?私は多くの場所でこれについて検索しようとしましたが、無知です。
Thing/si が試したこと:
1.rtems make
-4.6.2 ディレクトリで実行
2.広範囲にグーグルで検索-すべてがクロス開発環境でrtemをダウンロードすることにつながります。
どんなガイダンスでも大歓迎です。どうもありがとう。
python - Ubuntu 15.04 の RTEMS ビルドの失敗
ubuntu 15.04 で rtems 用の rsb をビルドしようとしましたが、python が原因で gdb のインストールに失敗しました。
$python --version
それはPython 2.7.10
私もインストールしました$sudo apt-get install python-all-dev
SOで見つけた1つの解決策は
Python をサポートする GDB をインストールできません。このソリューションを問題に統合する方法がわかりません。どんな助けでも大歓迎です。
rtems のエラー ログ:
c++ - `nfsInit` への未定義の参照
RTEMS 4.9.2
現在、NFS サーバーを .NET で実行されているコードに統合しようとしていますPOWER PC 5200
。これを簡潔に説明するのは難しいので、我慢してください。
RTEMS NFS
現在、RTEMS は nfs.c ファイルを介して NFS クライアントを実装しています。コマンド ライン インターフェースを有効にしてmount -t nfs ...
オプションを使用できるようにするには、設定ファイルに追加#define CONFIGURE_SHELL_MOUNT_NFS
し、rtems nfs ファイルを とリンクする必要があります-lnfs
。詳しくはこちらをご覧ください。これを正しく行うと、RTEMS nfs クライアントを実装でき、コマンド ラインからリモート ドライブをマウントできます。
RTEMS NFS クライアントを直接使用する
私たちのプログラムでは RTEMS コマンド ラインを公開していないので、nfs インターフェイスを直接使用できるようにしたいと考えています。RTEMS ライブラリにはlibrtemsNfs.h
、nfs クライアントを実装するための関数が含まれています。これらの関数の実装はnfs.c
、2 つのライブラリのうちの 1 つを作成するためにコンパイルされたものです。
libnfs.a
nfs.rel
ビルドには両方が必要です。コードの一部として、nfsInit(...
で宣言されlibrtemsNfs.h
、 で定義されている関数を使用していますnfs.c
。
エラー
したがって、エラーはかなり明白です。ビルドすると、リンカー エラーが発生します。
これらのライブラリをリンクしようとしています
これらをリンクするために、複数の方法を試しました。しかし、これをmakefile
誰にとっても簡単にするために、コマンドラインビルドで何が得られるかを示します. 私たちは試しました:
- 推奨される方法は、 -lnfs ( source - an old question ) とリンクすることです。これにより、長くて複雑なビルド コマンドが生成されます。
powerpc-rtems4.9-g++ -g -Wall -g -mcpu=603e -mstrict-align -meabi -msdata -fno-common ... -MANY_PREPROCESSOR_ARGUMENTS ... -MANY_INCLUDE_FILES ... Map=./exe/srvevp. map -lc -lm --gc-sections -lnfs -mcpu=603e -mstrict-align -meabi ... -MANY_OBJECT_FILES ... ./exe/obj/srvinit.o ... -MANY_MORE_OBJECT_FILES
コンパイルおよびリンク コマンドには-lnfs
、問題のあるオブジェクト ファイル ( srvinit.o
) を含める前に があります。しかし、まだリンカー エラーが発生します。
.a
and.rel
ファイルに直接パスでリンクしようとしました。/c/rtems-4.9/powerpc-rtems4.9/5200/lib/libnfs.a /c/rtems-4.9/powerpc-rtems4.9/5200/lib/nfs.rel
これを行うには、コマンド ラインに次を追加します。問題のあるオブジェクト ファイルの前後に追加しました。-L
パスによるリンクを強制するコマンドも試しました。これはすべて同じエラーになります。
その他の情報
これを説明するのは難しいですが、libnfs.a
ファイルの直接リンクを削除すると、nfs を直接使用しなくてもビルドできなくなります。すなわち。内部 RTEMS ファイルは相互にリンクできません。これは非常に奇妙です。コマンドラインオプションをビルドするだけでよいように思え-lnfs
ますが、このフラグがなくても正常にビルドされます。直接インクルードしないと、次のエラーが発生します。
リンクに失敗する rtems シェル コードはどれですか。/c/rtems-4.9/powerpc-rtems4.9/5200/lib/libnfs.a /c/rtems-4.9/powerpc-rtems4.9/5200/lib/nfs.rel
をビルド行の最後に追加すると、すべてが成功します。
繰り返しますが、nfs.a
と.rel
ファイルを直接含める必要があるコマンド ライン関数を構築するには、 -lnfs
.
質問
したがって、最初の最も明白な質問は、ライブラリファイルを明示的に指定した場合でも、なぜこれがリンクしないのですか? これについての私の考えは、おそらくファイルには、使用しようとしている関数の定義が含まれていないということです。しかし、RTEMS OS自体の機能をリンクする必要があるため、これは他の情報セクションで信用されていません。
PCやすべてのコンパイラがインストールされていないと再現できないため、これも直接的な答えを出すのが難しいことはわかっています.libファイルに関数の定義が含まれており、リンクされていることを確認するにはどうすればよいですか正しい順序で?このコンパイラは、RTEMS が Power PC 5200 用に提供する BSP 固有GCC
のスタイル コンパイラです。GCC/G++ 4.2 が受け入れるほとんどのコンパイラ オプションを受け入れます。
最後に、このようなリンカの問題をデバッグするための良い方法はありますか? .
c - RTEMS DMA でアクセス可能なメモリを取得する方法
Linuxから移植して、イーサネットカード用のRTEMSドライバーを実装しています。ほとんどの作業が完了し、プロセッサ IO モードは正常に動作し、割り込み処理も行われています。現在、DMA の実装に問題があります。
具体的には、私がベースとして使用している Linux ドライバーでは、関数 dma_alloc_coherent() が使用されています。この関数は 2 つの異なるアドレスを返します。1 つはドライバー コード (ホスト CPU) が参照するアドレスで、もう 1 つはカードが DMA 中に PCI 経由で同じメモリ領域にアクセスするために使用するアドレスです。
適切な代替関数を見つけるのに問題があります。最初に malloc() を使用し、次に pci_pci2cpu を使用してこのアドレスを 1 つのカードがアクセスできるアドレスに変換することを考えましたが、pci_pci2cpu は IO に対して 0xFFFFFFFF を返し、残りの 2 つのモードに対して 0x0 を返します。
私が検討した2番目のアプローチは、デュアルポートメモリマネージャーを使用することですが、その使用法の有用な例が見つかりません。たとえば、rtems_port_create() 関数にはポインター *internal_start と *external_start を指定する必要がありますが、このポインターがどこから来ているのかわかりません。
Gaisler RTEMS バージョン 4.11 と Sparc アーキテクチャ (LEON3 cpu) を使用しています。
ベスト、イヴァン
c - コンパイル時に .txt 情報を格納する .c ソース ファイルを持つ
私は C を使用して、特定のターゲット (より具体的には LEON プロセッサ) 用の RTEMS アプリケーションを作成しています。
inputs.c
さまざまなチュートリアルを行っているときに、シミュレーションの .txt ファイルを読み込むことができないため、解決策は、さまざまな 512x512 グローバル入力行列を保持する.c ソース ファイル (と呼びましょう) を用意し、それらを内部で参照することであることに気づきましextern
た。main
ファイル。
この手順に関する情報を探していますが、見つかりませんでした。
私の質問:例のドキュメントでは、ある時点でグローバル マトリックスをinputs.c
PC から UART 経由でターゲットに転送すると述べています。inputs.c
このファイルは、他のすべての .c ファイルと同様に LEON プロセッサにロードされていませんか?