empty_zero_page レイアウト (カーネルの視点) の要約 ( Hans Lermen と Martin Mares が収集しました ) 翻訳:JF プロジェクト 翻訳者:川崎 貴彦 校正協力者:早川 仁 empty_zero_page の内容は、カーネルの 16 ビットリアルモードのコードから 32 ビットモードのコードへパラメータを渡すために使用されます。 empty_zero_page の参照や設定は、主に以下のファイルでおこなっています。 arch/i386/boot/setup.S arch/i386/boot/video.S arch/i386/kernel/head.S arch/i386/kernel/setup.c オフセット タイプ 説明 ---------- --------------- ----------- 0 32 バイト struct screen_info, SCREEN_INFO 注目、あとに続くものをオーバーラップします !!! 2 unsigned short EXT_MEM_K, キロバイト単位の拡張メモリサイズ (int 0x15 より) 0x20 unsigned short CL_MAGIC, コマンドライン・マジックナンバー (=0xA33F) 0x22 unsigned short CL_OFFSET, コマンドライン・オフセット コマンドラインのアドレスは計算されます: 0x90000 + CL_OFFSET の内容 (CL_MAGIC = 0xA33F のときのみ行われます) 0x40 20 バイト struct apm_bios_info, APM_BIOS_INFO 0x80 16 バイト 割込みベクタ 0x41 による hd0 ディスクパラメータ 0x90 16 バイト 割込みベクタ 0x46 による hd1 ディスクパラメータ 0xa0 16 バイト 16 バイトに切り詰められたシステム記述テーブル ( struct sys_desc_table_struct ) 0xb0 - 0x1df 自由。本当に必要ならば、追加のパラメータをここに 置きます。 0x1e0 unsigned long ALT_MEM_K, もう一つのメモリチェック、キロバイト単位 0x1e8 char E820MAP 内のエントリ数 (下記参照) 0x1f1 char setup.S のサイズ、セクタ数 0x1f2 unsigned short MOUNT_ROOT_RDONLY (0 でないならば) 0x1f4 unsigned short (b)zImage ファイル内の圧縮カーネル部のサイズ (16 バイト単位、端数切上げ) 0x1f6 unsigned short swap_dev (私の知る限りでは使われていません) 0x1f8 unsigned short RAMDISK_FLAGS 0x1fa unsigned short VGA モード (古いもの) 0x1fc unsigned short ORIG_ROOT_DEV (高位=メジャー番号、 低位=マイナー番号) 0x1ff char AUX_DEVICE_INFO 0x200 セットアップコード開始位置へのショートジャンプ。別名は "予約" フィールドです。 0x202 4 バイト セットアップヘッダ用シグネチャ = "HdrS" 0x206 unsigned short ヘッダ形式のバージョン番号 現在のバージョンは 0x0201... 0x208 8 バイト (ブートローダとの通信用に setup.S により 使用されます。そこを見てください) 0x210 char LOADER_TYPE, = 0, 古いもの それ以外なら、ブートローダによってセットされます: 0xTV: T=0 は LILO 1 は Loadlin 2 は bootsect-loader 3 は SYSLINUX 4 は ETHERBOOT V = バージョン 0x211 char ロードフラグ: bit0 = 1: カーネルは高位にロードされる (bzImage) bit7 = 1: ブートローダによってセットされる ヒープ終端ポインタ (下記参照) 0x212 unsigned short (setup.S) 0x214 unsigned long KERNEL_START, ローダがカーネルをスタートさせた位置 0x218 unsigned long INITRD_START, ロードされた RAM ディスクイメージの アドレス 0x21c unsigned long INITRD_SIZE, バイト単位の RAM ディスクイメージの サイズ 0x220 4 バイト (setup.S) 0x224 unsigned short setup.S ヒープ終端ポインタ 0x2d0 - 0x600 E820MAP 0x800 文字列、最大 2K COMMAND_LINE, CL_OFFSET を使ってコピーされた コマンドライン 注意:これは、setup.c により、長さ 256 バイトのみの ローカルバッファにもう一度コピーされます。 ( #define COMMAND_LINE_SIZE 256 )