Mercurial > hg > Papers > 2021 > okud-thesis
changeset 20:b9113f671dec
fix slide
author | okud |
---|---|
date | Mon, 15 Feb 2021 22:41:04 +0900 |
parents | 0dd66a59256b |
children | 1769ede4d434 |
files | slide/slide.md slide/slide.pdf |
diffstat | 2 files changed, 36 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/slide.md Mon Feb 15 22:17:01 2021 +0900 +++ b/slide/slide.md Mon Feb 15 22:41:04 2021 +0900 @@ -48,6 +48,7 @@ - CPUなどの機種依存性を避けることができる - GearsOSはCbC(Continuation based C)で記述されていて、CPUやデバイスに影響されない - 様々な組み込みシステムに対してGearsOSを応用できる様になる + --- <!-- class: slide --> # CbC(Continuation based C) @@ -136,6 +137,8 @@ ``` --- BootLoader.c +- efi_mainの引数設定 + ``` #include<efi.h> #include<efilib.h> @@ -152,7 +155,13 @@ 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); +``` +--- +- OSファイルのファイルパスを代入している +``` + 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); return Status; @@ -162,13 +171,22 @@ Print(L"Could not get device path."); return EFI_INVALID_PARAMETER; } +``` +--- +- KernelをLoadしている +``` Status = uefi_call_wrapper(BS->LoadImage, 6, FALSE, ImageHandle, Path, NULL, 0, &Image); if (EFI_ERROR(Status)) { Print(L"Could not load %r", Status); FreePool(Path); return Status; } - Status = uefi_call_wrapper(BS->OpenProtocol, 6, Image, &LoadedImageProtocol, (void**)&LoadedImage, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); +``` +--- +- ImageをLoadしてKernelを起動している +``` + Status = uefi_call_wrapper(BS->OpenProtocol, 6, Image, &LoadedImageProtocol, + (void**)&LoadedImage, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); if (EFI_ERROR(Status)) { Print(L"Could not get LoadedImageProtocol handler %r\n", Status); uefi_call_wrapper(BS->UnloadImage, 1, Image); @@ -177,8 +195,9 @@ } LoadedImage->LoadOptions = Options; LoadedImage->LoadOptionsSize = (StrLen(LoadedImage->LoadOptions)+1) * sizeof(CHAR16); + Print(L"Hello,6!\n"); + - Print(L"Hello,6!\n"); Status = uefi_call_wrapper(BS->StartImage, 3, Image, NULL, NULL); uefi_call_wrapper(BS->UnloadImage, 1, Image); FreePool(Path); @@ -195,14 +214,14 @@ - initプロセスがOSのBootプロセスを起動 - OSがBootされる ---- + +------ <!-- class: slide --> -# 研究の成果 -- uefiの開発環境をSingularityで作成した -- GNU-efiで作成したUEFI ApplicationをQEMU-ARMで動かすことができた -- RaspberryPiにUEFIをファームウェアとして設定し、実行することができた -- ミニマムなKernel Loaderを調査しARM xv6用に書き直した - +# 大変だったこと +- EDK2は汎用的だがARMのConfigなどの書き換えが困難 +- UEFI開発の情報が少なく、偏りがあった +- UEFI独特のプログラムの書き方があった +- 低レベルの開発に慣れていなかった --- <!-- class: slide --> @@ -214,11 +233,12 @@ - xv6を書き換えたGearsOSを実装する - USB Driverを実装し、キーボードやマウスを使える様にする + + --- <!-- class: slide --> -# 大変だったこと -- EDK2は汎用的だがARMのConfigなどの書き換えが困難 -- UEFI開発の情報が少なく、偏りがあった -- UEFI独特のプログラムの書き方があった -- 低レベルの開発に慣れていなかった - +# 研究の成果 +- UEFIの開発環境をSingularityで作成した +- gnu-efiで作成したUEFI ApplicationをQEMU-ARMで動かすことができた +- RaspberryPiにUEFIをファームウェアとして設定し、実行することができた +- ミニマムなKernel Loaderを調査しARM xv6用に書き直した