カーネルイメージのビルドとフォーマットとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > カーネルイメージのビルドとフォーマットの意味・解説 

カーネルイメージのビルドとフォーマット

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/24 16:01 UTC 版)

vmlinux」の記事における「カーネルイメージのビルドとフォーマット」の解説

Linuxカーネルイメージは通常Linuxカーネルソースのディレクトリもしくはオプション指定し最終生成物出力するディレクトリ)において次のコマンド実行することで得られるmake 現行のバージョン2.6では、アーキテクチャによって、このとき暗黙のうちに指定されるターゲット異なる。例えx86i386ならびにx86-64アーキテクチャにおいては暗黙のうちに make bzImage指定されている。これはbzImage生成せよとの指令発行したことになる。正常にビルドが進むと、端末エミュレータに以下のように表示される(以下、i386ターゲットとしたバージョン2.6.38-rc2のビルドより一部抜粋したビルドプロセスリリース毎、アーキテクチャ毎に多岐に渡るため、この環境での説明限定する)。 [... ビルドプロセス("表示"をクリックしてください。) ...] ... CC init/calibrate.o LD init/built-in.o ... AR arch/x86/lib/lib.a LD vmlinux.o MODPOST vmlinux.o ... LD .tmp_vmlinux1 KSYM .tmp_kallsyms1.S AS .tmp_kallsyms1.o LD .tmp_vmlinux2 KSYM .tmp_kallsyms2.S AS .tmp_kallsyms2.o ... LD vmlinux SYSMAP System.map SYSMAP .tmp_System.map CC arch/x86/boot/a20.o ... CC arch/x86/boot/edd.o VOFFSET arch/x86/boot/voffset.h LDS arch/x86/boot/compressed/vmlinux.lds AS arch/x86/boot/compressed/head_32.o CC arch/x86/boot/compressed/misc.o CC arch/x86/boot/compressed/string.o CC arch/x86/boot/compressed/cmdline.o CC arch/x86/boot/compressed/early_serial_console.o OBJCOPY arch/x86/boot/compressed/vmlinux.bin HOSTCC arch/x86/boot/compressed/relocs RELOCS arch/x86/boot/compressed/vmlinux.relocs GZIP arch/x86/boot/compressed/vmlinux.bin.gz HOSTCC arch/x86/boot/compressed/mkpiggy MKPIGGY arch/x86/boot/compressed/piggy.S AS arch/x86/boot/compressed/piggy.o LD arch/x86/boot/compressed/vmlinux ZOFFSET arch/x86/boot/zoffset.h AS arch/x86/boot/header.o ... CC arch/x86/boot/video-bios.o LD arch/x86/boot/setup.elf OBJCOPY arch/x86/boot/setup.bin OBJCOPY arch/x86/boot/vmlinux.bin HOSTCC arch/x86/boot/tools/build BUILD arch/x86/boot/bzImageRoot device is (8, 3)Setup is 15068 bytes (padded to 15360 bytes).System is 2828 kBCRC 5051e6e4Kernel: arch/x86/boot/bzImage is ready (#1) カーネル静的リンクされる全てのオブジェクトコードはvmlinux.oにリンクされる。これとは別に全てのオブジェクトファイルからシンボルのみを取り出し単一ELFセクションヘッダとして保持するオブジェクトコード.tmp_kallsyms2.o(数字はカーネルコンフィグレーションにより異なる)が生成される。この2つファイルリンクしたものが本記事対象とする実行ファイルvmlinuxである。続いてこのファイルnmコマンドをかけ、シンボルテーブルSystem.mapファイル生成する(.tmp_System.mapは比較検査のため生成する)。続いて圧縮ルーチン含めたカーネルイメージのブートルーチンビルド開始される。 (以下、x86アーキテクチャにおいて$(BITS)はビット数に読み替えてほしい) カーネル圧縮カーネルイメージの伸長などに関するソースコードはarch/x86/boot/compressedに存在する。 arch/x86/boot/compressed/head_$(BITS).oはカーネルイメージのメモリアドレス前方位置しBIOSから得た低レベルハードウェア情報処理するためのコードである。詳細ソースコードのarch/x86/boot/compressed/head_$(BITS).Sやそのエントリポイントstartup_$(BITS)、リンカスクリプトなどを参照せよ。 arch/x86/boot/compressed/misc.oは後方位置するカーネル本体を含むコードzlibなどのアルゴリズム用いて伸長するコードである。有名なUncompressing Linux...というコンソール表示はこの処理において見られる実際の処理はアーキテクチャ毎に様々で、BIOS起動直後システム認識可能なメモリアドレス制限のため、段階的に複雑なメモリ配置行いこれを実現している。詳しくは、arch/x86/boot/compressed/misc.cのdecompress_kernelなどのキーワードを参考処理内容見てほしい)。 head_$(BITS).o, misc.oその他カーネルイメージの伸長後に利用する低レベルコードビルドし終わると、piggy.oというオブジェクトコード一緒にリンクされ、arch/x86/boot/compressed/vmlinuxという実行ファイル生成する(このファイルは本記事説明対象としているvmlinuxではないことに注意せよ)。piggy.oは次のようなプロセスをたどり生成されるディレクトリトップにあるvmlinuxは、GNU Binutilsにより配布されるobjcopyコマンド利用し、.commentなど不要なELFセクションヘッダシンボル情報全て削除されたうえで実行ファイルarch/x86/boot/compressed/vmlinux.binに変換される。このファイル圧縮をかけ更に専用ツール用いて、vmlinux.bin.gz(圧縮アルゴリズムにより拡張子異なる)をELFセクションヘッダ埋め込んだ特殊なELFオブジェクトファイル生成される。これがpiggy.oである(詳しくはarch/x86/boot/compressed/Makefileを参照せよ)。 この後ブート用の低レベルコードビルドが続く。カーネルブートに関するコード前述圧縮伸長コード含め、arch/x86/bootに存在する。 arch/x86/boot/header.oはカーネルイメージの先頭メモリアドレス存在するコードである。エントリーポイント_startから開始されるこのコードにより前述した伸長ルーチン後ほど呼び出す。 このコード以前リリースにおける、2つコードbootsect.o、setup.oの一部抜きだし、再構成したものである。ちなみにbootsect.oはフロッピーディスク用のダイレクトブート用コードであったバージョン2.6では、header.Sの一部にダイレクトブートできない旨のメッセージ表示するコードのみ残っているに過ぎない。setup.oの残部細かく分けられ一部前述のhead_$(BITS).oにも含まれている。 このオブジェクトファイル含めビデオBIOS用処理などの低レベルコードがarch/x86/boot/setup.elfという実行ファイルとしてリンクされるここまで正常に終了したならば、bzImage完成目前となる。arch/x86/boot/setup.elfとarch/x86/boot/compressed/vmlinuxはobjcopyコマンド特殊なオプションによりそれぞれELFバイナリからrawバイナリ(「生バイナリ」とも。リロケーション情報削除しメモリ上に直接展開・実行可能なコード詳細はobjcopyのマニュアルまたはInfoドキュメント参照せよ)arch/x86/boot/setup.binとarch/x86/boot/vmlinux.binに変換される。この二つをカーネルビルド時にしか使われない専用ツール結合すると、arch/x86/boot/bzImageが完成するビルド終了メッセージの意味次の通りである。"Root device is (8, 3)"、これはルートディレクトリマウントされているファイルシステムメジャー番号8番、マイナー番号3番デバイスファイル参照)にあることを予めカーネルイメージに埋め込んだことを示す(ルートファイルシステムブートローダ指定されていない場合デフォルト使用される)。すなわちこれはSCSIディスク第一番目のディスク先頭第3パーティション(/dev/sda3)にルートファイルシステムがあることを示す。次の2行はカーネルイメージのデータサイズを示している。CPUリアルモード状態のときに使用されるセットアップコード("Setup")は、セクタサイズにきれいに収めるため、512倍数となる15360バイトパディングされたことを通知している。"System"はカーネル本体を含むコードでこの場合1MBをゆうに越え、2828kBとなっている。続いてイメージCRC検出され、これが初回(#1)のビルドであることを通知しビルドプロセス終了する。 以上よりbzImageファイル特殊なバイナリフォーマットを持っている: すなわち、主に次のデータ連結し構成されていることが分かるbzImage = setup.bin + vmlinux.bin setup.bin <---(raw binary)--- setup.elf <--- header.o + main.o + more... vmlinux.bin <---(raw binary)--- head_(BITS).o + misc.o + more... + piggy.o piggy.o <---(compressed + embedded)--- vmlinux <--- vmlinux.o + .tmp_kallsyms2.o <--- *.o *.a `| System.map

※この「カーネルイメージのビルドとフォーマット」の解説は、「vmlinux」の解説の一部です。
「カーネルイメージのビルドとフォーマット」を含む「vmlinux」の記事については、「vmlinux」の概要を参照ください。

ウィキペディア小見出し辞書の「カーネルイメージのビルドとフォーマット」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「カーネルイメージのビルドとフォーマット」の関連用語

1
8% |||||

カーネルイメージのビルドとフォーマットのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



カーネルイメージのビルドとフォーマットのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのvmlinux (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS