Mercurial > hg > Papers > 2021 > okud-thesis
changeset 19:0dd66a59256b
prepaper fix
author | okud |
---|---|
date | Mon, 15 Feb 2021 22:17:01 +0900 |
parents | e8a0f9380734 |
children | b9113f671dec |
files | prepaper/fig/bootos.png prepaper/pre.pdf prepaper/pre.tex slide/slide.md slide/slide.pdf |
diffstat | 5 files changed, 74 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/prepaper/pre.tex Mon Feb 15 21:10:15 2021 +0900 +++ b/prepaper/pre.tex Mon Feb 15 22:17:01 2021 +0900 @@ -70,12 +70,12 @@ \subsection{CbC GCC ARM CrossCompile} -GCC上で実装されたCbCのARM CrossCompile環境をSingularity\cite{singularity}で構築した。 +GCC上で実装されたCbCのARM\cite{arm} CrossCompile\cite{cross}環境をSingularity\cite{singularity}で構築した。 CrossCompileは、Compilerが動作している以外のプラットフォーム向けに 実行ファイルを生成する機能を持ったCompile手法である。 これにより、CbCで実装されたプログラムをRaspberry Pi上で実装ができる様になった。 -\section{GearsOS} +\section{Gears OS} GearsOS\cite{Gears}は当研究室で信頼性と拡張性をテーマに開発を行っているOSである。 GearsOSはContinuation based C(CbC)によって記述されている。 当研究室では、GearsOSの信頼性とCbCの有効性を示すために、基本的な機能を揃えたOSであるxv6\cite{xv6}をCbCで置き換えを行っている。 @@ -86,7 +86,9 @@ \section{UEFI} UEFI\cite{uefi}は、OSとプラットフォームファームウェアの間のソフトウェアインタフェースを定義する仕様である。 UEFIは、インタフェース仕様であるため、特定のプロセッサに依存しない。 -C言語などの高級言語で実装することができ、個人でも開発の難易度が低い。 +C言語などの高級言語で実装することができ、 +EDK2\cite{edk2}やgnu-efi\cite{gnu}などのUEFIツールキットがあり +個人でも開発の難易度が低い。 UEFIにはApplicationがあり、UEFI Applicationは開発を行うマシンのOSやアーキテクチャに左右されることなく、 @@ -94,17 +96,56 @@ UEFI Applicationを自作することにより、xv6をUEFIでBootさせるBootLoaderを作ったり、xv6のデバイスドライバを作れる様になる。 \section{BootLoader} +BootLoaderはOSをBootさせるプログラムである。 +BootLoaderがOSをBootするまでのプロセスを図\ref{boot}に示した。 +UEFIが起動し、Boot ManagerがBoot Loaderを起動させる。 +BootLoaderがOSのKernelをメモリにLoadし、 +Kernelがinitプロセスを起動させる。 +initプロセスがOSのBootプロセスを起動させ、OSがBootされる。 + +\begin{figure}[H] + \begin{center} + \includegraphics[width=80mm]{fig/bootos.png} + \end{center} + \caption{Boot Loader process} + \label{boot} +\end{figure} -\begin{thebibliography}{9} +\section{研究の成果} +\begin{itemize} + \item UEFIの開発環境をSingularityで作成した + \item gnu-efiで作成したUEFI Applicationをqemu-system-armで動かした + \item Raspberry PiにUEFIのファームウェアとして設定し、実行した + \item ミニマムなKernel Loaderを調査しARM xv6用に書き直した +\end{itemize} + +\section{今後の課題} +\begin{itemize} + \item Singularity上のqemu-system-armにgdbを接続する + \item そのgdbでKernel Loaderをでバックする + \item xv6 KernelをUEFIからBootするコードを入れる + \item xv6を書き換えたGearsOSを実装する + \item USB Driverを実装し、キーボードやマウスを使える様にする +\end{itemize} + + + +\begin{thebibliography}{100} \bibitem{IntelNews} Intel/Unified EFI Forum, https://www.uefi.org ,2017/11/3. \bibitem{CbC} 清水隆博,河野慎治..xv6の構成要素の継続の分析.情報処理学会研究報告,2020. + \bibitem{cross} https://wiki.osdev.org/GCC\_Cross-Compiler + \bibitem{arm} https://developer.arm.com \bibitem{singularity} https://sylabs.io/singularity \bibitem{Gears} 東恩納 琢偉,河野真治.Gears OSでモデル検査を実現する手法について.情報処理学会研究報告2020 \bibitem{xv6} Russ Cox, M Frans Kaashoek, and Robert Morris. Xv6, a simple unix-like teaching operating system,2012. \bibitem{raspi} https://www.raspberrypi.org \bibitem{uefi} https://wiki.osdev.org/UEFI + \bibitem{edk2} https://github.com/tianocore + \bibitem{gnu} https://sourceforge.net/projects/gnu-efi + + \end{thebibliography}
--- a/slide/slide.md Mon Feb 15 21:10:15 2021 +0900 +++ b/slide/slide.md Mon Feb 15 22:17:01 2021 +0900 @@ -82,14 +82,6 @@ --- <!-- class: slide --> -# UEFI Application -- UEFI Boot Managreがロード、実行するプログラムのこと -- C言語で記述可能 -- OSがなくてもプログラムを書ける -- CPUやドライバに依存しない - ---- -<!-- class: slide --> # UEFI 開発環境 - edk2 - gnu-efi @@ -103,6 +95,28 @@ - UEFI Applicationをリンクするためのライブラリがある - UEFI Applicationの開発に特化している - EDK2のファームウェアがベース +--- +<!-- class: slide --> +# qemu +- 異なるアーキテクチャのプログラムを動かすエミュレータ +- 本開発ではX86上でARMを動かした +- gnu-efiで実装したUEFIを動かした + + +--- +<!-- class: slide --> +# singularity +- ユーザーが自身の計算環境を完全再現し、保持できる様にしたLinuxコンテナ +- 学科の新システムで利用できる +- CbC GCC ARM CrossCompile環境を作った +- UEFIの開発環境を作った +--- +<!-- class: slide --> +# UEFI Application +- UEFI Boot Managreがロード、実行するプログラムのこと +- C言語で記述可能 +- OSがなくてもプログラムを書ける +- CPUやドライバに依存しない --- # UEFI Applicationの例 @@ -138,7 +152,6 @@ InitializeLib(ImageHandle, SystemTable); Print(L"Hello, EFI!\n"); - Status = uefi_call_wrapper(BS->OpenProtocol, 6, ImageHandle, &LoadedImageProtocol,(void**)&LoadedImageParent, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); if (EFI_ERROR(Status)) { Print(L"Could not get LoadedImageProtocol handler %r\n", Status); @@ -173,22 +186,14 @@ return EFI_SUCCESS; } ``` - --- -<!-- class: slide --> -# qemu -- 異なるアーキテクチャのプログラムを動かすエミュレータ -- 本開発ではX86上でARMを動かした -- gnu-efiで実装したUEFIを動かした - - ---- -<!-- class: slide --> -# singularity -- ユーザーが自身の計算環境を完全再現し、保持できる様にしたLinuxコンテナ -- 学科の新システムで利用できる -- CbC GCC ARM CrossCompile環境を作った -- UEFIの開発環境を作った +# Boot Loader +- UEFIが起動 +- Boot Managerから起動される +- OSのKernelをメモリにLoadさせる +- Kernelがinitプロセスを起動 +- initプロセスがOSのBootプロセスを起動 +- OSがBootされる --- <!-- class: slide -->