EN JA
GEOM_MAP(4)
GEOM_MAP(4) FreeBSD Kernel Interfaces Manual GEOM_MAP(4)

名称

geom_map個別のパーティションとして定義された項目をマップする GEOM モジュール

書式

このドライバをカーネルにコンパイルするためには、次の行を利用者のカーネル設定ファイルに置きます:

device geom_map

解説

geom_map フレームワークは、メディアの定義された部分をマップするサポートを行います。基本的に、連続してフラッシュするものが、ローダ、カーネルと rootfs の部品である組み込みのデバイスで役立っています。 geom_map によって、それらを、個別の部品として利用可能とし、上書きからローダを保護することができます。

ブート時に、 geom_map パーティションは、(単に bootverbose で) 次のようにリストされます:

MAP: 0x30000, data=0x30000 "/dev/map/bootloader" 
MAP: 30000x10000, data=0x10000 "/dev/map/factory" 
MAP: 40000x7a0000, data=0x7a0000 "/dev/map/upgrade" 
MAP: search key ".!/bin/sh" from 0x100000, step 0x10000 
MAP: 40000x110000, data=0x110000 "/dev/map/kernel" 
MAP: search key ".!/bin/sh" from 0x100000, step 0x10000 
MAP: 150000x690000, data=0x690000 "/dev/map/rootfs" 
MAP: 7e0000x20000, data=0x20000 "/dev/map/config"

次の sysctl(8) ノードで現在の geom_map 設定にアクセスすることができます: kern.geom.conftxt, kern.geom.confxmlkern.geom.confdot または“ geom map list”を使用することによって。

# sysctl -n kern.geom.conftxt 
0 MD md0 10485760 512 u 0 s 512 f 0 fs 0 l 10485760 t malloc 
0 DISK cfid0 8388608 4 hd 0 sc 0 
1 MAP map/config 131072 4 i 5 o 8257536 entry 0 dsize 131072 
1 MAP map/rootfs 6881280 4 i 4 o 1376256 entry 0 dsize 6881280 
2 UNCOMPRESS map/rootfs.uncompress 18677760 512 
1 MAP map/kernel 1114112 4 i 3 o 262144 entry 0 dsize 1114112 
1 MAP map/upgrade 7995392 4 i 2 o 262144 entry 0 dsize 7995392 
1 MAP map/factory 65536 4 i 1 o 196608 entry 0 dsize 65536 
1 MAP map/bootloader 196608 4 i 0 o 0 entry 0 dsize 196608

device.hints(5) でドライバの設定を行うことができます。使われているパラメータのリストは、次の通りです:

at
アタッチするメディアを選択します。
name
(デバイス /dev/map/ that_name を作成する) パーティションの名前。
start
マップされたパーティションを始める親メディアの始まりからのオフセット。また、このフィールドは、次のような特別な値“ search: searchstart : searchstep : searchkey”を持つことができます:
searchstart
検索が始められる親メディアの始まりからのオフセット。
searchstep
パーティションの境界マーカを捜している間に使用される増分の値。
searchkey
パーティションの境界マーカを見つけるために使用されるキー。その位置で任意の文字とマッチするために、ワイルドカード‘ .’文字を使用することができます。
end
マップされたパーティションを終わる親メディアの始まりからのオフセット。また、このフィールドは、上記で説明されているように、特別な値“ search: searchstart : searchstep : searchkey”を持つことができます。
offset
マップしているパーティションのデータが始まるオフセット。

各レコードは、メディアの始まりからの開始アドレス (バイト単位)、サイズ (バイト単位)、マップされたパーティションのデータが始まるオフセットと新しいデバイスの名前を含んでいます。

MAP: 150000x690000, data=0x690000 "/dev/map/rootfs"

00150000 - 開始アドレス 
00690000 - サイズ 
00000000 - 0 オフセットから始まるデータ 
00690000 - データサイズ 
"map/rootfs" - 新しいメディアは、/dev/map/rootfs dev を通してアクセス可能となります.

使用例

上記に示されていたレイアウトを実装する必要があるなら、次のヒントを定義する必要があります:

hint.map.0.at="cfid0" 
hint.map.0.start=0x00000000 
hint.map.0.end=0x00030000 
hint.map.0.name="bootloader" 
hint.map.0.readonly=1

これは、 0x00000000 で始まり、 0x00030000 で終り、また、読み込み専用としてマークされるディスク cfid0 において /dev/map/bootloader を定義します。

hint.map.1.at="cfid0" 
hint.map.1.start=0x00030000 
hint.map.1.end=0x00040000 
hint.map.1.name="factory" 
 
hint.map.2.at="cfid0" 
hint.map.2.start=0x00040000 
hint.map.2.end=0x007e0000 
hint.map.2.name="upgrade" 
 
hint.map.3.at="cfid0" 
hint.map.3.name="kernel" 
hint.map.3.start=0x00040000 
hint.map.3.end="search:0x00100000:0x10000:.!/bin/sh"

これは、 0x00040000 で始まるディスク cfid0 において /dev/map/kernel を定義しますが、終わりの位置は、オフセット 0x00100000 からステップ 0x10000 でメディアの終わりまで、キー“ .!/bin/sh”で検索されなければなりません。この場合の実際のマーカは、“ #!/bin/sh”ですが、‘ #’は、ヒントファイルが解析されるとき、行を終らせるので、‘ #’の代わりに、ワイルドカード‘ .’を使用する必要があります。

hint.map.4.at="cfid0" 
hint.map.4.name="rootfs" 
hint.map.4.start="search:0x00100000:0x10000:.!/bin/sh" 
hint.map.4.end=0x007e0000 
 
hint.map.5.at="cfid0" 
hint.map.5.start=0x007e0000 
hint.map.5.end=0x00800000 
hint.map.5.name="config"

関連項目

geom(4), geom(8), sysctl(8)

作者

geom_map ドライバは、 Aleksandr Rybalko <ray@ddteam.net>によって書かれました。
May 17, 2011 FreeBSD