KGZIP(8)

名称
kgzip - カーネルを圧縮する

書式
kgzip [-cv] [-f format] [-l loader] [-o output] file

解説
kgzip ユーティリテイは、カーネルその他のブート可能バイナリを圧縮します。この 動作は次の 2 つのフェーズからなります。

1.  実行可能ファイルのロードイメージは、 ‘text’ セグメントと ‘data’ セグメント以外のすべてを省略して作成されます。 このイメージを gzip(1) を用いて圧縮し、 再配置可能なオブジェクト形式として出力します。

2.  出力されるオブジェクトファイルは、特殊な自立ローダとともにリンクされ、 第 2 レベルもしくは第 3 レベルのブートストラッププログラムによるブートに 適した実行ファイルが生成されます。

サポートする入力ファイルは 32 ビット ELF と a.out ZMAGIC の形式です。

file オペランドが ‘.o’ 接尾子を持つ場合、入力はリンクフェーズにあると見なされ、最初のフェーズは 省略されます。

オプションは次のとおりです。

-c  リンクフェーズを省略します。

-v  オブジェクトファイル情報を表示します。

-f format
    出力形式に format を使用します。 format は ‘aout’ または ‘elf’ です。デフォルトの形式は ELF です。

-l loader
    loader をローダとしてリンクします。

-o output
    出力ファイルの名前を output とします。 デフォルトの名前は、(再配置可能形式については) 入力ファイル名の接尾子を ‘.o’ にしたものです。または、(実行可能形式については) 入力ファイルの接尾子を ‘.kgz’ にしたものです。

注
以下と等価な大域変数が出力の中で定義されます。

    struct kgz_hdr {
        char	ident[4];	/* 識別子: "KGZ" */
        uint32_t	dload;		/* デコードされたイメージのロードアドレス */
        uint32_t	dsize;		/* デコードされたイメージの大きさ */
        uint32_t	isize;		/* メモリ中のイメージの大きさ */
        uint32_t	entry;		/* エントリポイント */
        uint32_t	nsize;		/* エンコードされたイメージの大きさ */
     } kgz;
    uint8_t kgz_ndata[];		/* エンコードされたデータ */

エンコードされたデータは、単に gzip(1) の出力です。ヘッダ (オプションフィールドは一切持ちません)、圧縮された データ、32 ビットの CRC とサイズの値を持ちます。

関連ファイル
/usr/lib/kgzldr.o
    デフォルトのローダ。

関連項目
gzip(1), ld(1), a.out(5), elf(5), boot(8), loader(8)

診断

作者
Robert Nordier <rnordier@FreeBSD.org>

バグ
シンボル情報は失われていますので、カーネルの圧縮にこのユーティリティを 使う利点は、 loader(8) が使用できない状況に限られます。それ以外の場合、単に gzip(1) を使ってカーネルを圧縮する方が望ましいでしょう。