view paper/chapter/chapter4.tex @ 14:101c076a190b

chapter3.5
author okud
date Sat, 13 Feb 2021 02:11:40 +0900
parents 1236fa28ffdd
children 82407e7fefd9
line wrap: on
line source

\chapter{UEFI}


\section{UEFI}
UEFI\cite{uefi}とは、Unified Extensible Firmware Interfaceの略で
OSとプラットフォームファームウェアの間のソフトウェアインタフェースを定義する仕様である。
1990年代半ばにIntelによってBIOSに変わるEFI仕様が開発された。
2005年にIntel、AMD、Apple、Microsoftなどの企業からなるUnified EFI Forumという業界団体のもとUEFIが開発された。
UEFIは単なるインタフェースの仕様であるため、特定のプロセッサに依存しない。
以前までのBIOSと異なり、近代的なソフトウェア開発手法を用いることが推奨されていて、C言語などで実装ができる。


\section{BIOSとUEFI}
UEFIはBIOSの後継として開発されたがBIOSと大きな違いがいくつかある。
BIOSとUEFIの違いは表\ref{tb:biso_uefi}である。
\begin{table}[H]
  \begin{center}
    \caption{BIOSとUEFIの違い}
    \begin{tabular}{|c|c|c|c|} \hline
	   & BIOS & UEFI(32bit) & UEFI(64bit)\\ \hline
    CPU & 16bit & 32bit & 64bit \\ \hline
	メモリ空間 & 1MB & 4GB & 256TB\\ \hline
    BOOT & MBR & GPT & GPT \\ \hline
    デバイス規格 & PS/2 & USB & USB \\ \hline
    \end{tabular}
	\label{tb:biso_uefi}
  \end{center}
\end{table}
\subsection{CPU}
BIOSは、40年近く前から存在しているので、16bitCPU前提のアーキテクチャであるため16bitで起動する。
また、CPUリアルモードでないとBIOSから起動できない。
さらに、CPUのアーキテクチャに依存し、アーキテクチャごとに設定しなければならない。
しかし、UEFIは、32bit、64bitの両方を起動できる。起動も64bitモードで可能。
また、CPUのアーキテクチャに依存しない。

\subsection{メモリ空間}
16bitCPUのメモリのアドレス空間は2の16乗で64KBであった。
つまり、16bitBIOSでは、64KBの16倍である1MBまでしか使えない。
UEFIでは、32bitなら2の32乗bitで4GB、64bitなら2の64乗bitで256TBまでメモリを潤沢に使える。
これにより、セキュリティを含めたシステム機能の強化が可能になった。

\subsection{BOOT}
BIOSとUEFIでは、BOOT方式が違う。
BIOSは、ディスク先頭の512バイトにBootLoaderとパーティーションテーブル(MBR)が格納されていて
第一セクタの512バイトがメモリにコピーされ、そこにジャンプする。
そして、そのBootLoaderが起動する。BootLoaderがカーネルとディスクイメージをメモリにロードし、
カーネルが初期化処理をする。その後OSが起動される。
UEFIは、UEFIファームウェアがロードされ、起動に必要なハードウェアを初期化する。
次にファームウェアがBootマネージャのデータを読み込みどのUEFI Applicationをどこから起動するか決定する。
ファームウェアのブートマネージャのブートエントリに定義されているように UEFI Application をファームウェアが起動する。
起動しらUEFI Applicationが他のApplicationやカーネルとBootLoaderを起動する。

\subsection{デバイス}
マウスやキーボードなどのデバイスの規格がBIOSとUEFIで変わる。
BIOSはUSBが発明される前から存在しているのでデバイス規格はPS/2を使用していた。
PS/2は端子を通じてキーボードとマウスがキーボードコントローラに接続され、CPUからI/Oバス経由でキーボードコントローラとやりとりをする。
しかし、PS/2ではマウスとキーボードしか接続できないため、汎用性の高いUSBが主流になってきた。
だが、USBに対応していないデバイスも存在したため、USBキーボードをPS/2キーボードに見せかけるエミュレータ機能が存在した。
一方、UEFIではUSBが主流なため、デバイスの規格は基本的にUSBであることが多い。

\section{UEFI Application}
aaa
\section{UEFI Hello World}
UEFIを開発する際に

\section{Raspberry Pi上のUEFI}
a
\section{QEMU 上の UEFI}