[BitVisor-devel:105] Re: UEFI/GRUB2の設定(Ubuntu1610 on ThinkPAD T440s)
k.suzaki
k.suzaki @ aist.go.jp
2017年 1月 19日 (木) 12:53:37 JST
榮樂様
On 2017/01/19 11:22, Hideki EIRAKU wrote:
> From: k.suzaki <k.suzaki @ aist.go.jp>
>> ただ、
>> panic(CPU0) callrealmode_call is not allowed on UEFI systemds:
>> d->func=10
>> で落ちます。
> func=10 は core/callrealmode_asm.h を見ると CALLREALMODE_FUNC_TCGBIOS
> のようです。BitVisor では、UEFI 用の TCG BIOS 呼び出しが未実装のため、
> UEFI 環境では使わないようになっています。(core/tcg.c の
> int1a_TCG_StatusCheck() 関数が常に false を返すようになっています。)
TPM loverの私としては辛いことですが、make configでTCG BIOSを泣く泣く落ち
しました。
この結果、めでたくBitvisorをロード後にGRUB2まで戻ることができました。
しかし、この後、Linuxが起動できません。Recovery Modeで確認すると「初期
RAM Diskをロード中...」以降に固まります。
つまり、GRUBの設定にある「初期RAM Diskをロード中...」以降のLinuxカーネル
のメッセージが出ません。
これはカーネルのせい?ちなにみ試したのでUbuntuのLinux 4.8.0-34-genericです。
カーネルが何か悪さをしている?
UEFIではmoduleが使えないことは了解しました。
ストレージ暗号化はUEFIで起動後に試してみます。
------
suzaki
>> また、moduleをつけたいのですが、loadvmm.efiではどうやって設定するので
>> しょうか。
> module は UEFI 環境では使用できません。もともと module が実装された経
> 緯として、IC カードを用いた認証、および、IC カードからのストレージ暗号
> 化用共通鍵の取得を実現するために、USB デバイスとの入出力が必要になりま
> す。しかし、BIOS には一般的な USB デバイスとの入出力 API がないために、
> USB ホストコントローラー用の完全な (para-passthrough でない) デバイス
> ドライバーが必要ということになりました。これを、認証の部分だけ既存のオ
> ペレーティング・システム (OS) を使用することで実現しようとしたというこ
> とになります。
>
> UEFI 環境では状況が異なり、一般的な USB デバイスとの入出力 API が存在
> するので、既存の OS を使う必然性がありません。しかも、既存の OS を使用
> するためには、ファームウェアによるデバイス制御を終わらせる
> ExitBootServices という API を使用しなければならず、そうすると認証後の
> OS の起動に UEFI ファームウェアを使うことができなくなるため、既存の OS
> を使うこと自体が困難です。そのため、module は使用できません。
>
> なお、BitVisor をストレージ暗号化に用いる場合、BIOS 環境では、
> boot/login-simple/ のプログラムにより、ストレージ暗号化用共通鍵を含む
> 設定を暗号化した状態でストレージに入れておくことができますが、UEFI 環
> 境用のそのようなプログラムはまだ実装されていません。BIOS 環境では、ファー
> ムウェアはセクター単位の低レベルな API を提供するのみで、ファイルシス
> テムを解釈しないため、簡単に暗号化を有効にすることができますが、UEFI
> 環境では、ファームウェアがファイルシステムを解釈するため、ストレージ暗
> 号化に対応するには、パーティションやファイルシステムを解釈するドライバー
> (Disk I/O protocol や Simple File System protocol を提供するドライバー)
> をいったん切り離し、暗号化を有効にしたうえで再び接続する必要があると思
> われます。UEFI 対応を実装した際、簡単な実験を行ったところでは、そのあ
> たりの挙動に機種によって若干の差異があり、今のところ詳しく調べられてい
> ない状態です。
>
> boot/login-simple/ に相当する UEFI 環境用の実装を行うとすれば、現在の
> loadvmm.efi に起動パラメーターをつけるか何かして、今までの module が起
> 動される時と同様に、各種 para-passthrough ドライバーの初期化を行わない
> 状態で開始で BitVisor を開始させるようにし、開始後 loadvmm.efi から、
> module の代わりに別の EFI Application を実行して認証を行わせる (その
> application が config を作成し VMM 呼び出しで VMM に渡し、その段階で
> para-passthrough ドライバーの初期化を開始、実行はそのまま継続) といっ
> た形になるのかなと思います。ただし、現在 UEFI 環境では仮想マシン開始後
> は画面へのログ出力がされない作りになっているため、そのままではドライバー
> 初期化時のトラブルを確認することができず、ログ出力にちょっと工夫が必要
> になりそうです。
>
BitVisor-devel メーリングリストの案内