fuchsia誘導プロセス分析
1830 ワード
fuchsiaはx 64に対してuefiを用いて起動し、以下に起動過程を分析する.
uefiのブートエントリはefi_main、これはアプリケーションフェーズのエントリです
まず340行xefi_initは4つのグローバル変数gSys=sysを初期化しました//efi_system_table gImg = img;//efi_handle img gBS = sys->BootServices; gConOut = sys->ConOut;
341行クリーンアップ操作343はusb 3.0デバイスのioマッピングアドレスを見つけ、関数のパラメータについてclass codeの紹介参照https://blog.csdn.net/pankul/article/details/8603632344-348行cmdline_setは見つけたアドレスをkey xdc.に従う.mmioは353-354行格納してcmdlineファイルを読み出し、内容をkey value形式で格納する
370-373行出力コンソールの明るさと色、返却bootloaderバージョン文字を設定
次に390-395行分1 mから6 mメモリをkernel空間に割り当て、割り当てに失敗すると6 mではなく3 mを割り当てる.
413-432行、NICが使用可能かどうかを検出し、netboot_に返信します.nodename 434行印刷cmdline 440行ロードzedboot.bin 441行検証zedboot.binファイル、そしてファイルのタイプを確定して、IMAGE_COMBOは、同じミラーにkernelとramdiskが混在するタイプを表します.
482行ネットワークインタフェースがない場合はzedbootを使用して起動する必要があります.zedboot kernelが存在しない場合はkernelを使用して起動し、3つが存在しない場合はfailプロセスへの起動を続行できません.
490-573行は主にいくつかのユーザー操作のオプションを設定し、bキーを押して起動メニューを印刷し、nキーでネットワーク起動を実行し、mキーでzedbootまたはローカル起動を実行し、zでzedbootを実行する.
uefiのブートエントリはefi_main、これはアプリケーションフェーズのエントリです
339 EFIAPI efi_status efi_main(efi_handle img, efi_system_table* sys) {
340 xefi_init(img, sys);
341 gConOut->ClearScreen(gConOut);
342
343 uint64_t mmio;
344 if (xefi_find_pci_mmio(gBS, 0x0C, 0x03, 0x30, &mmio) == EFI_SUCCESS) {
345 char tmp[32];
346 sprintf(tmp, "%#" PRIx64 , mmio);
347 cmdline_set("xdc.mmio", tmp);
348 }
349
350 // Load the cmdline
351 size_t csz = 0;
352 char* cmdline_file = xefi_load_file(L"cmdline", &csz, 0);
353 if (cmdline_file) {
354 cmdline_append(cmdline_file, csz);
355 }
356
357 efi_graphics_output_protocol* gop;
358 efi_status status = gBS->LocateProtocol(&GraphicsOutputProtocol, NULL,
359 (void**)&gop);
まず340行xefi_initは4つのグローバル変数gSys=sysを初期化しました//efi_system_table gImg = img;//efi_handle img gBS = sys->BootServices; gConOut = sys->ConOut;
341行クリーンアップ操作343はusb 3.0デバイスのioマッピングアドレスを見つけ、関数のパラメータについてclass codeの紹介参照https://blog.csdn.net/pankul/article/details/8603632344-348行cmdline_setは見つけたアドレスをkey xdc.に従う.mmioは353-354行格納してcmdlineファイルを読み出し、内容をkey value形式で格納する
370-373行出力コンソールの明るさと色、返却bootloaderバージョン文字を設定
次に390-395行分1 mから6 mメモリをkernel空間に割り当て、割り当てに失敗すると6 mではなく3 mを割り当てる.
413-432行、NICが使用可能かどうかを検出し、netboot_に返信します.nodename 434行印刷cmdline 440行ロードzedboot.bin 441行検証zedboot.binファイル、そしてファイルのタイプを確定して、IMAGE_COMBOは、同じミラーにkernelとramdiskが混在するタイプを表します.
482行ネットワークインタフェースがない場合はzedbootを使用して起動する必要があります.zedboot kernelが存在しない場合はkernelを使用して起動し、3つが存在しない場合はfailプロセスへの起動を続行できません.
490-573行は主にいくつかのユーザー操作のオプションを設定し、bキーを押して起動メニューを印刷し、nキーでネットワーク起動を実行し、mキーでzedbootまたはローカル起動を実行し、zでzedbootを実行する.