arm-linux-xxx でカーネルをビルドし、arm-elf-xxx でユーザー アプリをビルドする uClinux システムを見ています。
アプリが Linux で実行されることを意図している場合は、すべてを arm-linux-xxx でビルドする方がよいのではないでしょうか?
全体的なuClinuxビルド構成でそのオプションをどこに設定しますか?
arm-linux-xxx でカーネルをビルドし、arm-elf-xxx でユーザー アプリをビルドする uClinux システムを見ています。
アプリが Linux で実行されることを意図している場合は、すべてを arm-linux-xxx でビルドする方がよいのではないでしょうか?
全体的なuClinuxビルド構成でそのオプションをどこに設定しますか?
実行arm-linux-gcc -v
しarm-elf-gcc -v
て、これら2つのバージョンのgcc(ターゲットアーキテクチャ/言語など)の違いを確認できます。
コンパイラの名前は必ずしも何も意味しません。誰がコンパイラを構築したか(そしてそれらに名前を付けたか)に応じて、異なる結果が得られます。おそらく、特定の構成には正しい名前がありますが、ランダムにコンパイルされたgccの中には正しくないものもあります。
CodeSourceryコンパイラ(おそらく最も正しい名前)については、プラットフォームのページで名前の意味を確認してください。
違いは、arm-elf-xxx ツールチェーンからのリンクされた出力が Linux でロード可能なバイナリであるのに対し、arm-linux-xxx はカーネル オブジェクト (ko) を出力することです。これは、独自のリンケージ形式 (モジュール用) を持つ blob です。パッケージ形式を必要としないメインカーネル自体。つまり、ユーザー空間では、最終的に動的にリンクされたオブジェクトを ELF 実行可能ファイル、ライブラリ、または共有オブジェクトにする必要があります。カーネル スペースの場合、最終的なオブジェクト (カーネルまたはモジュール) を linux-arm-kernel リンケージ形式にする必要があります。
両方のターゲットの中間オブジェクト (.o ファイル) はおそらくすべて ELF であることがわかります。これは、ツールチェーンが想定していることだからです。
ある時点で、真ん中のビットは問題ではなかったことを覚えているようです。すでに述べたように、elf は標準のファイル形式であるため、とにかくそれを使用したいと考えており、バイナリ名とは無関係にそれを取得します。さらに重要な (または重要でない) のは呼び出し規約です。共有ライブラリ関数を呼び出すときに、呼び出し規約を一致させる必要があるかどうか、または別の場所で処理されるかどうかはわかりません。
ELF はバイナリ形式のlinux であり、他の多くの人が使用します。
ELF 形式は、Linux、Solaris、IRIX、FreeBSD、NetBSD、OpenBSD、DragonFly BSD、Syllable、および HP-UX (32- SOM を引き続き使用する PA-RISC プログラム)。ELF は、OpenVMS の Itanium バージョンや、x86 ベースのコンピューター用の BeOS リビジョン 4 以降など、Unix 以外のオペレーティング システムでも採用されています (Portable Executable フォーマットに取って代わりました。PowerPC バージョンは、Preferred Executable Format のままでした)。PlayStation Portable、PlayStation 2、PlayStation 3、Wii、および GP2X コンソールも ELF を使用します。AmigaOS 4 と MorphOS も PowerPC マシンで実行され、ELF を使用します。Amiga プラットフォームでは、PPC プロセッサ拡張カードを搭載した Amiga で使用されていた以前の EHF (Extended Hunk Format) が ELF 実行可能ファイルに置き換えられました。Symbian OS v9 は、ELF ファイル形式に基づく E32Image[3] 形式を使用します。
ほとんどの Sony Ericsson (たとえば、W800i、W610、K790 など)、一部の Siemens (SGOLD および SGOLD2 プラットフォーム: Siemens C65 から S75 および BenQ-Siemens E71/EL71)、および Motorola (たとえば、E398、SLVR L7) 、v360、v3i、およびパッチが適用されるすべての電話 LTE2) 電話は、アセンブリ コードをメイン ファームウェアに追加するパッチを使用して ELF ファイルを実行できます (地下改造文化では ELFPack として知られています)。
この場合、sparc-elf-gcc を使用して Linux をビルドし、sparc-..-linux-gcc を使用して busybox (Linux 上で実行されるアプリケーション) をビルドします。これは正しいと思いますが、その逆ではありません。