arm_linux移植手記(一)-クロスツールチェーンコンパイル(下)


前文をコンパイルするのに数日かかりましたが、まだ分からないことがたくさんあります.ただ、参考の中ではそうです.そうしないと、多くの間違いを報告します.コンパイルの過程で、ダウンロードしたソースパッケージのヘルプドキュメントがまだ不便であることに気づいたのは、私が知らなかったからだろう.基礎がなくてまたコンパイルしたいのは先に前文の提供する参考を見ることができて、1つの理解があって、更に間違いにぶつかる時ここで調べることを待って、私はとても国外のあのCross-Compiled Linux From Scratchを推薦して、説明のとても詳しい全面、その上埋め込み式だけではなくて、ホームページの上でその他の方面も多くて、直接linuxがゼロから、よく見ることができます.このような中国語がなくて、ああ.........また話が遠くなって、本題に入りました.
  1.の準備を
まずソースパッケージについて説明します.binutils、gcc、glibcは多くありません.gmpとmpfrは初めてgccをコンパイルするときに必要です.glibc-portsはglibcをコンパイルするときに、直接解凍したディレクトリをglibcディレクトリにコピーし、portsに名前を変更すればいいです.このパッケージについては、glibcがarmをサポートできるようにすることです.なぜコアディレクトリに直接追加しないのかについては、私はそれを気にしないでください....補足ですが、コンパイルされたABIはEABIなのでtargetはarm-none-linux-gnueabiに設定されています.ネーミングはmakefileで見つけただけで、具体的な詳細リストを知りたい人はドキュメントを教えてください.
もとはずっとredhatの下でして、それからfedoraまでまだとても慣れて、突然debianを交換して、少し適応していないで、インストールした後に開発環境がなくて、すべて再び来なければならないので、“いくつかの必要なものをインストールします”があって、libncurses*これはカーネルをコンパイルするために必要です.とても便利で、これから使いすぎると慣れるかもしれません.
  2.問題の羅列
(1)binutilsのコンパイル
これは普通何の間違いもありません.もし次のような問題があったら.
make[2]: *** [info-recursive]    1
make[2]: Leaving directory `/opt/arm_linux/build-tools/build-binutils/build/bfd'
make[1]: *** [all-bfd]    2
make[1]: Leaving directory `/opt/arm_linux/build-tools/build-binutils/build'
は頭がぼんやりしているので、configureファイルのあるフォルダで直接コンパイルすべきです.
(2)カーネルヘッダファイルの生成
これは普通でも大丈夫です.
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[1]: *** [scripts/kconfig/dochecklxdialog]    1
は、libncurses*のインストールについて前述したとおりです.
(3)初コンパイルgcc
ここにはいくつかの間違いがあるかもしれません.
コンフィギュレーション(configure)
configureを実行するときは、configureと同じフォルダの下で、後ろのオプションをサボらないでください.そうしないと、どのライブラリが欠けているのか分かりません.また、gccを完全にコンパイルするにはglibcが必要ですが、あなたはまだglibcを持っていません.
コンパイル
make all-gcc all-target-libgccの使用
エラー1:
checking for gmp internal files... configure: error: header files gmp-impl.h and longlong.h not found
make: *** [configure-mpfr]    1
gmpが不足しています.コンフィギュレーションオプションのgmp、mpfrのディレクトリに-with-mpfr=$PREFIX--with-gmp=$PREFIXを追加するか、前述の参考文書で述べたように、私は成功しなかったので、直接インストールして追加しました.
エラー2:
../../../libgcc/../gcc/crtstuff.c: In function '__do_global_dtors_aux':
../../../libgcc/../gcc/crtstuff.c:301: error: '__DTOR_LIST__' undeclared (first use in this function)
../../../libgcc/../gcc/crtstuff.c:301: error: (Each undeclared identifier is reported only once
../../../libgcc/../gcc/crtstuff.c:301: error: for each function it appears in.)
make[1]: *** [crtbegin.o]    1
このエラーは少し遠いです.ここではEABIをコンパイルしているので、binutilsをコンパイルするときにtargetを設定していない場合はarm*-*-linux-gnueabi、gnueabiを追加していない場合は、ここで問題が発生します.もう一度、binutilsを配置するしかありません.
(3)glibcのコンパイル
コンフィギュレーション
きっとgccをコンパイルするのと同じで、configureファイルがあるフォルダの下で直接コンパイルする必要はありません.それからパラメータをサボらないでください.そうしないと同じです.
エラー1:
checking sysdep dirs... configure: error: The arm is not supported
この問題はglibc-portsをダウンロードする理由です.解凍したglibcportsを直接コピーしてglibcディレクトリにコピーし、portsと名前を変更します.次のエラーが発生する可能性があります.
エラー2:
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
ヒントを押して見ることができますが、私のここの問題はgccが見つからないことです.元のPATHのパスには新しいコンパイルされたbinディレクトリが欠けていて、$PREFIX/binを加えるといいです.libc_cv_forced_unwind=yes   libc_cv_c_cleanup=yesという2つの間違いは、みんなが見るとサボっていることに反応します.
コンパイル
エラー1:
checking whether the CFI directive .cfi_sections is supported... no
configure: error: need .cfi_sections in this configuration
このエラーは私は解決できません.たくさん検索しました.バージョンマッチングの問題だと言っています.バグ修正の問題だと言っています.どうせ新しいデバッグ特性ですから、私は起こしられません.隠れられませんか.いっそ私を使っていたglibc.2.12この特性のないglibc 2に置き換えた.11、良い解決方法があれば、伝言を残してください.
エラー:2
arm-none-linux-gnueabi/bin/ld: cannot find -lgcc_eh
collect2: ld returned 1 exit status
解決策1つはmakefileで-lgcc_を見つけることですehというオプションは、削除され、これは影響しません.また、libgcc_を確立するには、前述したようにeh.a libgccにリンクする.a 
(4)最後のgccをコンパイルする
ここまで来ると、ほとんど間違いはありませんが、makeの時、多くのヘッダファイルが見つからないことに気づきました.そして、cannot find/lib/libc.など、不思議な文法の間違いもあります.so.6 collect2
では、$PREFIX/arm-unknow-linux-gnueabiディレクトリのincludeとlibを削除し(なければ直接リンクを作成)、その上位層にリンクされたincludeとlibを再構築します.
最后に补充して、私は先に下のglibcで、それから中のREADMEを见て、gccのバージョンなどを探し当てて、みんなはどんな良い方法がマッチングのバージョンを探すことを知りませんか?前の文の中でそんなに多くパラメータを配置して、コンパイルして、その意味は何ですか、私は本当によく分かりません.また、前の文が参考にした文章の中で多くの解釈があって、よく调べて、后で私にも教えてくれます...