Windows 10 PC UEFI BIOS(UEFI)の役割としくみ

はじめに 
Windows 8 を搭載した PCが発売され始めた2012年の冬以降、そのPCには従来のBIOSに代わるUEFI BIOSが実装されているようです。また、自作PC市場でも、2011年より発売が開始された Intel 6シリーズのマザーボードから、本格的にUEFI BIOSの導入がスタートしました。しかしながら、このUEFI BIOSに関しては、歴史が浅いのかネット上でも情報が少ないようです。ですので、自分なりにまとめてみました。また、説明をわかりやすくするために、CPUがx64でOSにWindows 8 - 10 64 bit 版がインストールされたPCのUEFI BIOSに 限定して解説しています。以降の記述でWin10と記載した場合は64 bit 版のWin8 、8.1、10を意味すると解釈してください。 

注意事項 
その1 表記について。2017/1/29に記事を修正するまでは、単にUEFIと記述していました。従来のBIOSと区別するためにUEFIと表記した方がわかりやすいと思いました。しかし、大手マザーボードメーカーはその表記にUEFI BIOS ,Dual BIOS ,Click BIOS などBIOSの名を残して使用しています。また、UEFIの役割自体はBIOSと変わりありません。そこで、弊ブログではUEFI仕様のBIOSであるとしてその表記をUEFIからUEFI BIOSに改めます。

その2 UEFI は基本的な仕様は標準化されていますが、その実装はPCハードウェアに依存するために、仕様で定義されていない部分はPCハードウェアにより異なります。一般的にメーカー製の市販PCのUEFI BIOSはキャラクターベースでWindowsを起動することが前提に設計されているようです。一方、自作PC向けのマザーボードのUEFI BIOSはグラフィカルで多機能です。Windows以外のLinuxも起動できるようチューニングされているものあります。 
その3 Windows OSをUEFI BIOSで利用するには、Windows Vista SP1以降の64bit版が必要でしたが、Windows 8/ 8.1からは、32bit版でもUEFI BIOSを利用可能となり、タブレットPCなどのOEM向けのWindows 8.1 32bit版はUEFI BIOS環境を利用しているようです。しかし、パッケージ版やDSP版のWindows 8/8.1の32bit版はUEFI BIOSには対応せずBIOSのみ利用可能のようです。 


UEFI BIOSとは 
PCに接続しているデバイスの機能を調整したり、PCよりOSを起動させるための組み込みプログラム(x86命令マシン語)、ソフトウェアと言えると思います。UEFI自体は標準仕様を指します。UEFI BIOSが導入される前のBIOSをLegacy(レガシ) BIOSと呼びます。このUEFI BIOSの組み込みプログラムはあらかじめ、マザーボード製造時にそのハードウェアに最適化され、その基盤上の部品に格納されています。また、PCの電源を入れると自動的にそのプログラムが実行されるようになっています。 

BIOSSOFT.png 


なぜBIOSからUEFI BIOSに移行したのか 
とにかくBIOSは古い仕様で作られているようで様々な制限があり、そこでUEFIが登場したようです。その導入のメリットはBIOSに比べ柔軟性/拡張性/信頼性がを得られることにあります。具体的には、起動が早い、起動ディスクの容量制限の緩和などがあるようです。

PCのBIOSがLegacy BIOSかUEFI BIOSかを調べる方法
Msinfo32を実行し、BIOSモードがレガシであればLegacy BIOS、UEFIであればUEFI BIOSとなります。 


UEFI BIOSの構成要素 
組み込みプログラム + NVRAM 

組み込みプログラム 
ソフトウェアである組み込みプログラムはマザーボード(以降 M/B)上の書き換え可能なフラッシュROMチップに記憶されています。電源をONした場合はそのROMチップより、組み込みプログラムが実行され、OS起動につながります。その起動直後に、Deleteキーなどの特定のキーを押下することで、UEFI BIOSセットアッププログラムを起動できます。このプログラムで様々な設定をします。
 
マザーボード ASUS H170M-PULSでのUEFI BIOSセットアッププログラム画面 151113065716.png 


