Mercurial > hg > Papers > 2021 > okud-thesis
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}