回答:
編集:私がこの回答を書いたとき、EFI_STUB構成のカーネルが同梱されているディストリビューションはほとんどないため、カスタムカーネルを構築する必要がありました。現在、ほとんどのディストリビューションは適切に構成されたカーネルを出荷しており、カスタムビルドは不要になりました。この場合、「パーティションの設定」と「設定」のセクションは興味深いものです。「要件」と「カーネルのコンパイル」はスキップできます。
WindowsがUEFIをどのように処理するかはわかりませんが、Debian側から見ると、非常に簡単です。
MBRではなく、GPTパーティションスキームを使用します。
UEFIを使用してGPTパーティションから起動するには、EFI SYSTEM PARTITION(ESP)と呼ばれる専用のブートパーティションが必須です。必須ではありませんが、最も互換性のある方法はFAT32パーティションを使用することです。ほとんどの場合、200 MiBのサイズで十分です。
パーティションをESPとして登録するには、boot
フラグでフラグを立てる必要があります。MBRスキームとは対照的に、ブートフラグはESPを示すためにのみ使用され、そこからブートできるパーティションではありません。
UEFIは、ディレクトリ構造\EFI\<vendor>\<application>.efi
を使用してUEFIアプリケーションを格納します。Linuxであっても、ディレクトリセパレータはバックスラッシュで示されます。 ディストリビューション名である可能性があります。実際の値はUEFIには関係ありません。
アプリケーションは、メモリチェッカーやUEFIシェルなどのシステムユーティリティです。OSローダーまたはオペレーティングシステム自体にすることもできます。これらのアプリケーションは、起動時に起動できるようにUEFIに登録する必要があります。
Linuxカーネルバージョン> = 3.3は、UEFIから直接ロードできます。カーネルは独自のローダーとして機能できます。これはEFISTUBと呼ばれます。以下のカーネル構成が必要です。
CONFIG_EFI = y CONFIG_EFI_PARTITION = y CONFIG_EFI_STUB = y CONFIG_RELOCATABLE = y CONFIG_FB_EFI = y CONFIG_FRAMEBUFFER_CONSOLE = y CONFIG_EFI_VARS = m
この構成のカーネルは、現時点ではまだDebianの安定版にはありません。独自のカーネルを焼くか、実験ツリーのカーネルを使用することができます。その場合は、次の段落をスキップできます。
(おそらくもう必要ありません。編集を参照してください)
カーネルをコンパイルすることにした場合、ここにその簡単な手順を示します。問題が発生した場合は、カーネルのコンパイル方法に関する情報がたくさんあります。
ソースを入手する
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
特定のバージョンを確認する
git checkout v3.6
カーネルの構成
menuconfigを作成する
システムに必要な設定を行うか、カスタマイズするものがない場合はそのままにします。これにより、カーネル構成がファイルに書き込まれます.config
。
前の段落の設定が設定されていることを確認してください。選択することも意味がありますCONFIG_INPUT_EVBUG=n
。そうしないと、ログがジャンクのGiBでいっぱいになります。
カーネルの構築
INSTALL_MOD_STRIP = 1 make-kpkg --uc --us binary-arch
パッケージは親ディレクトリに作成されます。
カーネルのインストール
dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb
initramfsの構築
mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0
3.6.0はカーネルのバージョンです。デフォルトでは実行中のカーネルになりますが、古いカーネルを実行しているため、これは適切な選択ではありません。
Linuxカーネルを起動できるようにするには、initramfsとともにESPにコピーする必要があります。ESPが/boot/efi
/boot/efi/EFI/debian/vmlinuz-3.6.0.efi /boot/efi/EFI/debian/initrd.img-3.6.0
注:ほとんどのシステムとの互換性を確保するには、拡張efi
機能をカーネルに追加する必要があります。
これで、カーネルをUEFIに登録できます。そのためのツールを使用しますefibootmgr
。
echo "root = UUID = 3a4287b6-b3a7-4721-da38-acc38a928278 ro rootfstype = ext4 add_efi_memmap initrd = \\ EFI \\ debian \\ initrd.img-3.6.0" | iconv -f ascii -t ucs2 | efibootmgr \ -作成\ --gpt \ --disk / dev / sda \ -パート4 \ --label "Debian Linux kernel 3.6.0" \ --loader "\\ EFI \\ debian \\ vmlinuz-3.6.0" \ --write-signature \ --append-binary-args-
の引数は--disk
、ESPではなく、カーネルが存在するデバイスです。
--part
カーネルが存在するパーティション番号です。--label
UEFIブートメニューのエントリです。
利用可能なエントリのリストを表示するには、efibootmgr
引数なしで起動します。特定のエントリを削除する構文
efibootmgr -bエントリ(16進数)-B
例えば:
efibootmgr -b 001a -B
これらの手順は、カーネル更新の場合には対応していません。カーネルとinitramfsは自動的にESPにコピーされません。これは、カーネルとinitramfsをESPにコピーして実行する短いスクリプトを使用して実行できますefibootmgr
。このスクリプトは/etc/kernel/postinst.d
、カーネルの更新後に自動的に起動するように配置できます。
注: GRUBのようなブートマネージャーは必要ありません。UEFI自体がブートマネージャーとして機能します。
Linux側で必要なのはこれだけです。Windowsを追加するのに何が必要かはわかりません。
UEFIがLinuxをマシンからロックアウトしないことを確認してください。おそらくBIOSにその効果の設定があります。確認して確認してください。この点については、マニュアルおよび製造元に確認する必要があります。
それについていくつかの長い議論がありました。ZDNetにはいくつかの記事がありました。2011年9月21日の記事と9月23日の記事です。
次に、履歴データに基づいて、最初にWindowsをインストールすることができます。従来、Windowsはそれがマシン上の唯一のOSであると想定しているため、Linuxに関連するブートデータはすべて消去されます。これはUEFIでは異なる場合がありますが、わかりません。
Rod SmithによるUEFIの記事シリーズを心からお勧めできます。特に、「ハイブリッド」GPT-MBRは非同期化の危険があるため、「危険なハッキング」であると述べています。