build: Update ISO hybrid creation process
This commit is contained in:
parent
3790d26194
commit
bcdf5baaa9
30
Makefile
30
Makefile
|
@ -262,34 +262,6 @@ iso9660-test:
|
||||||
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table test_image/ -o test.iso
|
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table test_image/ -o test.iso
|
||||||
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
||||||
|
|
||||||
.PHONY: iso9660-uefi-test
|
|
||||||
iso9660-uefi-test:
|
|
||||||
$(MAKE) ovmf
|
|
||||||
$(MAKE) test-clean
|
|
||||||
$(MAKE) test.hdd
|
|
||||||
$(MAKE) limine-uefi
|
|
||||||
$(MAKE) -C test
|
|
||||||
rm -rf test_image/
|
|
||||||
mkdir -p test_image/boot
|
|
||||||
cp -rv bin/* test/* test_image/boot/
|
|
||||||
xorriso -as mkisofs -eltorito-alt-boot -e boot/limine-eltorito-efi.bin -no-emul-boot test_image/ -o test.iso
|
|
||||||
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
|
||||||
|
|
||||||
.PHONY: hybrid-iso9660-test
|
|
||||||
hybrid-iso9660-test:
|
|
||||||
$(MAKE) ovmf
|
|
||||||
$(MAKE) test-clean
|
|
||||||
$(MAKE) limine-uefi
|
|
||||||
$(MAKE) limine-bios
|
|
||||||
$(MAKE) -C test
|
|
||||||
rm -rf test_image/
|
|
||||||
mkdir -p test_image/boot
|
|
||||||
cp -rv bin/* test/* test_image/boot/
|
|
||||||
mkdir -p test_image/EFI/BOOT
|
|
||||||
cp -v bin/BOOTX64.EFI test_image/EFI/BOOT/
|
|
||||||
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/limine-eltorito-efi.bin -no-emul-boot test_image/ -o test.iso
|
|
||||||
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
|
||||||
|
|
||||||
.PHONY: full-hybrid-test
|
.PHONY: full-hybrid-test
|
||||||
full-hybrid-test:
|
full-hybrid-test:
|
||||||
$(MAKE) ovmf
|
$(MAKE) ovmf
|
||||||
|
@ -301,7 +273,7 @@ full-hybrid-test:
|
||||||
rm -rf test_image/
|
rm -rf test_image/
|
||||||
mkdir -p test_image/boot
|
mkdir -p test_image/boot
|
||||||
cp -rv bin/* test/* test_image/boot/
|
cp -rv bin/* test/* test_image/boot/
|
||||||
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table -part_like_isohybrid --mbr-force-bootable -eltorito-alt-boot -e boot/limine-eltorito-efi.bin -no-emul-boot test_image/ -isohybrid-gpt-basdat -o test.iso
|
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot boot/limine-eltorito-efi.bin -efi-boot-part --efi-boot-image --protective-msdos-label test_image/ -o test.iso
|
||||||
bin/limine-install test.iso
|
bin/limine-install test.iso
|
||||||
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
||||||
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -hda test.iso -debugcon stdio
|
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -hda test.iso -debugcon stdio
|
||||||
|
|
84
README.md
84
README.md
|
@ -106,7 +106,7 @@ Use `make install` to install Limine binaries, optionally specifying a prefix wi
|
||||||
|
|
||||||
### UEFI
|
### UEFI
|
||||||
The `BOOTX64.EFI` file is a vaild EFI application that can be simply copied to the
|
The `BOOTX64.EFI` file is a vaild EFI application that can be simply copied to the
|
||||||
`/EFI/BOOT` directory of a FAT32 formatted EFI system partition. This file can be
|
`/EFI/BOOT` directory of a FAT formatted EFI system partition. This file can be
|
||||||
installed there and coexist with a BIOS installation of Limine (see below) so that
|
installed there and coexist with a BIOS installation of Limine (see below) so that
|
||||||
the disk will be bootable by both BIOS and UEFI.
|
the disk will be bootable by both BIOS and UEFI.
|
||||||
|
|
||||||
|
@ -147,69 +147,39 @@ The boot device must to contain the `limine.sys` and `limine.cfg` files in
|
||||||
either the root or the `boot` directory of one of the partitions, formatted
|
either the root or the `boot` directory of one of the partitions, formatted
|
||||||
with a supported file system.
|
with a supported file system.
|
||||||
|
|
||||||
### BIOS CD-ROM ISO creation
|
### BIOS/UEFI hybrid ISO creation
|
||||||
In order to create a bootable BIOS ISO with Limine, place the `limine-cd.bin`,
|
In order to create a hybrid ISO with Limine, place the `limine-eltorito-efi.bin`,
|
||||||
`limine.sys`, and `limine.cfg` files into a directory which will serve as the root
|
`limine-cd.bin`, `limine.sys`, and `limine.cfg` files into a directory which will
|
||||||
of the created ISO.
|
serve as the root of the created ISO.
|
||||||
(`limine.sys` and `limine.cfg` must either be in the root or inside a `boot`
|
(`limine.sys` and `limine.cfg` must either be in the root or inside a `boot`
|
||||||
subdirectory; `limine-cd.bin` can reside anywhere).
|
subdirectory; `limine-eltorito-efi.bin` and `limine-cd.bin` can reside anywhere).
|
||||||
|
|
||||||
Place any other file you want to be on the final ISO in said directory, then run:
|
Place any other file you want to be on the final ISO in said directory, then run:
|
||||||
```
|
```
|
||||||
xorriso -as mkisofs -b <relative path of limine-cd.bin> \
|
xorriso -as mkisofs -b <relative path of limine-cd.bin> \
|
||||||
-no-emul-boot -boot-load-size 4 -boot-info-table <root directory> -o image.iso
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||||||
|
--efi-boot <relative path of limine-eltorito-efi.bin> \
|
||||||
|
-efi-boot-part --efi-boot-image --protective-msdos-label \
|
||||||
|
<root directory> -o image.iso
|
||||||
```
|
```
|
||||||
|
|
||||||
*Note: `xorriso` is required.*
|
*Note: `xorriso` is required.*
|
||||||
|
|
||||||
`<relative path of limine-cd.bin>` is the relative path of `limine-cd.bin` inside
|
And do not forget to also run `limine-install` on the generated image:
|
||||||
the root directory.
|
|
||||||
For example, if it was copied in `<root directory>/boot/limine-cd.bin`, it would be
|
|
||||||
`boot/limine-cd.bin`.
|
|
||||||
|
|
||||||
### UEFI CD-ROM ISO creation
|
|
||||||
In order to create a bootable UEFI ISO with Limine, place the `limine-eltorito-efi.bin`,
|
|
||||||
`limine.sys`, and `limine.cfg` files into a directory which will serve as the root
|
|
||||||
of the created ISO.
|
|
||||||
(`limine.sys` and `limine.cfg` must either be in the root or inside a `boot`
|
|
||||||
subdirectory; `limine-eltorito-efi.bin` can reside anywhere).
|
|
||||||
|
|
||||||
Place any other file you want to be on the final ISO in said directory, then run:
|
|
||||||
```
|
```
|
||||||
xorriso -as mkisofs -eltorito-alt-boot -e <relative path of limine-eltorito-efi.bin> \
|
limine-install image.iso
|
||||||
-no-emul-boot <root directory> -o image.iso
|
|
||||||
```
|
```
|
||||||
|
|
||||||
*Note: `xorriso` is required.*
|
`<relative path of limine-cd.bin>` is the relative path of
|
||||||
|
`limine-cd.bin` inside the root directory.
|
||||||
|
For example, if it was copied in `<root directory>/boot/limine-cd.bin`,
|
||||||
|
it would be `boot/limine-cd.bin`.
|
||||||
|
|
||||||
`<relative path of limine-eltorito-efi.bin>` is the relative path of
|
`<relative path of limine-eltorito-efi.bin>` is the relative path of
|
||||||
`limine-eltorito-efi.bin` inside the root directory.
|
`limine-eltorito-efi.bin` inside the root directory.
|
||||||
For example, if it was copied in `<root directory>/boot/limine-eltorito-efi.bin`,
|
For example, if it was copied in `<root directory>/boot/limine-eltorito-efi.bin`,
|
||||||
it would be `boot/limine-eltorito-efi.bin`.
|
it would be `boot/limine-eltorito-efi.bin`.
|
||||||
|
|
||||||
### BIOS+UEFI CD-ROM ISO creation
|
|
||||||
Additionally, it is possible to combine the 2 aformentioned commands into a single one
|
|
||||||
in order to create a CD ISO which will boot on both BIOS and UEFI:
|
|
||||||
```
|
|
||||||
xorriso -as mkisofs -b <relative path of limine-cd.bin> \
|
|
||||||
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
|
||||||
-eltorito-alt-boot -e <relative path of limine-eltorito-efi.bin> \
|
|
||||||
-no-emul-boot <root directory> -o image.iso
|
|
||||||
```
|
|
||||||
|
|
||||||
### BIOS+UEFI hybrid CD-ROM ISO creation
|
|
||||||
A hybrid ISO that can also be booted when flashed on USB sticks or hard drives
|
|
||||||
can be made with the following commands:
|
|
||||||
```
|
|
||||||
xorriso -as mkisofs -b <relative path of limine-cd.bin> \
|
|
||||||
-no-emul-boot -boot-load-size 4 -boot-info-table -part_like_isohybrid \
|
|
||||||
--mbr-force-bootable \
|
|
||||||
-eltorito-alt-boot -e <relative path of limine-eltorito-efi.bin> \
|
|
||||||
-no-emul-boot <root directory> -isohybrid-gpt-basdat -o image.iso
|
|
||||||
|
|
||||||
limine-install image.iso
|
|
||||||
```
|
|
||||||
|
|
||||||
### BIOS/PXE boot
|
### BIOS/PXE boot
|
||||||
The `limine-pxe.bin` binary is a valid PXE boot image.
|
The `limine-pxe.bin` binary is a valid PXE boot image.
|
||||||
In order to boot Limine from PXE it is necessary to setup a DHCP server with
|
In order to boot Limine from PXE it is necessary to setup a DHCP server with
|
||||||
|
@ -225,28 +195,6 @@ An example `limine.cfg` file can be found in `test/limine.cfg`.
|
||||||
|
|
||||||
More info on the format of `limine.cfg` can be found in `CONFIG.md`.
|
More info on the format of `limine.cfg` can be found in `CONFIG.md`.
|
||||||
|
|
||||||
### Example
|
|
||||||
For example, to create an empty image file of 64MiB in size, 1 echfs partition
|
|
||||||
on the image spanning the whole device, format it, copy the relevant files over,
|
|
||||||
and install Limine, one can do:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
dd if=/dev/zero bs=1M count=0 seek=64 of=test.img
|
|
||||||
parted -s test.img mklabel msdos
|
|
||||||
parted -s test.img mkpart primary 1 100%
|
|
||||||
parted -s test.img set 1 boot on # Workaround for buggy BIOSes
|
|
||||||
|
|
||||||
echfs-utils -m -p0 test.img quick-format 32768
|
|
||||||
echfs-utils -m -p0 test.img import path/to/limine.sys limine.sys
|
|
||||||
echfs-utils -m -p0 test.img import path/to/limine.cfg limine.cfg
|
|
||||||
echfs-utils -m -p0 test.img import path/to/kernel.elf kernel.elf
|
|
||||||
echfs-utils -m -p0 test.img import <path to file> <path in image>
|
|
||||||
...
|
|
||||||
limine-install test.img
|
|
||||||
```
|
|
||||||
|
|
||||||
One can get `echfs-utils` by installing https://github.com/echfs/echfs.
|
|
||||||
|
|
||||||
## Acknowledgments
|
## Acknowledgments
|
||||||
Limine uses a stripped-down version of [tinf](https://github.com/jibsen/tinf).
|
Limine uses a stripped-down version of [tinf](https://github.com/jibsen/tinf).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue