# HG changeset patch # User okud # Date 1613396464 -32400 # Node ID b9113f671decff8d534686f7e90a304356ddfb72 # Parent 0dd66a59256b39c96157dc59ef2c4229fbb12f6b fix slide diff -r 0dd66a59256b -r b9113f671dec slide/slide.md --- 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を応用できる様になる + --- # CbC(Continuation based C) @@ -136,6 +137,8 @@ ``` --- BootLoader.c +- efi_mainの引数設定 + ``` #include #include @@ -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される ---- + +------ -# 研究の成果 -- uefiの開発環境をSingularityで作成した -- GNU-efiで作成したUEFI ApplicationをQEMU-ARMで動かすことができた -- RaspberryPiにUEFIをファームウェアとして設定し、実行することができた -- ミニマムなKernel Loaderを調査しARM xv6用に書き直した - +# 大変だったこと +- EDK2は汎用的だがARMのConfigなどの書き換えが困難 +- UEFI開発の情報が少なく、偏りがあった +- UEFI独特のプログラムの書き方があった +- 低レベルの開発に慣れていなかった --- @@ -214,11 +233,12 @@ - xv6を書き換えたGearsOSを実装する - USB Driverを実装し、キーボードやマウスを使える様にする + + --- -# 大変だったこと -- EDK2は汎用的だがARMのConfigなどの書き換えが困難 -- UEFI開発の情報が少なく、偏りがあった -- UEFI独特のプログラムの書き方があった -- 低レベルの開発に慣れていなかった - +# 研究の成果 +- UEFIの開発環境をSingularityで作成した +- gnu-efiで作成したUEFI ApplicationをQEMU-ARMで動かすことができた +- RaspberryPiにUEFIをファームウェアとして設定し、実行することができた +- ミニマムなKernel Loaderを調査しARM xv6用に書き直した diff -r 0dd66a59256b -r b9113f671dec slide/slide.pdf Binary file slide/slide.pdf has changed