NVRAM 
UEFI BIOSは各種ハードウェアを制御するための設定情報持っています。その情報はM/Bのチップセット内にあるSRAM (Static Random Access Memory) に保存されています。このSRAMは揮発性メモリなので電源を落とすと、情報が消えてしまうので、ボタン電池でバックアップしています。また、このSRAMをNVRAM(Non-Volatile RAM)、またはCMOSとも呼びます。このNVRANに保存されている情報はNVRAM変数と呼ばれており、UEFI BIOSセットアッププログラムにより情報が書き込み・参照されます。また、その一部の変数はWindowsからも参照・更新が可能です。このNVRAMの設定情報を強制的に消去することをCMOSクリアと呼びます。 NVRAM変数には、システムが終了しても値を保持するものNV(Non Volatile)、 OS起動後に利用可能なものRT( RunTime ) 、OS起動前に利用可能なものBT( Boot Time ) の3つの属性があります。 OSの起動に関係する主なNVRAM変数は次の2つです。 

2017/11/05追記
このNVRAMの実装については、アーキテクチャに依存するため、UEFI仕様では規定されていません。しかし、Windows PC はIBM PC/AT互換機ですから、RTC /RTC CMOS RAMの仕様に準じます。したがって、従来BIOSではこのRTC CMOS RAMに設定情報を保存していました。しかし、この
RAMの記憶容量はわづか数百バイト程度であるため拡張性がありません。そこで、Windows 10 PC のUEFI BIOSでは BIOSコードが格納されているフラッシュROMの一部の領域を確保し、NVRAMとしています。昔のROMは製造時等にROM全体を書き換えしかできませんでしたが、近年のフラッシュROM関連技術の向上でデータも保存可能になっています。フラッシュROMのNVRAMについて調べてみた記事のリンクを下記に貼っておきます。



 Boot####( NV+RT+BS )  UEFI BIOSブートマネージャーが起動するデバイス(SSD/HDD)など登録情報(以降、ブートエントリー) 

 BootOrder( NV+RT+BS ) ブートエントリーの起動順序リスト(以降、ブート順序リスト) 


マザーボード ASUS H170M-PULSの例 IMG_20151213_130254.png 



Windows インストール時にインストーラによって作成されるUEFI BIOS関連要素 
Windows はPCのHDD/SSDなどのドライブにインストールします。このとき、そのドライブにEFI システム パーティション(以降 ESP)が作成されます。このESPには、Windows Boot Manager 本体とBCDが作成されます。Windows Boot Manager 本体とは Windowsを起動するUEFIアプリケーションで、ESPの \EFI\Microsoft\Boot\bootmgfw.efiに作成されます。ESPは、Windows の一部ではなく、UEFIの仕様によるものです。このESPはUEFI BIOSからもアクセスできるようFAT32でフォーマットされています。また、インストールが終わると、 NVRAMに「Windows Boot Manager」というブートエントリーが登録され、そのブート順序リストの1位に設定されます。 

NVRAMブートエントリーの「Windows Boot Manager」 とは 
この「Windows Boot Manager」は、Windows Boot Manager本体そのもではなく、それがどのディスクのどのパーティションにあり、そのパーティション内のどの位置にあるのかという情報が設定されます。Windowsでいうところの「ショートカット」のようなものです。これにより、UEFI BIOSはWindows Boot Manager本体を読み込み起動することができます。この「Windows Boot Manager」 が従来のBIOSにない仕様でここをよく理解することがUEFI BIOSでWindowsを起動させるポイントになります。従来のBIOSでは起動ドライブにCD/DVDドライブやHDDの物理的なドライブを直接指定しました。 

NVRAMブートエントリーの「Windows Boot Manager」の例 
170131235224.png 


従来BIOSでの起動ドライブ設定例
IMG_20170612_0924.jpg 



UEFI Bootのプロセス

自作PCでOSがWindows 8-10の場合
ASUS PRIME H270-PLUS BIOS Ver 0311 UEFI Spec Ver 2.50
BIOS Boot 設定
Fast Boot Disabled
CSM Disabled 
で確認
UEFI Specification 2.5 の [ 3.1 章  Firmware Boot Manager ]を参照


