問題タブ [eabi]
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.
gcc - arm-elf または arm-none-eabi としての arm gcc ツールチェーンの違いは何ですか?
gcc ツールチェーンをビルドする場合、arm-elf または arm-none-eabi としてビルドする可能性がありますが、違いは何ですか?
私は今日eabiを使用していますが、それは他の人がそうしているように見えるからです.
注: このツールチェーンは、stm32 のような Cortex-M3 ベースの mcu:s のコードをクロスコンパイルします。
ありがとう
いくつかのリンク:
えび:
- http://en.wikipedia.org/wiki/Application_binary_interface
- http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html
妖精:
android - armeabi および armeabi-v7a フォルダー
私は Android プロジェクトに取り組んでおり、NDK を使用してネイティブ メソッドを呼び出しています。2 つのライブラリ (.so ファイル) があり、1 つはlibs/armeabi
フォルダーにあり、もう 1 つはlibs/armeabi-v7a
lib フォルダーにあります。
アプリケーションを実行しようとすると、/libs/armeabi
フォルダーにライブラリが読み込まれません。ライブラリ ファイルをlibs/armeabi-v7a
フォルダに移動すると、ライブラリが読み込まれますが、5 ~ 10 分後にクラッシュし、セグメンテーション違反エラーが発生します。
ライブラリの場所 (別のフォルダー) がこの問題を引き起こすのではないかと思っていました。
android - AndroidでのARM EABI v7aシステムイメージの使用は何ですか?
Android 開発で ARM EABI v7a システム イメージは何のために必要ですか? その特定の画像の目的は何ですか?
arm - ARM ABI と EABI の目的は何ですか?
この PDF ( Application Binary Interface for the ARM Architecture: The Base Standard ) を見れば見るほど、その意味がわかりません。また、 Procedure Call Standard for the ARM ArchitectureとELF for the ARM Architectureについてコメントをお願いします。
gnu - Powerpc gnu eabi レジスタの初期化
codesourcery gnu powerpc eabi lite ツールチェーンを使用してコンパイルし、USB JTAG TAP を使用して powerPC ターゲットにロードする最小限のベア メタル アプリケーションを作成しました。アプリケーションは、ハードウェアの構成と eabi のレジスタのセットアップに使用されるアセンブリ ファイル、無限ループを含む main.c ファイル、リンカー スクリプト、および Makefile から作成されます。
powerpc のスタートアップ コード、eabi のレジスタの初期化、およびリンカー スクリプトを作成するための gnu リンカーに関する多くのドキュメントを見つけたので、詳しく調べてみました。
メインに到達するまで、アプリケーションをコンパイルして実行します。私が抱えている問題は、アセンブリ ルーチンが完了し、rfi が実行されたときに、PC が期待どおりに main() に移行することです。ただし、main の最初の命令 (lis r9, 0) を実行すると、例外 0x700 (無効な命令または fp 例外) が発生します。
アセンブリ ルーチンには当初、L1 データおよび命令キャッシュを無効にして無効にし、L1 命令キャッシュのみを有効にするコードが含まれていました。そのコードの一部が間違っているのではないかと疑って、その多くを削除し、最低限のものだけにしました。
C ランタイムの初期化ステップが欠落している可能性はありますか? 他のアイデアはありますか?事前にご協力いただきありがとうございます。
アセンブリ コードは、次のもののみで構成されるようになりました。
リンカー スクリプトは次のとおりです。
qt - Qt Arm リモート デバッグ
私はLPC1768に取り組んでいます。qt Creator で arm-none-eabi-gdb を使用して test_ram.elf ファイルをデバッグしたいと考えています。http://www.yagarto.de/download/yagarto/LPC1768Test.zipからテストするコードをダウンロードしました
残念ながら、リモート デバッグを処理できませんでした。j-link gdbserver を使用してデバッグしたい。
私は試してみました Debug->Start Debugging->Attach to Remote debug server And
上記の設定を行った後、次の警告が表示されました。
タイプ 'unknown-unknown-unknown-unknown-unknown' のバイナリをデバッグするための優先デバッガ エンジンは利用できません。デバッガー エンジン 'Gdb エンジン' がフォールバックとして使用されます。詳細: CDB デバッグ エンジンは、unknown-unknown-unknown-unknown-unknown ABI をサポートしていません。
前もって感謝します
gcc - arm-eabiとarm-elfを混在させることはできますか?
「arm-elf」を生成するコンパイラ(gnuarm GCC 4.1.1)を使用してブートローダーとアプリケーションをコンパイルする製品があります。
ブートローダーとアプリケーションは、リンカースクリプトの異なるフラッシュメモリ領域に分離されています。
このアプリケーションには、ブートローダーを呼び出すことができる機能があります(2つのパラメーターを持つ単純なc関数として)。
世界中の既存の製品をアップグレードできる必要があります。これは、常に同じコンパイラを使用して安全に行うことができます。
ここで、arm-eabiを出力する新しいGCCバージョンを使用してこの製品アプリケーションをコンパイルできるようにしたいと思います。
アプリケーションとブートローダーの両方が同じツールチェーンを使用してコンパイルされる新製品ではすべて問題ありませんが、既存の製品はどうなりますか?GCC 4.6.xとarm-none-eabiでコンパイルされた新しいアプリケーションをフラッシュした場合でも、アプリケーションは古いarm-elfブートローダーからブートローダー関数を呼び出すことができますか?
さらに、上記の質問とは直接関係ありませんが、arm-elfでコンパイルされたオブジェクトファイルをarm-eabiでコンパイルされたバイナリに混合できますか?
編集:
何か違いがあれば、ベアメタルARM7用に構築していることを明確にするのは良いことだと思います...
gcc - LinuxカーネルをARM-EABI用にコンパイルしますが、4バイトのラージタイプアラインメントを使用しますか?
デフォルトでは、大きなタイプ(4バイトより大きい)はEABIで8バイトにアラインされます。これは、function(u32, u64)
が呼び出されると、u32がにr0
なり、u64がとに分割されr2
て未使用r3
のままになることを意味します。r1
代わりに、コンパイラに4バイトにアラインさせるにはどうすればよいですか?私はこれ(ABIを壊す)などの結果を理解していますが、私は本当に気にしません。カーネル構成でOABIを有効にすると、ARMv7のサポートが無効になるため、OABIの使用を提案しないでください。
4バイトのアラインメントでは、u32は引き続き使用されますr0
が、u64はとの間で分割されr1
ますr2
。
arm - ARM EABI ツールチェーン
今日、ARM ツールチェーン EABI (クロスコンパイラ) で奇妙な問題に直面しました。
この問題は、浮動小数点値を string に変換するために snwprintf() を使用しようとしたときに、渡した実際の浮動小数点値を持たないジャンク文字列を取得していたことです。
サンプルコードは次のようになります。
その後、snwprintf をデバッグしたところ、可変引数リスト (va_arg) が正確なデータ値を指していないことがわかりました。そして、メモリをダンプすることで、可変引数リストに存在する正確なデータを見つけることができました。va_arg が指すデータが異なります。
統合値が正常に機能しているため、これはエンディアンの問題ではないと思います。問題は double 値のみです。
誰でもこの問題で私を助けることができますか?
arm - ARMEABI浮動小数点の問題
私のARM9コードには、varargsを使用するデータ変換関数があります。私は数年前からarm-elfyagartoディストリビューションを問題なく使用しています。最近、yagartoサイトからarm-eabi-none yagartoパッケージにアップグレードしましたが、浮動小数点値に問題があることがわかりました。私が最終的に発見したのは、doubleが8バイト境界に強制されており、既存のvarargs浮動小数点ハンドラーがargsにギャップを見つけることを予期していなかったことです。
ポインタを手動でチェックして、8バイト境界まで強制することはできますが(実際、これを実行すると、問題は完全に修正されました)、なぜこれが突然発生し始めたのかを知りたいです。
スタック上、関数呼び出し、またはそのようなものでデータアライメントを指定するコンパイラスイッチはありますか?また、32ビット(4バイト)アーキテクチャでデフォルトで8バイト境界になっているのはなぜですか?
これらの問題について誰もが提供できるアドバイスや洞察をいただければ幸いです。
コードは単純です:
使用していたGCCのバージョンは4.7.1です。
コンパイルオプション: