中古のノートパソコンであっても直近5年程度のものであれば、どうやらUEFIがexFATに対応しているらしい。
とても簡単にいうと、
・/EFI/BOOT/BOOT64.EFI
というフォルダとファイルを作ると、BOOT64.EFIというEFIアプリケーションが起動される。
オプション多めのコンパイルをして、DELL5415とDELL5405で試したところ、きちんと起動し動作した。
使用したファイル群は、
・gnu-efi
・minGW64
の二つ。どちらもライセンス上オープンソースで配ることになる。
ある程度完成したらば公開する。
もう一つ、qemuなどの仮想化アプリを使いたいが、試したところ、起動せず。
SDカードスロットを持つノートPCが手元に良くありました。
こちらのサイトの4番をせず、9番は開発マシンの他でSDカードをブートしました。
特に、3番と6番と7番は、メモ必須なので、コピペを書いておきます。
3.gnu-efiのダウンロードと解凍とdata.cファイルの変更
sourceforgeのgnu-efi
https://sourceforge.net/projects/gnu-efi/
へ行って
Download
をクリックして、tar.bz2ファイルをダウンロードします。
「gnu-efi-3.0.14.tar.bz2」というファイルがダウンロードされるので、これを展開します。
展開したら「gnu-efi-3.0.14.tar」というファイルができるので、これを展開します。
展開したら「gnu-efi-3.0.14」というファイルができるので、これを名前を「gnu-efi」にして、Cドライブの直下に移動させます。
data.cファイルを変更します。
C:gnu-efilibdata.cの
EFI_UNICODE_COLLATION_INTERFACE LibStubUnicodeInterface = {
LibStubStriCmp,
LibStubMetaiMatch,
LibStubStrLwrUpr,
LibStubStrLwrUpr,
NULL, // FatToStr
NULL, // StrToFat
NULL // SupportedLanguages
};
を
EFI_UNICODE_COLLATION_INTERFACE LibStubUnicodeInterface = {
NULL,
NULL,
NULL,
NULL,
NULL, // FatToStr
NULL, // StrToFat
NULL // SupportedLanguages
};
に変えます。
//hello.c
#include
#include
EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
EFI_STATUS Status;
EFI_INPUT_KEY Key;
/* Store the system table for future use in other functions */
ST = SystemTable;
/* Say hi */
Status = ST->ConOut->OutputString(ST->ConOut, L"Hello World
"); // EFI Applications use Unicode and CRLF, a la Windows
if (EFI_ERROR(Status))
return Status;
/* Now wait for a keystroke before continuing, otherwise your
message will flash off the screen before you see it.
First, we need to empty the console input buffer to flush
out any keystrokes entered before this point */
Status = ST->ConIn->Reset(ST->ConIn, FALSE);
if (EFI_ERROR(Status))
return Status;
/* Now wait until a key becomes available. This is a simple
polling implementation. You could try and use the WaitForKey
event instead if you like */
while ((Status = ST->ConIn->ReadKeyStroke(ST->ConIn, &Key)) == EFI_NOT_READY) ;
return Status;
}
7.バッチファイルの作成とBOOTX64.EFIの作成
build.cmdというファイルを作成し、
c:mingw64ingcc.exe -fpic -ffreestanding -fno-stack-protector -fno-stack-check -fshort-wchar -mno-red-zone -maccumulate-outgoing-args -Ic:gnu-efiinc -Ic:gnu-efiincx86_64 -Ic:gnu-efiincprotocol -c main.c -o main.o
c:mingw64ingcc.exe -fpic -ffreestanding -fno-stack-protector -fno-stack-check -fshort-wchar -mno-red-zone -maccumulate-outgoing-args -Ic:gnu-efiinc -Ic:gnu-efiincx86_64 -Ic:gnu-efiincprotocol -c c:gnu-efilibdata.c -o data.o
c:mingw64inld.exe -nostdlib -shared -e efi_main main.o data.o -o BOOTX64.bin
c:mingw64inobjcopy.exe --target efi-app-x86_64 --subsystem=10 BOOTX64.bin BOOTX64.EFI
を書き、保存します。
build.cmdをクリックし、BOOTX64.EFIを作成します。
作りたいOSは、テキストのみで文法も操作も簡単なもの。
OSの名前は、Memory Castleに決めています。
少し頑張ってみます。