2013-07-12 65 views
5

Linuxカーネルをビルドすると、vmlinuxとvmlinux.oの2つのイメージが生成されます。両方ともサイズが異なっているようです(それぞれ113KBと198KB ...)。誰かがその違いについての洞察を提供できますか?vmlinuxとvmlinux.oの相違点

おかげで、

Vjの

+1

トップレベルのMakefileとビルドの出力を見ると、vmlinux.oはvmlinuxへの入力と思われます。 vmlinuxは、vmlinux-init、-main、.o、およびkallsyms.oをリンクして作成されます。 vmlinux:$(vmlinux-init)$(vmlinux-main)vmlinux.o $(kallsyms.o)FORCE –

+0

これが真実ならば(vmlinux.in vmlinuxへの入力です)、なぜvmlinuxのサイズはvmlinux.oよりも小さいのですか? : -/ – TheLoneJoker

+0

私は何かがvmlinuxにリンクされた後vmlinux.oから取り除かれたと思う。 –

答えて

4

画像は、Linuxのビルド時に生成し、アーキテクチャおよびターゲットによって異なります。この質問に記載されている2つのビルドターゲットのほかに、多くの中間ビルドターゲットがあります。おそらく学問的な目的を除いて、ほとんどは興味がありません。残念ながら、vmlinuxという名前のターゲットが複数あります。 vmlinux.oはそれほど興味深いものではありません。最上位のLinuxツリーには、vmlinuxと呼ばれるELFファイルがあります。

$ file vmlinux 

これがELFファイルであることを確認する必要があります。このファイルを直接起動するシステムはわかりません。このファイルが興味深いのは、デバッガが読むことができるデバッグシンボルが含まれているためです。実際のブートターゲットは、アーキテクチャに応じてサブディレクトリにあります。 x86の場合(私の専門知識ではないと思う)、bzImageというターゲットが見つかると思います。 ARMアーキテクチャでは、ブートzImage、ブートuImage(U-Bootブートローダが認識するヘッダにパッケージ化されたLinuxカーネルイメージ)などのシステムもありますが、U-Bootヘッダを削除してもイメージは合成イメージです。それはELFファイルではなく、純粋な.oなどではありません。カーネル構成情報、カーネル自体、ほぼ常に圧縮されたもの、そしてしばしば実行可能なコードを含むことができるいくつかのバイナリブロブの連結です。私はx86にはあまり慣れていませんが、そのアーキテクチャー上でさえ、カーネルブートイメージ(あなたがブートするもの)は純粋な.oファイルやELFファイルではない複数のコンポーネントを含む合成イメージ

カーネルを冗長モードでコンパイルしてから、 tch画像の操作方法を確認する最後のステップ。 verboseモードを有効にするには、V = 1を 'make'コマンドラインに追加します。

ハッピーハッキング!

+1

ありがとうございました...しかし、まだvmlinux.oの別のフォームvmlinux ... – TheLoneJoker

0

以下を試してください。

vmlinux.o
ファイルのvmlinux
ファイルのvmlinuxを用意する方法を見つけるためにあなたのメイクファイルを確認してください。これはいくつかの光を放つでしょう。
vmlinux.oはのvmlinuxを調製するために使用されている場合、のvmlinuxのサイズは、Linuxカーネルが構築されると、2枚の画像がのvmlinuxとvmlinux.oを生成している

1

vmlinux.oより大きくなければならないことは必要ではありません。

vmlinux.o:再配置可能オブジェクトファイル

のvmlinuxは:実行可能ファイルが

リンカーは、実行可能なオブジェクト・ファイルを生成するために、再配置可能オブジェクトファイルとコマンドライン引数を取ります。実行可能ファイルを生成するために、リンカはシンボル解決と再配置を実行する必要があります。

詳細については、vmlinux.oとvmlinuxで 'file'と 'readelf'コマンドを実行してください。

ルート@のbeaglebone:/ホーム#ファイルのvmlinux

のvmlinux:ELF 32ビットLSB実行、ARM、バージョン1(SYSV)、静的にリンクされ、BuildIDは[SHA1] = 0xdfd102a3c2b79fcc2f1949323dc54b9371c75608、

を剥離しませんルートの@ beaglebone:/ホーム#

ルートの@ beaglebone:

vmlinux.o vmlinux.o /ホーム#ファイル:取り除かないELF 32ビットLSB再配置可能な、ARM、バージョン1(SYSV)、

関連する問題