UEFI BIOSのBoot Manager(プログラム)はLoad Optionを読み込む。

Load OptionはBoot####のNVRAM変数に設定されている。


起動時に
BootOrderの順でBoot####をロードする。

読み込んだLoad Optionの実行が成功したら、次のOptionは実行しない。失敗した場合は次のOptionを読み込む。

Boot####は次の内容を保持する。
Load Option の名称
   例 Windows Boot Manager

実行するOS起動プログラム(UEFI アプリケーション)のファイルパス
  例  \EFI\Microsoft\Boot\bootmgfw.efi


UEFI BIOSのBoot Managerは初期化時にBoot Option をメンテナンスする。
Boot Optionが設定されているデバイスが存在しないときは、Boot####を削除し、BootOrderからその順位を洗い替えする。
新規デバイスが存在するときもBoot#####を登録し、BootOrderからその順位を洗い替えする。

Load Optin Boot####例1(自作PC ASUS H270-PLUS)
170206200602.png 

Load Optin Boot####例2(市販PC)
IMG_20170211_075258.jpg 


ASUS M/B PRIME H270-PLUS BIOS では次の実装がある。
Windows 8-10をインストールしたドライブにESPがありその中に\EFI\Microsoft\Boot\bootmgfw.efiが存在し、それに対応するBoot###が存在しない場合、UEFI BIOSのBoot ManagerはWindows 起動用のBoot####を作成し、BootOrderの順位を1位にする。
(お詫び)
2017/02/06 当初の記載ではBCDの定義情報に基づき、Boot####を作成するとしていましたが誤りでした。


また、Windows 8-10起動時に起動プログラムがその起動ドライブのESP内BCDの定義情報に基づき、Windows 起動用のBoot####を作成し、BootOrderの順位を1位にする。

 このように、UEFI 環境下ではNVRAMブートエントリーに「Windows Boot Manager」が消えてしまうと、Windowsが起動できなくなってしまうため、回避策がとられているようです。 



BCDとは 
Boot Configuration Dataの略でブート構成データと呼ばれるバイナリ・ファイルで、ESPの \EFI\Microsoft\Boot\BCDに作成されます。UEFIサポートのために導入されたが、UEFIの仕様ではなくWindows固有の仕様のようです。主な用途は2つ。1:従来のBOOT.INIのように起動オプションの設定値を格納する 2:NMRAMの起動変数を抽象化し、そのキャッシュをBCD内にオブジェクトとして保持する。UEFI環境下では、Windows起動時にNVRAMの起動変数がBCDにキャッシュされるようです。インストールが終わると、定義要素がBCDに作成されます。主な要素としては 

Windows ブート マネージャー 
-------------------------------- 
identifier {bootmgr} 
device partition=\Device\HarddiskVolume2 
path \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI 
description Windows Boot Manager 
timeout 30 

Windows ブート ローダー 
-------------------------------- 
identifier {current} 
device partition=C: 
path \WINDOWS\system32\winload.efi 
description Windows 10 
osdevice partition=C: 
systemroot \WINDOWS 

などがあります。
Windows Boot Manager 本体であるbootmgfw.efiがこのWindows ブート ローダーの要素を読み取り、それにより指定されているC:\WINDOWS\system32\winload.efi(Windows OS ローダー)を起動します。異なる複数のWindows のバージョンを選択して起動する場合は、このWindows ブート ローダーを複数作成します。 


Windows の起動フロー 
電源オン ROMチップからUEFI BIOSのファームウエアが起動 
CPUやチップセットの初期化やUEFI用のドライバのロード 
UEFI BIOS Boot Manager(ROMチップ内の) が起動 ブートエントリー・ブート順序リスト(NVRAM内の)基づき、Windows Boot Maneger (ESPの\EFI\Microsoft\Boot\bootmgfw.efi )がUEFI上で実行される。これを実行にするためにUEFIプログラムが起動ドライブへファイルアクセスする。 bootmgfw.efi はBCDを読み込み、どのWindows OS ローダーを起動するかを決定する。通常、Windows Boot Maneger はOSパーティション・NTFSのC: \windows\system32\winload.efi をUEFI上で実行する。 winload.efiはカーネルをメモリーにロードし、様々な処理を行いWindowsに制御を移す。 

