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