972
edits
[unchecked revision] | [unchecked revision] |
m (→Prerequisites: Added link to GNU-EFI page) |
m (Bot: Replace deprecated source tag with syntaxhighlight) |
||
(19 intermediate revisions by 7 users not shown) | |||
Line 10:
== Prerequisites ==
Under an apt-based system (e.g. Debian/Ubuntu), developers can run <source lang="bash">sudo apt-get install qemu binutils-mingw-w64 gcc-mingw-w64 xorriso mtools▼
To build the EFI filesystem image, developers can use [[MTools]] or [https://github.com/jncronin/mkgpt '''mkgpt'''] to create a hard disk image. To build a CD image, '''xorriso''' (in [[mkisofs]] emulation mode) will be needed. To run under an emulator, it is best to use '''qemu-system-x86_64''' coupled with the [http://tianocore.sourceforge.net/wiki/OVMF '''x64 OVMF firmware'''].
▲Under an apt-based system (e.g. Debian/Ubuntu), developers can run: <
To install mkgpt you can run these commands:<syntaxhighlight lang="bash">git clone https://github.com/jncronin/mkgpt.git
cd mkgpt
automake --add-missing
autoreconf
./configure
make
sudo make install</syntaxhighlight>
== Testing the emulator ==
Line 20 ⟶ 28:
Now is a good time to check the emulator is working successfully with the OVMF firmware.
<
== Preparing the files ==
Line 27 ⟶ 35:
Next, create a file with the following:
<
#include <efilib.h>
Line 58 ⟶ 66:
return Status;
}</
=== gnu-efi/lib/data.c ===
Line 71 ⟶ 79:
To build, use the cross-compiler:
<
# compile: (flags before -o become CFLAGS in the Makefile)
x86_64-w64-mingw32-gcc -ffreestanding -Ipath/to/gnu-efi/inc -Ipath/to/gnu-efi/inc/x86_64 -Ipath/to/gnu-efi/inc/protocol -c -o hello.o hello.c
x86_64-w64-mingw32-gcc -ffreestanding -Ipath/to/gnu-efi/inc -Ipath/to/gnu-efi/inc/x86_64 -Ipath/to/gnu-efi/inc/protocol -c -o data.o path/to/gnu-efi/lib/data.c
# link: (flags before -o become LDFLAGS in the Makefile)
x86_64-w64-mingw32-gcc -nostdlib -Wl,-dll -shared -Wl,--subsystem,10 -e efi_main -o BOOTX64.EFI hello.o data.o
</syntaxhighlight>
Note here that '--subsystem 10' specifies an EFI application for ld.
Line 83 ⟶ 91:
The build sequence under LLVM/clang is essentially the same, although there is the advantage of having ''all'' targets installed by default:
<
CFLAGS='-target x86_64-unknown-windows
-ffreestanding
Line 97 ⟶ 105:
clang $CFLAGS -c -o data.o path/to/gnu-efi/lib/data.c
clang $LDFLAGS -o BOOTX64.EFI hello.o data.o
</syntaxhighlight>
Passing '--target x86_64-unknown-windows' to clang tells it to compile for x86_64 "Windows". This is quite not the same as 64-bit UEFI PE yet, but as before the "freestanding" part makes it a good kernel image. An example of this toolchain is found in the [https://github.com/c-util/c-efi c-efi] project.
Line 107 ⟶ 115:
Next, create a FAT filesystem image.
<
dd if=/dev/zero of=fat.img bs=1k count=1440
mformat -i fat.img -f 1440 ::
Line 113 ⟶ 121:
mmd -i fat.img ::/EFI/BOOT
mcopy -i fat.img BOOTX64.EFI ::/EFI/BOOT
</syntaxhighlight>
=== Running as a USB stick image ===
Line 119 ⟶ 127:
The FAT image can either be written directly to a USB stick and used in in a UEFI machine, or it can be run directly in QEMU:
<
=== Creating and running the HD image ===
Line 125 ⟶ 133:
The HD image is a disk image in the [[GPT]] format, with the FAT image specially identified as a 'EFI System Partition'.
<
qemu-system-x86_64 -L OVMF_dir/ -
=== Creating and running the CD image ===
The ISO image is a standard ISO9660 image which contains the FAT image as a file. A special El Torito option (-e) then points EFI aware systems to this image to be loaded. The CD image can either be burned to a CD and ran in a UEFI machine, or run directly in QEMU:
<
cp fat.img iso
xorriso -as mkisofs -R -f -e fat.img -no-emul-boot -o cdimage.iso iso
qemu-system-x86_64 -L OVMF_dir/ -
== What to do next? ==
Developers may want to try using some more of the EFI boot services, e.g., to [[Loading files under UEFI|read more files]] from the FAT image, manage memory, set up [[GOP|graphical frame buffer]] etc. (see the [http://www.uefi.org/specifications UEFI Specifications] page for further documentation of this).
There is also a finished app bare bone which supports both Linux and Windows (Visual Studio), see [https://github.com/pbatard/uefi-simple uefi-simple].
Line 150 ⟶ 158:
* [[UEFI ISO Bare Bones]]
* [[GNU-EFI]]
* [[POSIX-UEFI]]
[[Category:Bare bones tutorials]]
|