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 )
