10
|
1 \chapter{UEFI}
|
|
2
|
|
3
|
|
4 \section{UEFI}
|
12
|
5 UEFI\cite{uefi}とは、Unified Extensible Firmware Interfaceの略で
|
10
|
6 OSとプラットフォームファームウェアの間のソフトウェアインタフェースを定義する仕様である。
|
|
7 1990年代半ばにIntelによってBIOSに変わるEFI仕様が開発された。
|
|
8 2005年にIntel、AMD、Apple、Microsoftなどの企業からなるUnified EFI Forumという業界団体のもとUEFIが開発された。
|
|
9 UEFIは単なるインタフェースの仕様であるため、特定のプロセッサに依存しない。
|
|
10 以前までのBIOSと異なり、近代的なソフトウェア開発手法を用いることが推奨されていて、C言語などで実装ができる。
|
|
11
|
11
|
12
|
12
|
13 \section{BIOSとUEFI}
|
|
14 UEFIはBIOSの後継として開発されたがBIOSと大きな違いがいくつかある。
|
14
|
15 BIOSとUEFIの違いは表\ref{tb:biso_uefi}である。
|
11
|
16 \begin{table}[H]
|
|
17 \begin{center}
|
12
|
18 \caption{BIOSとUEFIの違い}
|
11
|
19 \begin{tabular}{|c|c|c|c|} \hline
|
|
20 & BIOS & UEFI(32bit) & UEFI(64bit)\\ \hline
|
12
|
21 CPU & 16bit & 32bit & 64bit \\ \hline
|
11
|
22 メモリ空間 & 1MB & 4GB & 256TB\\ \hline
|
12
|
23 BOOT & MBR & GPT & GPT \\ \hline
|
|
24 デバイス規格 & PS/2 & USB & USB \\ \hline
|
11
|
25 \end{tabular}
|
|
26 \label{tb:biso_uefi}
|
|
27 \end{center}
|
|
28 \end{table}
|
12
|
29 \subsection{CPU}
|
|
30 BIOSは、40年近く前から存在しているので、16bitCPU前提のアーキテクチャであるため16bitで起動する。
|
|
31 また、CPUリアルモードでないとBIOSから起動できない。
|
|
32 さらに、CPUのアーキテクチャに依存し、アーキテクチャごとに設定しなければならない。
|
|
33 しかし、UEFIは、32bit、64bitの両方を起動できる。起動も64bitモードで可能。
|
|
34 また、CPUのアーキテクチャに依存しない。
|
|
35
|
|
36 \subsection{メモリ空間}
|
14
|
37 16bitCPUのメモリのアドレス空間は2の16乗で64KBであった。
|
|
38 つまり、16bitBIOSでは、64KBの16倍である1MBまでしか使えない。
|
|
39 UEFIでは、32bitなら2の32乗bitで4GB、64bitなら2の64乗bitで256TBまでメモリを潤沢に使える。
|
12
|
40 これにより、セキュリティを含めたシステム機能の強化が可能になった。
|
|
41
|
|
42 \subsection{BOOT}
|
|
43 BIOSとUEFIでは、BOOT方式が違う。
|
|
44 BIOSは、ディスク先頭の512バイトにBootLoaderとパーティーションテーブル(MBR)が格納されていて
|
14
|
45 第一セクタの512バイトがメモリにコピーされ、そこにジャンプする。
|
12
|
46 そして、そのBootLoaderが起動する。BootLoaderがカーネルとディスクイメージをメモリにロードし、
|
|
47 カーネルが初期化処理をする。その後OSが起動される。
|
14
|
48 UEFIは、UEFIファームウェアがロードされ、起動に必要なハードウェアを初期化する。
|
|
49 次にファームウェアがBootマネージャのデータを読み込みどのUEFI Applicationをどこから起動するか決定する。
|
|
50 ファームウェアのブートマネージャのブートエントリに定義されているように UEFI Application をファームウェアが起動する。
|
|
51 起動しらUEFI Applicationが他のApplicationやカーネルとBootLoaderを起動する。
|
12
|
52
|
|
53 \subsection{デバイス}
|
14
|
54 マウスやキーボードなどのデバイスの規格がBIOSとUEFIで変わる。
|
|
55 BIOSはUSBが発明される前から存在しているのでデバイス規格はPS/2を使用していた。
|
|
56 PS/2は端子を通じてキーボードとマウスがキーボードコントローラに接続され、CPUからI/Oバス経由でキーボードコントローラとやりとりをする。
|
|
57 しかし、PS/2ではマウスとキーボードしか接続できないため、汎用性の高いUSBが主流になってきた。
|
|
58 だが、USBに対応していないデバイスも存在したため、USBキーボードをPS/2キーボードに見せかけるエミュレータ機能が存在した。
|
|
59 一方、UEFIではUSBが主流なため、デバイスの規格は基本的にUSBであることが多い。
|
12
|
60
|
11
|
61 \section{UEFI Application}
|
10
|
62 aaa
|
12
|
63 \section{UEFI Hello World}
|
|
64 UEFIを開発する際に
|
11
|
65
|
14
|
66 \section{Raspberry Pi上のUEFI}
|
|
67 a
|
|
68 \section{QEMU 上の UEFI} |