comparison slide/slide.md @ 18:e8a0f9380734

paper fix
author okud
date Mon, 15 Feb 2021 21:10:15 +0900
parents c977b5f82b9f
children 0dd66a59256b
comparison
equal deleted inserted replaced
17:7aa7bb77556c 18:e8a0f9380734
6 theme: default 6 theme: default
7 size: 16:9 7 size: 16:9
8 style: | 8 style: |
9 section { 9 section {
10 background-color: #FFFFFF; 10 background-color: #FFFFFF;
11 font-size: 28px; 11 font-size: 40px;
12 color: #4b4b4b; 12 color: #4b4b4b;
13 font-family: "Arial", "Hiragino Maru Gothic ProN"; 13 font-family: "Arial", "Hiragino Maru Gothic ProN";
14 } 14 }
15 15
16 section.title { 16 section.title {
53 # CbC(Continuation based C) 53 # CbC(Continuation based C)
54 - 並列信頼研究で開発されているプログラミング言語 54 - 並列信頼研究で開発されているプログラミング言語
55 - C言語の下位言語 55 - C言語の下位言語
56 - 関数呼び出しではなく継続(goto) 56 - 関数呼び出しではなく継続(goto)
57 - 関数の代わりにCodeGearという単位でプログラミングを行う。 57 - 関数の代わりにCodeGearという単位でプログラミングを行う。
58
59 ---
60 <!-- class: slide -->
61
62 ![CbCの遷移](images/CbC.png)
63
64
65
66 58
67 --- 59 ---
68 <!-- class: slide --> 60 <!-- class: slide -->
69 # GearsOS 61 # GearsOS
70 - 並列信頼研究で開発されているOS 62 - 並列信頼研究で開発されているOS
97 - CPUやドライバに依存しない 89 - CPUやドライバに依存しない
98 90
99 --- 91 ---
100 <!-- class: slide --> 92 <!-- class: slide -->
101 # UEFI 開発環境 93 # UEFI 開発環境
102 - EDK2 94 - edk2
103 - gnu-efi 95 - gnu-efi
104 96 - qemu
105 --- 97 - singularity
106 <!-- class: slide -->
107 # EDK2
108 - 独自のビルドシステムをもつ大規模で複雑な環境
109 - CrossCompilerとしてGCC、MinGW、Microsoft Visual C++などが使用できる
110 - UEFI Application のコンパイルだけでなくBIOS ROMにフラッシュするUEFIファームウェアのコンパイルにも利用できる
111 98
112 --- 99 ---
113 <!-- class: slide --> 100 <!-- class: slide -->
114 # gnu-efi 101 # gnu-efi
115 - システムのネイティブGCCでUEFIアプリケーションをコンパイルできる 102 - システムのネイティブGCCでUEFIアプリケーションをコンパイルできる
116 - UEFI Applicationをリンクするためのライブラリがある 103 - UEFI Applicationをリンクするためのライブラリがある
117 - UEFI Applicationの開発に特化している 104 - UEFI Applicationの開発に特化している
118 105 - EDK2のファームウェアがベース
119 --- 106
120 <!-- class: slide --> 107 ---
121 # UEFIによるGearsOSのBoot 108 # UEFI Applicationの例
122 109 Hello.c
123 --- 110 ```
124 <!-- class: slide --> 111 #include <efi.h>
125 # まとめ(デモ???) 112 #include <efilib.h>
126 113
114 EFI_STATUS
115 EFIAPI
116 efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
117 {
118 InitializeLib(ImageHandle, SystemTable);
119 Print(L"Hello, world!\n");
120 return EFI_SUCCESS;
121 }
122 ```
123 ---
124 BootLoader.c
125 ```
126 #include<efi.h>
127 #include<efilib.h>
128
129 EFI_STATUS
130 efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
131 {
132 EFI_DEVICE_PATH *Path;
133 EFI_LOADED_IMAGE *LoadedImageParent;
134 EFI_LOADED_IMAGE *LoadedImage;
135 EFI_HANDLE Image;
136 CHAR16 *Options = L"root=/dev/sda2 rootfstype=btrfs rw quiet splash";
137 EFI_STATUS Status=EFI_SUCCESS;
138
139 InitializeLib(ImageHandle, SystemTable);
140 Print(L"Hello, EFI!\n");
141
142 Status = uefi_call_wrapper(BS->OpenProtocol, 6, ImageHandle, &LoadedImageProtocol,(void**)&LoadedImageParent, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
143 if (EFI_ERROR(Status)) {
144 Print(L"Could not get LoadedImageProtocol handler %r\n", Status);
145 return Status;
146 }
147 Path = FileDevicePath(LoadedImageParent->DeviceHandle, L"\\xv6.img");
148 if (Path == NULL) {
149 Print(L"Could not get device path.");
150 return EFI_INVALID_PARAMETER;
151 }
152 Status = uefi_call_wrapper(BS->LoadImage, 6, FALSE, ImageHandle, Path, NULL, 0, &Image);
153 if (EFI_ERROR(Status)) {
154 Print(L"Could not load %r", Status);
155 FreePool(Path);
156 return Status;
157 }
158 Status = uefi_call_wrapper(BS->OpenProtocol, 6, Image, &LoadedImageProtocol, (void**)&LoadedImage, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
159 if (EFI_ERROR(Status)) {
160 Print(L"Could not get LoadedImageProtocol handler %r\n", Status);
161 uefi_call_wrapper(BS->UnloadImage, 1, Image);
162 FreePool(Path);
163 return Status;
164 }
165 LoadedImage->LoadOptions = Options;
166 LoadedImage->LoadOptionsSize = (StrLen(LoadedImage->LoadOptions)+1) * sizeof(CHAR16);
167
168 Print(L"Hello,6!\n");
169 Status = uefi_call_wrapper(BS->StartImage, 3, Image, NULL, NULL);
170 uefi_call_wrapper(BS->UnloadImage, 1, Image);
171 FreePool(Path);
172
173 return EFI_SUCCESS;
174 }
175 ```
176
177 ---
178 <!-- class: slide -->
179 # qemu
180 - 異なるアーキテクチャのプログラムを動かすエミュレータ
181 - 本開発ではX86上でARMを動かした
182 - gnu-efiで実装したUEFIを動かした
183
184
185 ---
186 <!-- class: slide -->
187 # singularity
188 - ユーザーが自身の計算環境を完全再現し、保持できる様にしたLinuxコンテナ
189 - 学科の新システムで利用できる
190 - CbC GCC ARM CrossCompile環境を作った
191 - UEFIの開発環境を作った
192
193 ---
194 <!-- class: slide -->
195 # 研究の成果
196 - uefiの開発環境をSingularityで作成した
197 - GNU-efiで作成したUEFI ApplicationをQEMU-ARMで動かすことができた
198 - RaspberryPiにUEFIをファームウェアとして設定し、実行することができた
199 - ミニマムなKernel Loaderを調査しARM xv6用に書き直した
200
201
202 ---
203 <!-- class: slide -->
204 # 今後の課題
205
206 - Singularity上のqemu-system-armにgdbを接続する
207 - そのgdbでKernel Loaderをでバックする
208 - xv6 KernelにUEFIからBootするコードを入れる
209 - xv6を書き換えたGearsOSを実装する
210 - USB Driverを実装し、キーボードやマウスを使える様にする
211
212 ---
213 <!-- class: slide -->
214 # 大変だったこと
215 - EDK2は汎用的だがARMのConfigなどの書き換えが困難
216 - UEFI開発の情報が少なく、偏りがあった
217 - UEFI独特のプログラムの書き方があった
218 - 低レベルの開発に慣れていなかった
219