| 正式名称 | 最大ディスク容量 | パーティション数 | ブート方式 | EFIブート可否 | パーティション情報の場所 | コマンド |
|---|---|---|---|---|---|---|
| MBR(Master Boot Record) | 約2TBまで | 最大4 | BIOS専用(レガシー) | できない | 先頭512bite | convert mbr |
| GPT(GUID Partition Table) | 理論上9.4ZB | 128以上(実質無制限) | UEFI専用 | できる | 先頭+末尾に冗長コピー | convert gpt |
| FAT12 | |
|---|---|
| FAT16 | |
| FAT32 | UEFIで読み込める |
| exFT | |
| NTFS | |
| ext4 |
| コマンド | 種別 | 説明 |
|---|---|---|
| sum [filename] | linux | チェックサムを計算する |
| certutil -hashfile [filepath] [hashaalgorithm] | dos | チェックサムを計算する |
| dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart | powershell | Linux用サブシステムを有効にする |
| dism.exe /online /enable-feature /featurename:VirtualMathinePlatform /all /norestart | powershell | 仮想マシンプラットフォームを有効にする |
| wsl --list --online | powershell | wslで利用可能なLinuxディストリビューション一覧を表示 |
| wsl --install [distName] | powershell | [distName]で指定したLinuxをwslでインストールする |
| wsl --unregister [distName] | powershell | 指定したLinuxをwslから削除する |
| 設定項目 | 設定値 |
|---|---|
| ACTIVE_PLATFORM | MikanLoaderPkg/MikanLoaderPkg.dsc |
| TARGET | DEBUG |
| TARGET_ARCH | X64 |
| TOOL_CHAIN_TAG | CLANG38 |
実行のためのshファイルが用意されている
| -O2 | レベル2の最適化を行う |
|---|---|
| -Wall | 警告を沢山出す |
| -g | デバック情報付きでコンパイルする |
| --target=x86_64-elf | x86_64向けの機械語を生成する。 |
| ffreestanding | フリースタンディング環境向けにコンパイルする |
| -mno-red-zone | Red Zone機能を無効にする。 |
| -fno-exceptions | C++の例外機能を使わない。 |
| -fno-rtti | C++の動的型情報を使わない |
| -std=c++17 | C++のバージョンをC++17とする |
| -c | コンパイルする。リンクはしない |
| --entry KernelMain | KernelMain()をエントリポイントとする。 |
|---|---|
| -z norelro | リロケーション情報を読み込み専用にする機能を使わない。 |
| --image-base 0x100000 | 出力されたバイナリのベースアドレスを0x100000番地とする。 |
| -o kernel.elf | 出力ファイル名をkernel.elfとする。 |
| --static | 静的リンクを行う。 |
Makeはコンパイルやリンク作業を自動化するツール
| 変数名 | 意味 |
|---|---|
| TARGET | Makefileが作成する最終成果物の名前 |
| OBJS | TARGETを作るのに必要なオブジェクトファイル群 |
| CXXFLAGS | コンパイルオプション |
| LDFLAGS | リンクオプション |
| 変数名 | 説明 |
|---|---|
| @< | 必須項目の先頭一つ |
| $^ | 必須項目すべてをスペース区切りで並べたもの |
| $@ | ターゲット(拡張子含む) |
| $* | パターンルールにおける幹(stem) |
PE,COFF,ELFはいずれも機械語を格納するファイル形式。いずれもx86-64CPUの機械語を拭くことができる。ファイル内部の表現は異なる。
| 実行可能ファイル | ||
|---|---|---|
| スクリプト | インタプリタで実行する。 | |
| 機械語プログラム | PE形式 | 機械語プログラムの実行可能ファイルのためのファイル形式。Windows標準。PE形式のファイルを「.exe」拡張子としている。 |
| COFF形式 | オブジェクトファイル形式。PE形式のファイルを作る過程の中間ファイル形式としてCOFFF形式を使うことが多い。COFF形式のオブジェクトファイルをリンクしてPE形式の実行可能ファイルを作る。この流れが一般的。 | |
| ELF形式 (Executable and Linkable Format) | 機械語プログラムの実行可能ファイルのためのファイル形式。Linux標準。オブジェクトファイルも表せる。 | |
プログラムとCPUの相互作用を機械語レベルで規定する。例えば必要なレジスタやメモリの使いかたがABIによって決まる。コンパイラはABIに従って機械語を生成する。
| System V AMD64 ABI | Linux標準 |
| Microsoft x64 ABI | Windowsで使われている x64(引数:RDI,RSI,RDX,RCX,R8,R9/戻り値:RAX,RDX) x86(引数:スタック) 関数呼び出しの前後では[RSP,RBP,RBX,R12~R15]の7個のレジスタの値が保たれていなければならない。これ以外は呼び出された関数が自由に書き換えていい |
| 項目 | |
| 呼出規約(Calling Convention) | 関数を呼び出す際の決まり事 |
| 単語 | カテゴリー | 説明 |
|---|---|---|
| ブートサービス | UEFI | OSを起動するために必要な機能を提供する |
| ランタイムサービス | UEFI | OS起動前、起動後どちらでも使える機能 |
| ホスト環境(hosted environment) | C++の動作環境 | OS上で動くプログラムのための環境。そのためのコンパイル方法 |
| フリースタンディング環境(freestanding environment) | C++の動作環境 | OSなしで動くプログラムのための環境。そのためのコンパイル方法 |
| 関数 | 引数 | 戻り値 | 説明 |
|---|---|---|---|
| Print() | L""で表現するワイド文字を利用する | 文字列を表示 | |
| OpenRootDir() | 書き込み先のファイルを開く | ||
| root_dir_Open() | |||