UEFI BIOS関連要素概念図(クリックで拡大) UEFI.png


起動ドライブのパーティション基本構成 
Windows 10 では回復(Win RE)、ESP、Microsoft 予約パーティション (以降 MSR)、Windows パーティションとなる。場合によって、OEMパーティション、回復イメージパーティションが作成される場合もある。MSRはBitLocker暗号化やシステムの回復ツールなどが作業用として利用する隠しパーティションとなっていて、ディスクの管理ツールでは表示されないので、DISKPARTで確認する。 

EFI システム パーティション (ESP)の詳細 
GPT、FAT32 
PARTITION ID -> PARTITION_SYSTEM_GUID ( c12a7328-f81f-11d2-ba4b-00a0c93ec93b )
GPT 属性 -> GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER ( 0x8000000000000000 ) 
DISKPART/set id="c12a7328-f81f-11d2-ba4b-00a0c93ec93" 
DISKPART/gpt attributes=0x8000000000000000 

GPTとは GPTとはUEFIのために作られたパーティション管理方法で、2テラバイト超えのディスクも取り扱え、柔軟性/拡張性/信頼性があるとされています。UEFI環境でWindows 10 をインストールした場合、パーティション管理は必ずGPTとなります。


BCDEDITコマンド/BCDの参照と編集

BCDEDIT /enum firmware
NVRAMの起動変数をBCDにキャッシュし、表示する。つぎの動作を行います。
まず、NVRAM ブートエントリと BCD のエントリを比較し、NVRAM ブートエントリのうち BCD に存在しないものが、BCD に追加し、そのエントリーを表示する。つぎにBCD のブート マネージャ エントリのうち NVRAM ブートエントリに存在しないものが NVRAM ブートエントリに追加される。Windows起動時にも同様の動作をするようです。

[ファームウェアのブート マネージャー]
UEFIブートマネージャーのことです。識別子は{fwbootmgr}になります。
displayorderとはNVRAM変数BootOrderを表し、ブート順序リストが表示されます。
timeout はNVRAM変数timeoutの値を表示します。UEFIブートマネージャーが起動順位1位に設定されたブートエントリーの実行を待機する時間を表示します。PCによっては画面になにも表示されない場合があります。

[Windows ブート マネージャー]
上述したESPにあるbootmgfw.efiのことです。識別子は{bootmgr}になります。基本的に「ファームウェアのブート マネージャー」のdisplayorderの第1順位に設定されています。
device とpath とは上述の通りです。
timeout とはbootmgfw.efiがWindows OSローダーを選択する際の待機時間を表示します。通常、1つのWindows OSをインストールしている場合は選択画面は表示されません。

[ファームウェア アプリケーション]
NVRAM変数Boot####として登録されているブートエントリーで{bootmgr}以外を表します。下の例ではUSBメモリを指しています。

BCDEDIT /enum firmware の出力例  始まり↓

ファームウェアのブート マネージャー
--------------------------------
identifier           {fwbootmgr}
displayorder      {bootmgr}
                        {a5271530-eb93-11e6-983b-806e6f6e6963}
                        {a5271531-eb93-11e6-983b-806e6f6e6963}
timeout             1

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description             Windows Boot Manager
locale                  ja-jp
inherit                 {globalsettings}
default                 {current}
resumeobject            {253500b1-e5e7-11e6-9fd8-a20390192bf9}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

ファームウェア アプリケーション (101fffff
--------------------------------
identifier              {a5271530-eb93-11e6-983b-806e6f6e6963}
device                  partition=F:
description             UEFI: JetFlashTranscend 8GB 1100, Partition 1

ファームウェア アプリケーション (101fffff
--------------------------------
identifier              {a5271531-eb93-11e6-983b-806e6f6e6963}
device                  partition=E:
description             UEFI: UFD 2.0 Silicon-Power4G 1100, Partition 1

BCDEDIT /enum firmware の出力例  終わり↑


BCDEDIT /set {fwbootmgr} 
このコマンドはBCDの値を書き換えると同時にNVRAM変数の値も書き換えます。UEFIのセットアプで変更せずとも、Windowsから変更できる。

UEFI BIOSブートマネージャーが既定のエントリーを実行をするまでの待機時間を変更する。NVRAM変数Timeoutが更新される。(単位:秒)
BCDEDIT /set {fwbootmgr} timeout 10

NVRAM変数BootOrderの変更・削除、ただし、追加はできない。対応するNVRAM変数Boot####には影響なし。
BCDEDIT /set {fwbootmgr} displayorder ID /addFirst ←変更
BCDEDIT /set {fwbootmgr} Default ID は上記と同じ結果になる。 

BCDEDIT /set {fwbootmgr} displayorder ID /remove ←削除

1 回限りの起動項目の順位を定義する。NVRAM変数BootNextを作成する。
BCDEDIT /set {fwbootmgr} bootsequence ID ID


BCDEDIT /set {bootmgr}
このコマンドはbcdedit /set {fwbootmgr} コマンドとよく似ていますが、対象がWindows Boot Managerになっています。間違いやすいので注意が必要です。
BCDEDIT /set {bootmgr} description "新エントリ文字列" NVRANのWindows Boot Manager エントリーの名前を変更します。

BCDEDIT /set {bootmgr} displayorder ID /addfirst Windows ブート マネージャーの Windows ブート ローダー アプリケーションの起動順位を設定します。

BCDEDIT /delete
起動関係では、ファームウェアアプリケーションが対になるNVRAM変数Boot####は存在しないが、BCDには存在している場合にこのコマンドを使用します。
BCDEDIT /delete ID 指定したエントリーを削除し表示順序からエントリーを除外 /nocleanup の指定がない場合は/cleanup指定となる。


BCDBOOTコマンド/Windows起動環境の作成と修復

Windowsが起動できなくなった場合、回復環境コマンドプロンプトなどからこのコマンドを使用し、起動環境を修復します。以下の修復が実行されます。
ESPの初期化(BCDもリセットされる。) BCDの修復
NVRAMに「Windows Boot Manager」ブートエントリーが作成され、ブート順序リストが1位に設定されます。
\EFI\Microsoft\Boot\bootmgfw.efi などブートファイルが作成される。

コマンド構文
BCDBOOT  [OSのドライブレター]\windows   /l ja-jp   /s [ESPのドライブレター]   /f UEFI 
各ドライブレターはdiskpartなどで調べておく
例) BCDBOOT C:\Windows /l ja-jp /s Z: /f UEFI


ESPにドライブレターをつける方法は、ESPを選択し、DISKPART/ASSIGN LETTER=Z 
その後、Zドライブにコマンドプロンプトで移動し、操作可能であるが、GUIのエクスプローラーでは参照すらできない。
ドライブレターはDISKPART/REMOVEで削除できる。



Windows API GetFirmwareEnvironmentVariableでUEFI BootOrder変数にアクセス
http://dxr165.blog.fc2.com/blog-entry-365.html



UEFI シェル(UEFI Shell )

UEFI シェルはコマンドラインツールです。UEFIシステムをメンテナンスするためのコマンドを実行できます。詳しくは、UEFI Shell を使ってみよう!をご覧ください。

UEFI シェルを実行するにはUEFIセットアップユーティリティーの"Launch EFI Shell from filesystem device"から起動します。その前に、UEFI シェルを入手し、FAT32でフォーマットしたUSBメモリのルートディレクトリにShellx64.efi(64bit機の場合)にリネームし配置します。起動しない場合はUEFIの設定をデフォルトに戻してみてください。

使用頻度の高いコマンド

map 認識しているブロックデバイスの一覧表示
ブロックデバイスとは、ハードディスクドライブ/CD-ROMドライブ/USBメモリなどのアドレス指定可能な機器のようです。

drivers EFIドライバの一覧を表示します

dmpstore
UEFI のNVRAMに格納されている変数はdmpstore コマンドで参照・削除・バックアップ・レストアが可能。

bcfg boot dump コマンド(Shell Version 2.0以上)によりブートエントリーの追加、ブート順序リストの参照・変更が可能です。
詳しくはbcfg -? -v -b



LinuxとUEFI

話しはWindowsから離れますが、Linux系のコマンドでブートエントリーの追加、ブート順序リストの参照・変更が可能です。

SystemRescueCD入手し、ISOから展開し、中身をFAT32のUSBメモリーにコピーする。UEFIでブートする。起動したら、ターミナルより以下のコマンドを打つ。

NVRAM変数の参照
efivar -l

ブートエントリー・ブート順序リストの表示
efibootmgr -v
ブートエントリーの追加例
efibootmgr -c -d /dev/sda -p2 -l/EFI/Microsoft/Boot/bootmgfw.efi -L "Windows Boot Manager"
-c | --create
Create new variable bootnum and add to bootorder
-d | --disk DISK
The disk containing the loader (defaults to /dev/sda)
-p | --part PART
Partition number containing the bootloader (defaults to 1)
-l | --loader NAME
Specify a loader (defaults to \\elilo.efi)
-L | --label LABEL
Boot manager display label (defaults to "Linux")


EASYUEFI
ブートエントリー・ブート順序リストの追加・参照・変更が可能なフリーソフトです。Windows上で動作します。
(注意)NVRAMだけでなく、BCDの内容の一部も変更するようです。


トラブルシューティング
「Windws Boot Manager」ブートエントリーとブート順序リストへの設定がCMOSクリアで削除されてしまうことによるトラブルが多いと思われます。この場合は最近発売された自作PCのM/Bであれば、そのUEFI BIOSファームウエアにより、起動ドライブにESPが存在するなどの所定の要件を満たせば、「Windws Boot Manager」ブートエントリーとブート順序リストへの設定が自動修復される仕様となっている場合があります。(ASUS PRIME H270-PLUSで検証済み。)もし、この仕様がなければ、自分で回復環境などを用い、BCDBOOTコマンドにより「Windws Boot Manager」ブートエントリーとブート順序リストへの設定を復旧するしかありません。この作業は、自作PCユーザーでもそれを行うにあたりハードルが高いと思われます。レガシーBIOSを経験してきた自作PCユーザーであれば、CMOSクリアーは困ったときの最終手段として広く浸透しています。しかし、自作PCのM/BがほぼUEFI BIOSとなりOSもUEFI起動が当たり前となった今、自作PCユーザーはこのCMOSクリアーにより、「Windws Boot Manager」ブートエントリーとブート順序リストへの設定は一旦は消えてしまうということを知っておくべきと思います。

こんなときは...


Win 10 のインストールについて
これから、自作PCでWin10をインストールする場合は、そのマザーボードがUEFIに対応していれば、上記の解説からWin10をUEFIモードでインストールすることを強く推奨します。

UEFI BIOSセットアップでのBOOTメニューで下図のように、デバイス名の前に「UEFI :」と表示されるのは、そのメディアがUEFIブート対応の場合で、ルートに\efiというフォルダがありその中に~.efiというUEFIのブート・コードがあれば、UEFIメニューを表示しています。このUEFIが先頭についたメディアを選択しないとUEFI環境となりません。
BootメニューにBBS Prioritiesの設定項目がある場合がありますが、UEFI環境下ではこの設定はBootに関係しません。

Windows インストーラはブートエントリーのプリフィクスのUEFI: を調べUEFI Boot かMBR Boot のいずれで構築するかを決めているようです。

UEFIメニューの例(USBメモリ)  画像クリックで拡大
UEFIUSB.png 


参考資料/URL

技術者見習いの独り言 / What's UEFI
テクニカルな視点からコンパクトにUEFIについて解説されています。
https://orumin.blogspot.jp/2014/12/whats-uefi.html 


一方、ふうえんさんちでは…/UEFIについて
UEFI を取り扱ったブログ記事です。記事の量も多くとその出典も明記されており、UEFI情報元ブログでは草分け的存在です。


syuu1228's blog / BIOSとUEFIの歴史,GPTとMBRはどのように違うのか?
Linux開発の見地よりUEFIのブート原理を解説されています。
http://syuu1228.hatenablog.com/entry/20130102/1357096671
http://syuu1228.hatenablog.com/entry/20130103/1357165915


UEFI時代のブートローダ(スライドです。NVRAM変数を解説)
http://www.slideshare.net/syuu1228/uefi-boot-loaders


新世代 BIOS "UEFI" の 構造と実装
菅原清文 インテル(株) ソフトウェア&サービス統括部 ソフトウェア技術部
UEFIの概要について解説されている。


openSUSE:UEFI
UEFI BIOSについてコンパクトに解説されています。
https://ja.opensuse.org/openSUSE:UEFI


Unified Extensible Firmware Interface Archlinux Wiki(日本語、UEFI環境下でLinuxをブートするために必要な知識が記載されている)
https://archlinuxjp.kusakata.com/wiki/Unified_Extensible_Firmware_Interface




BIOS/EFI(関連リンクが豊富)
http://mcn.oops.jp/wiki/index.php?BIOS%2FEFI


BIOS/UEFI 完全攻略 [Windows 8/7 対応] [Kindle版] 松永 融 技術評論社 2013年12月25日 初版

(BIOS/UEFIを専門に解説した数少ない本です。初心者でも非常に分かりやすく書かれています。)


EFIフレームワークの導入で変わるBIOS(元麻布春男の週刊PCホットライン)/2003年9月19日 元麻布春男
http://pc.watch.impress.co.jp/docs/2003/0919/hot280.htm
(読み物としても面白い)


UEFI Specification Version 2.3.1 (Errata D) 本家本元、ただし当然英語です。
http://uefi.org/specifications


Windows Boot Environment ,Microsoft (英語ですがパワポ資料なので分かりやすい)
http://www.uefi.org/sites/default/files/resources/UEFI-Plugfest-WindowsBootEnvironment.pdf


NEC Express5800 シリーズ (UEFI BOOT SETTINGの解説が詳しい。327ページ)
http://support.express.nec.co.jp/usersguide/a1080a_a1040a/A1080a_UG_2_J_R9_2.pdf


UEFIアプリケーション/ドライバー開発の話、メモ、その他
http://orumin.blogspot.jp/2014/01/uefi.html


Solid State Life / TX-50開発キットで遊ぶ その6
UEFI Shellコマンドの活用例があります。
http://solidstatelife.blogspot.jp/2011/10/tx-50_2875.html


HP UEFI シェルユーザーガイド - 日本HP
h50146.www5.hp.com/lib/products/servers/.../744994-191a_ja.pdf


HPビジネスノートブック/デスクトップにおけるEFIプリブートのガイドラインおよびWindows 8のUEFIセキュアブート
貴重なPC向けUEFI資料です。
https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=http%3A%2F%2Fh20566.www2.hp.com%2Fhpsc%2Fdoc%2Fpublic%2Fdisplay%3FdocId%3Demr_na-c03774279&ei=_JJfVbG9IaSlmQW2l4LADw&usg=AFQjCNHlcB6gBPTlvNzSRzF9s7AhX6ZRCg&sig2=yQZ2SPc7AJL18_RBhlBCQg&bvm=bv.93990622,d.dGY


2009年の古いマイクロソフトのホワイトペーパーです。UEFI BIOSがソフトウエアとしてOSとどのように異なるのかがわかります。
UEFI and Windows
http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/uefi_windows.docx


DOS/Vパワーレポート 2006年6月号/PC自作 ウワサの検証 完全版/ウワサその12 Mac編/次世代BIOS「EFI」の仕組を探る  塩田紳二
Intel MacのEFIの解説ですが、GPTの説明がわかりやすい。
http://www.dosv.jp/feature/0606/20.htm


本当に知っている?Windowsの基礎 / Windowsはどうやって起動するのか?(Vista編) 中島 省吾
UEFIが導入される前のBIOS時代の記事ですが、Windowsのブート概略がわかり参考になります。
http://itpro.nikkeibp.co.jp/article/COLUMN/20090113/322746/


Microsoft Building Windows 8
Windows エンジニアリング チームによるブログ
Windows の起動のエクスペリエンスを再構築する
UEFIとWindows 8Boot とのかかわりが解説されています。
https://blogs.msdn.microsoft.com/b8_ja/2011/09/22/windows-2/





修正履歴
2015/03/10 とりあえず、わかったことを公開
2015/03/29 だいたい内容がまとまる
2015/05/10 UEFI Shellの記事を追加
2015/05/12 「Windows Boot Manager の起動エントリー」の詳細の内容を修正
2015/05/16 bcdeditの内容を修正
2015/05/17 参考資料を追加
2015/05/22 しくみの解説を修正
2015/05/26 概念図を変更
2015/05/27 トラブルシューティングを追加
2015/05/30 用語を統一
2015/10/25 要所各所で補足
2015/12/13 内容をWin10に書き換え、その他追記
2015/12/21 SMBOS解説を追加・要所各所で補正
2016/05/05   細かな点を修正
2017/01/29  UEFIの表記をUEFI BIOSに変更
2017/02/06  UEFI Boot 詳細プロセスを追記
2017/02/08  BCDの記述を一部修正
2017/02/08  BCDの記述に一部誤りがあり修正
2017/09/20  参考URLを追記
2017/11/05  NVRAMに記述を追加
2018/03/25 参考URLを追記

関連記事
  • BIOS/UEFI

コメント

へんなおじさん

大変に役に立ちました
詳しく説明していただいてありがとうございます<(_ _)>

DXR165

コメントありがとうございます。
少しはお役に立ちましたでしょうか?
今後も気軽にコメントいただければと思います。

lip

非常に非常に参考になりました。
文章もわかりやすく助かりました。

DXR165

コメントありがとうございます。
lip様コメントありがとうございます。至らなかった点がございましたら、また、ご指摘ください。

てつ

手順ではなく、仕組みを把握しておくことがトラブル対処時には大切。それを実感させてくれる力作ですね。大変参考になりました。

DXR165

コメントありがとうございます。
てつ様コメントありがとうございます。
私は仕組みがわかないとなかなか先に進めない性分で…、ほんと困ったもんです。
少しは何かのお役にたったのでしょうか?また、気軽にコメントをお願いします。

ktj

大変わかりやすかったです。ありがとうございました。

パナのノートを、HDD→SSDにクローン換装した後、一度「Checkingedia presence…」が表示されてから、正常に起動するという症状になっていて、いろいろ調べてる内に本記事にたどり着きました。

UEFI firmwareのuefi起動オプションからWindows boot Managerが消えて、Ipvのみになっている。efiファイルはクローンされている。

記事によると、
efiファイルに対応するBootオプションが存在しない場合が想定されているのですね…未だオプションにはWindows boot Managerは存在しませんが、正常に起動する理由がわかりました。ありがとうございます!

DXR165

Re: タイトルなし
ktj さんコメントありがとうございます。
UEFI環境でのドライブコピーは様々なハードルがありますね。このあたりの内容も記事にしたと思っています。

Dewayne

Hi i am kaνin, its my fifst occasion to comenting anywhere, when i read this
paragrapһ i thougjt i could also make commentt due to this ɡood paгagraph.

hvac san jose

This tesⲭt iis invaluable. How cann I find out more?

通りすがり

私がここ数年疑問に思っていたことが全て解決しました。
色んなサイトを見ても分からなかったことがここだけで分かりました。
最高の解説です。ありがとうございます。

DXR165

少しはお役に立ちましたでしょうか?
通りすがりさん
コメントありがとうございます。
お褒めの言葉をいただき、嬉しい限りです。
また、ご指摘事項がございましたら何なりと申し出ください。
非公開コメント

プロフィール

DXR165

京都府在住の磯釣り師です。
DXR165の意味は釣り竿の名前です。DAIWA DXR AIRTUNE 1.65-53が正式名称です。