host: Condense various host utilities into a single executable
This commit is contained in:
parent
eba0183b6e
commit
7ad444936e
24
.github/workflows/release.yml
vendored
24
.github/workflows/release.yml
vendored
@ -41,26 +41,14 @@ jobs:
|
|||||||
- name: Build the bootloader
|
- name: Build the bootloader
|
||||||
run: make -C build
|
run: make -C build
|
||||||
|
|
||||||
- name: Clean limine-version
|
- name: Clean limine
|
||||||
run: rm build/bin/limine-version
|
run: rm build/bin/limine
|
||||||
|
|
||||||
- name: Clean limine-enroll-config
|
- name: Build limine for Windows
|
||||||
run: rm build/bin/limine-enroll-config
|
run: make -C build/bin CC="i686-w64-mingw32-gcc" CFLAGS="-O2 -pipe" CPPFLAGS="-D__USE_MINGW_ANSI_STDIO" limine
|
||||||
|
|
||||||
- name: Build limine-enroll-config-win32
|
- name: Strip limine for Windows
|
||||||
run: make -C build/bin CC="i686-w64-mingw32-gcc" CFLAGS="-O2 -pipe" CPPFLAGS="-D__USE_MINGW_ANSI_STDIO" limine-enroll-config
|
run: i686-w64-mingw32-strip build/bin/limine.exe
|
||||||
|
|
||||||
- name: Strip limine-enroll-config-win32
|
|
||||||
run: i686-w64-mingw32-strip build/bin/limine-enroll-config.exe
|
|
||||||
|
|
||||||
- name: Clean limine-deploy
|
|
||||||
run: rm build/bin/limine-deploy
|
|
||||||
|
|
||||||
- name: Build limine-deploy-win32
|
|
||||||
run: make -C build/bin CC="i686-w64-mingw32-gcc" CFLAGS="-O2 -pipe" CPPFLAGS="-D__USE_MINGW_ANSI_STDIO" limine-deploy
|
|
||||||
|
|
||||||
- name: Strip limine-deploy-win32
|
|
||||||
run: i686-w64-mingw32-strip build/bin/limine-deploy.exe
|
|
||||||
|
|
||||||
- name: Copy LICENSE to bin
|
- name: Copy LICENSE to bin
|
||||||
run: cp LICENSE build/bin/
|
run: cp LICENSE build/bin/
|
||||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -33,9 +33,7 @@
|
|||||||
/config.status
|
/config.status
|
||||||
/config.log
|
/config.log
|
||||||
/autom4te.cache
|
/autom4te.cache
|
||||||
/man/man1/limine-version.1
|
/man/man1/limine.1
|
||||||
/man/man1/limine-deploy.1
|
|
||||||
/man/man1/limine-enroll-config.1
|
|
||||||
/GNUmakefile
|
/GNUmakefile
|
||||||
/config.h
|
/config.h
|
||||||
/common-bios
|
/common-bios
|
||||||
|
@ -41,7 +41,6 @@ override BUILD_UEFI_AARCH64 := @BUILD_UEFI_AARCH64@
|
|||||||
override BUILD_CD_EFI := @BUILD_CD_EFI@
|
override BUILD_CD_EFI := @BUILD_CD_EFI@
|
||||||
override BUILD_PXE := @BUILD_PXE@
|
override BUILD_PXE := @BUILD_PXE@
|
||||||
override BUILD_CD := @BUILD_CD@
|
override BUILD_CD := @BUILD_CD@
|
||||||
override BUILD_LIMINE_DEPLOY := @BUILD_LIMINE_DEPLOY@
|
|
||||||
|
|
||||||
$(eval $(call DEFAULT_VAR,CC,@CC@))
|
$(eval $(call DEFAULT_VAR,CC,@CC@))
|
||||||
export CC
|
export CC
|
||||||
@ -95,40 +94,31 @@ all: $(call MKESCAPE,$(BINDIR))/Makefile
|
|||||||
$(MAKE) all1
|
$(MAKE) all1
|
||||||
|
|
||||||
.PHONY: all1
|
.PHONY: all1
|
||||||
all1: limine-version limine-enroll-config $(BUILD_UEFI_X86_64) $(BUILD_UEFI_IA32) $(BUILD_UEFI_AARCH64) $(BUILD_BIOS)
|
all1: $(BUILD_UEFI_X86_64) $(BUILD_UEFI_IA32) $(BUILD_UEFI_AARCH64) $(BUILD_BIOS)
|
||||||
|
$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine'
|
||||||
$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine-cd-efi.bin'
|
$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine-cd-efi.bin'
|
||||||
|
|
||||||
$(call MKESCAPE,$(BINDIR))/limine-hdd.h: $(call MKESCAPE,$(BINDIR))/limine-hdd.bin
|
$(call MKESCAPE,$(BINDIR))/limine-hdd.h: $(call MKESCAPE,$(BINDIR))/limine-hdd.bin
|
||||||
$(MKDIR_P) '$(call SHESCAPE,$(BINDIR))'
|
$(MKDIR_P) '$(call SHESCAPE,$(BINDIR))'
|
||||||
cd '$(call SHESCAPE,$(BINDIR))' && '$(call SHESCAPE,$(SRCDIR))/host/hgen.sh' >limine-hdd.h
|
cd '$(call SHESCAPE,$(BINDIR))' && '$(call SHESCAPE,$(SRCDIR))/host/hgen.sh' >limine-hdd.h
|
||||||
|
|
||||||
$(call MKESCAPE,$(BINDIR))/limine-deploy: $(call MKESCAPE,$(BINDIR))/Makefile $(call MKESCAPE,$(SRCDIR))/host/limine-deploy.c $(call MKESCAPE,$(BINDIR))/limine-hdd.h
|
ifeq ($(BUILD_BIOS),limine-bios)
|
||||||
cp '$(call SHESCAPE,$(SRCDIR))/host/limine-deploy.c' '$(call SHESCAPE,$(BINDIR))/'
|
$(call MKESCAPE,$(BINDIR))/limine: $(call MKESCAPE,$(BINDIR))/Makefile $(call MKESCAPE,$(SRCDIR))/host/limine.c $(call MKESCAPE,$(BINDIR))/limine-hdd.h
|
||||||
$(MAKE) -C '$(call SHESCAPE,$(BINDIR))' limine-deploy
|
else
|
||||||
|
override LIMINE_NO_BIOS := -DLIMINE_NO_BIOS
|
||||||
|
|
||||||
$(call MKESCAPE,$(BINDIR))/limine-version: $(call MKESCAPE,$(BINDIR))/Makefile $(call MKESCAPE,$(SRCDIR))/host/limine-version.c
|
$(call MKESCAPE,$(BINDIR))/limine: $(call MKESCAPE,$(BINDIR))/Makefile $(call MKESCAPE,$(SRCDIR))/host/limine.c
|
||||||
$(SED) 's/@LIMINE_VERSION@/@PACKAGE_VERSION@/g' <'$(call SHESCAPE,$(SRCDIR))/host/limine-version.c' >'$(call SHESCAPE,$(BINDIR))/limine-version.c'
|
endif
|
||||||
$(MAKE) -C '$(call SHESCAPE,$(BINDIR))' limine-version
|
$(SED) 's/@LIMINE_VERSION@/@PACKAGE_VERSION@/g' <'$(call SHESCAPE,$(SRCDIR))/host/limine.c' >'$(call SHESCAPE,$(BINDIR))/limine.c'
|
||||||
|
CPPFLAGS="$(CPPFLAGS) $(LIMINE_NO_BIOS)" $(MAKE) -C '$(call SHESCAPE,$(BINDIR))' limine
|
||||||
$(call MKESCAPE,$(BINDIR))/limine-enroll-config: $(call MKESCAPE,$(BINDIR))/Makefile $(call MKESCAPE,$(SRCDIR))/host/limine-enroll-config.c
|
|
||||||
cp '$(call SHESCAPE,$(SRCDIR))/host/limine-enroll-config.c' '$(call SHESCAPE,$(BINDIR))/'
|
|
||||||
$(MAKE) -C '$(call SHESCAPE,$(BINDIR))' limine-enroll-config
|
|
||||||
|
|
||||||
$(call MKESCAPE,$(BINDIR))/Makefile: $(call MKESCAPE,$(SRCDIR))/host/Makefile $(call MKESCAPE,$(SRCDIR))/host/.gitignore
|
$(call MKESCAPE,$(BINDIR))/Makefile: $(call MKESCAPE,$(SRCDIR))/host/Makefile $(call MKESCAPE,$(SRCDIR))/host/.gitignore
|
||||||
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
||||||
cp '$(call SHESCAPE,$(SRCDIR))/host/Makefile' '$(call SHESCAPE,$(SRCDIR))/host/.gitignore' '$(call SHESCAPE,$(BINDIR))/'
|
cp '$(call SHESCAPE,$(SRCDIR))/host/Makefile' '$(call SHESCAPE,$(SRCDIR))/host/.gitignore' '$(call SHESCAPE,$(BINDIR))/'
|
||||||
|
|
||||||
.PHONY: limine-deploy
|
.PHONY: limine
|
||||||
limine-deploy:
|
limine:
|
||||||
$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine-deploy'
|
$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine'
|
||||||
|
|
||||||
.PHONY: limine-version
|
|
||||||
limine-version:
|
|
||||||
$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine-version'
|
|
||||||
|
|
||||||
.PHONY: limine-enroll-config
|
|
||||||
limine-enroll-config:
|
|
||||||
$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine-enroll-config'
|
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean: limine-bios-clean limine-uefi-ia32-clean limine-uefi-x86-64-clean limine-uefi-aarch64-clean
|
clean: limine-bios-clean limine-uefi-ia32-clean limine-uefi-x86-64-clean limine-uefi-aarch64-clean
|
||||||
@ -143,11 +133,7 @@ install: all
|
|||||||
$(INSTALL_DATA) '$(call SHESCAPE,$(SRCDIR))/PHILOSOPHY.md' '$(call SHESCAPE,$(DESTDIR)$(docdir))/'
|
$(INSTALL_DATA) '$(call SHESCAPE,$(SRCDIR))/PHILOSOPHY.md' '$(call SHESCAPE,$(DESTDIR)$(docdir))/'
|
||||||
$(INSTALL_DATA) '$(call SHESCAPE,$(SRCDIR))/README.md' '$(call SHESCAPE,$(DESTDIR)$(docdir))/'
|
$(INSTALL_DATA) '$(call SHESCAPE,$(SRCDIR))/README.md' '$(call SHESCAPE,$(DESTDIR)$(docdir))/'
|
||||||
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1'
|
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1'
|
||||||
$(INSTALL_DATA) '$(call SHESCAPE,$(BUILDDIR))/man/man1/limine-version.1' '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1/'
|
$(INSTALL_DATA) '$(call SHESCAPE,$(BUILDDIR))/man/man1/limine.1' '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1/'
|
||||||
ifneq ($(BUILD_LIMINE_DEPLOY),no)
|
|
||||||
$(INSTALL_DATA) '$(call SHESCAPE,$(BUILDDIR))/man/man1/limine-deploy.1' '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1/'
|
|
||||||
endif
|
|
||||||
$(INSTALL_DATA) '$(call SHESCAPE,$(BUILDDIR))/man/man1/limine-enroll-config.1' '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1/'
|
|
||||||
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(datarootdir))'
|
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(datarootdir))'
|
||||||
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(datarootdir))/limine'
|
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(datarootdir))/limine'
|
||||||
ifeq ($(BUILD_BIOS),limine-bios)
|
ifeq ($(BUILD_BIOS),limine-bios)
|
||||||
@ -174,19 +160,11 @@ endif
|
|||||||
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(includedir))'
|
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(includedir))'
|
||||||
$(INSTALL_DATA) '$(call SHESCAPE,$(SRCDIR))/limine.h' '$(call SHESCAPE,$(DESTDIR)$(includedir))/'
|
$(INSTALL_DATA) '$(call SHESCAPE,$(SRCDIR))/limine.h' '$(call SHESCAPE,$(DESTDIR)$(includedir))/'
|
||||||
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(bindir))'
|
$(INSTALL) -d '$(call SHESCAPE,$(DESTDIR)$(bindir))'
|
||||||
$(INSTALL_PROGRAM) '$(call SHESCAPE,$(BINDIR))/limine-version' '$(call SHESCAPE,$(DESTDIR)$(bindir))/'
|
$(INSTALL_PROGRAM) '$(call SHESCAPE,$(BINDIR))/limine' '$(call SHESCAPE,$(DESTDIR)$(bindir))/'
|
||||||
$(INSTALL_PROGRAM) '$(call SHESCAPE,$(BINDIR))/limine-enroll-config' '$(call SHESCAPE,$(DESTDIR)$(bindir))/'
|
|
||||||
ifneq ($(BUILD_LIMINE_DEPLOY),no)
|
|
||||||
$(INSTALL_PROGRAM) '$(call SHESCAPE,$(BINDIR))/limine-deploy' '$(call SHESCAPE,$(DESTDIR)$(bindir))/'
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: install-strip
|
.PHONY: install-strip
|
||||||
install-strip: install
|
install-strip: install
|
||||||
@NATIVE_STRIP@ '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine-version'
|
@NATIVE_STRIP@ '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine'
|
||||||
@NATIVE_STRIP@ '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine-enroll-config'
|
|
||||||
ifneq ($(BUILD_LIMINE_DEPLOY),no)
|
|
||||||
@NATIVE_STRIP@ '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine-deploy'
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: uninstall
|
.PHONY: uninstall
|
||||||
uninstall:
|
uninstall:
|
||||||
@ -195,12 +173,8 @@ uninstall:
|
|||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(docdir))/PROTOCOL.md'
|
rm -f '$(call SHESCAPE,$(DESTDIR)$(docdir))/PROTOCOL.md'
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(docdir))/PHILOSOPHY.md'
|
rm -f '$(call SHESCAPE,$(DESTDIR)$(docdir))/PHILOSOPHY.md'
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(docdir))/README.md'
|
rm -f '$(call SHESCAPE,$(DESTDIR)$(docdir))/README.md'
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1/limine-version.1'
|
rm -f '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1/limine.1'
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1/limine-deploy.1'
|
rm -f '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine'
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(mandir))/man1/limine-enroll-config.1'
|
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine-version'
|
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine-enroll-config'
|
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(bindir))/limine-deploy'
|
|
||||||
rm -rf '$(call SHESCAPE,$(DESTDIR)$(datarootdir))/limine'
|
rm -rf '$(call SHESCAPE,$(DESTDIR)$(datarootdir))/limine'
|
||||||
rm -f '$(call SHESCAPE,$(DESTDIR)$(includedir))/limine.h'
|
rm -f '$(call SHESCAPE,$(DESTDIR)$(includedir))/limine.h'
|
||||||
|
|
||||||
@ -219,9 +193,6 @@ endif
|
|||||||
.PHONY: limine-bios
|
.PHONY: limine-bios
|
||||||
limine-bios: common-bios decompressor
|
limine-bios: common-bios decompressor
|
||||||
$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp'
|
$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp'
|
||||||
ifneq ($(BUILD_LIMINE_DEPLOY),no)
|
|
||||||
$(MAKE) limine-deploy
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(call MKESCAPE,$(BINDIR))/limine-cd-efi.bin: $(if $(BUILD_UEFI_IA32),$(call MKESCAPE,$(BUILDDIR))/common-uefi-ia32/BOOTIA32.EFI) $(if $(BUILD_UEFI_X86_64),$(call MKESCAPE,$(BUILDDIR))/common-uefi-x86-64/BOOTX64.EFI) $(if $(BUILD_UEFI_AARCH64),$(call MKESCAPE,$(BUILDDIR))/common-uefi-aarch64/BOOTAA64.EFI)
|
$(call MKESCAPE,$(BINDIR))/limine-cd-efi.bin: $(if $(BUILD_UEFI_IA32),$(call MKESCAPE,$(BUILDDIR))/common-uefi-ia32/BOOTIA32.EFI) $(if $(BUILD_UEFI_X86_64),$(call MKESCAPE,$(BUILDDIR))/common-uefi-x86-64/BOOTX64.EFI) $(if $(BUILD_UEFI_AARCH64),$(call MKESCAPE,$(BUILDDIR))/common-uefi-aarch64/BOOTAA64.EFI)
|
||||||
ifneq ($(BUILD_CD_EFI),no)
|
ifneq ($(BUILD_CD_EFI),no)
|
||||||
@ -321,7 +292,7 @@ dist:
|
|||||||
|
|
||||||
.PHONY: distclean
|
.PHONY: distclean
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -rf ovmf* config.log config.status GNUmakefile config.h toolchain-files man/man1/limine-version.1 man/man1/limine-deploy.1 man/man1/limine-enroll-config.1
|
rm -rf ovmf* config.log config.status GNUmakefile config.h toolchain-files man/man1/limine.1
|
||||||
|
|
||||||
.PHONY: maintainer-clean
|
.PHONY: maintainer-clean
|
||||||
maintainer-clean: distclean
|
maintainer-clean: distclean
|
||||||
|
22
README.md
22
README.md
@ -62,7 +62,7 @@ or, to clone a specific binary point release (for example `v4.20230120.0`)
|
|||||||
git clone https://github.com/limine-bootloader/limine.git --branch=v4.20230120.0-binary --depth=1
|
git clone https://github.com/limine-bootloader/limine.git --branch=v4.20230120.0-binary --depth=1
|
||||||
```
|
```
|
||||||
|
|
||||||
In order to rebuild host utilities like `limine-deploy`, simply run `make` in the binary
|
In order to rebuild host utilities like `limine`, simply run `make` in the binary
|
||||||
release directory.
|
release directory.
|
||||||
|
|
||||||
Host utility binaries are provided for Windows.
|
Host utility binaries are provided for Windows.
|
||||||
@ -136,14 +136,14 @@ partitions, formatted with a supported file system (the ESP partition is recomme
|
|||||||
Limine can be booted with secure boot using shim. This will also allow one to enroll
|
Limine can be booted with secure boot using shim. This will also allow one to enroll
|
||||||
the BLAKE2B hash of the Limine config file into the Limine EFI executable image itself for
|
the BLAKE2B hash of the Limine config file into the Limine EFI executable image itself for
|
||||||
verification purposes.
|
verification purposes.
|
||||||
For more information see the `limine-enroll-config` program and [the philosophy](/PHILOSOPHY.md).
|
For more information see the `limine enroll-config` program and [the philosophy](/PHILOSOPHY.md).
|
||||||
|
|
||||||
### BIOS/MBR
|
### BIOS/MBR
|
||||||
In order to install Limine on a MBR device (which can just be a raw image file),
|
In order to install Limine on a MBR device (which can just be a raw image file),
|
||||||
run `limine-deploy` as such:
|
run `limine bios-install` as such:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
limine-deploy <path to device/image>
|
limine bios-install <path to device/image>
|
||||||
```
|
```
|
||||||
|
|
||||||
The boot device must contain the `limine.sys` and `limine.cfg` files in
|
The boot device must contain the `limine.sys` and `limine.cfg` files in
|
||||||
@ -154,18 +154,18 @@ partitions, formatted with a supported file system.
|
|||||||
If using a GPT formatted device, there are 2 options one can follow for
|
If using a GPT formatted device, there are 2 options one can follow for
|
||||||
installation:
|
installation:
|
||||||
* Specifying a dedicated stage 2 partition.
|
* Specifying a dedicated stage 2 partition.
|
||||||
* Letting `limine-deploy` attempt to embed stage 2 within GPT structures.
|
* Letting `limine bios-install` attempt to embed stage 2 within GPT structures.
|
||||||
|
|
||||||
In case one wants to specify a stage 2 partition, create a partition on the GPT
|
In case one wants to specify a stage 2 partition, create a partition on the GPT
|
||||||
device of at least 32KiB in size, and pass the 1-based number of the partition
|
device of at least 32KiB in size, and pass the 1-based number of the partition
|
||||||
to `limine-deploy` as a second argument; such as:
|
to `limine bios-install` as a second argument; such as:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
limine-deploy <path to device/image> <1-based stage 2 partition number>
|
limine bios-install <path to device/image> <1-based stage 2 partition number>
|
||||||
```
|
```
|
||||||
|
|
||||||
In case one wants to let `limine-deploy` embed stage 2 within GPT's structures,
|
In case one wants to let `limine bios-install` embed stage 2 within GPT's structures,
|
||||||
simply omit the partition number, and invoke `limine-deploy` the same as one
|
simply omit the partition number, and invoke `limine bios-install` the same as one
|
||||||
would do for an MBR partitioned device.
|
would do for an MBR partitioned device.
|
||||||
|
|
||||||
The boot device must contain the `limine.sys` and `limine.cfg` files in
|
The boot device must contain the `limine.sys` and `limine.cfg` files in
|
||||||
@ -192,9 +192,9 @@ xorriso -as mkisofs -b <relative path of limine-cd.bin> \
|
|||||||
|
|
||||||
*Note: `xorriso` is required.*
|
*Note: `xorriso` is required.*
|
||||||
|
|
||||||
And do not forget to also run `limine-deploy` on the generated image:
|
And do not forget to also run `limine bios-install` on the generated image:
|
||||||
```
|
```
|
||||||
limine-deploy image.iso
|
limine bios-install image.iso
|
||||||
```
|
```
|
||||||
|
|
||||||
`<relative path of limine-cd.bin>` is the relative path of
|
`<relative path of limine-cd.bin>` is the relative path of
|
||||||
|
@ -91,8 +91,6 @@ AC_ARG_ENABLE([bios],
|
|||||||
[AS_HELP_STRING([--enable-bios], [enable building the x86 BIOS port])],
|
[AS_HELP_STRING([--enable-bios], [enable building the x86 BIOS port])],
|
||||||
[BUILD_BIOS="$enableval"])
|
[BUILD_BIOS="$enableval"])
|
||||||
|
|
||||||
BUILD_LIMINE_DEPLOY="$BUILD_BIOS"
|
|
||||||
|
|
||||||
if test "x$BUILD_BIOS" = "xno"; then
|
if test "x$BUILD_BIOS" = "xno"; then
|
||||||
if test "x$BUILD_CD" = "xyes"; then
|
if test "x$BUILD_CD" = "xyes"; then
|
||||||
BUILD_BIOS="yes"
|
BUILD_BIOS="yes"
|
||||||
@ -127,7 +125,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_SUBST([BUILD_BIOS])
|
AC_SUBST([BUILD_BIOS])
|
||||||
AC_SUBST([BUILD_LIMINE_DEPLOY])
|
|
||||||
|
|
||||||
BUILD_UEFI_IA32="$BUILD_ALL"
|
BUILD_UEFI_IA32="$BUILD_ALL"
|
||||||
|
|
||||||
@ -276,5 +273,5 @@ if ! test "$SRCDIR" = "$BUILDDIR"; then
|
|||||||
cp "$SRCDIR/limine.h" "$BUILDDIR/"
|
cp "$SRCDIR/limine.h" "$BUILDDIR/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CONFIG_FILES([man/man1/limine-version.1 man/man1/limine-deploy.1 man/man1/limine-enroll-config.1 GNUmakefile config.h])
|
AC_CONFIG_FILES([man/man1/limine.1 GNUmakefile config.h])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
8
host/.gitignore
vendored
8
host/.gitignore
vendored
@ -1,6 +1,2 @@
|
|||||||
limine-deploy
|
limine
|
||||||
limine-deploy.exe
|
limine.exe
|
||||||
limine-version
|
|
||||||
limine-version.exe
|
|
||||||
limine-enroll-config
|
|
||||||
limine-enroll-config.exe
|
|
||||||
|
@ -7,7 +7,7 @@ PREFIX ?= /usr/local
|
|||||||
CFLAGS ?= -g -O2 -pipe
|
CFLAGS ?= -g -O2 -pipe
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: limine-deploy limine-version limine-enroll-config
|
all: limine
|
||||||
|
|
||||||
.PHONY: install
|
.PHONY: install
|
||||||
install: all
|
install: all
|
||||||
@ -22,27 +22,15 @@ install: all
|
|||||||
$(INSTALL) -d '$(DESTDIR)$(PREFIX)/include'
|
$(INSTALL) -d '$(DESTDIR)$(PREFIX)/include'
|
||||||
$(INSTALL) -m 644 limine.h '$(DESTDIR)$(PREFIX)/include/'
|
$(INSTALL) -m 644 limine.h '$(DESTDIR)$(PREFIX)/include/'
|
||||||
$(INSTALL) -d '$(DESTDIR)$(PREFIX)/bin'
|
$(INSTALL) -d '$(DESTDIR)$(PREFIX)/bin'
|
||||||
$(INSTALL) limine-deploy '$(DESTDIR)$(PREFIX)/bin/'
|
$(INSTALL) limine '$(DESTDIR)$(PREFIX)/bin/'
|
||||||
$(INSTALL) limine-version '$(DESTDIR)$(PREFIX)/bin/'
|
|
||||||
$(INSTALL) limine-enroll-config '$(DESTDIR)$(PREFIX)/bin/'
|
|
||||||
|
|
||||||
.PHONY: install-strip
|
.PHONY: install-strip
|
||||||
install-strip: install
|
install-strip: install
|
||||||
$(STRIP) '$(DESTDIR)$(PREFIX)/bin/limine-deploy'
|
$(STRIP) '$(DESTDIR)$(PREFIX)/bin/limine'
|
||||||
$(STRIP) '$(DESTDIR)$(PREFIX)/bin/limine-version'
|
|
||||||
$(STRIP) '$(DESTDIR)$(PREFIX)/bin/limine-enroll-config'
|
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm -f limine-deploy limine-deploy.exe
|
rm -f limine limine.exe
|
||||||
rm -f limine-version limine-version.exe
|
|
||||||
rm -f limine-enroll-config limine-enroll-config.exe
|
|
||||||
|
|
||||||
limine-deploy: limine-deploy.c limine-hdd.h
|
limine: limine.c
|
||||||
$(CC) $(CFLAGS) -Wall -Wextra $(WERROR_FLAG) $(CPPFLAGS) $(LDFLAGS) -std=c99 limine-deploy.c $(LIBS) -o $@
|
$(CC) $(CFLAGS) -Wall -Wextra $(WERROR_FLAG) $(CPPFLAGS) $(LDFLAGS) -std=c99 limine.c $(LIBS) -o $@
|
||||||
|
|
||||||
limine-version: limine-version.c
|
|
||||||
$(CC) $(CFLAGS) -Wall -Wextra $(WERROR_FLAG) $(CPPFLAGS) $(LDFLAGS) -std=c99 limine-version.c $(LIBS) -o $@
|
|
||||||
|
|
||||||
limine-enroll-config: limine-enroll-config.c
|
|
||||||
$(CC) $(CFLAGS) -Wall -Wextra $(WERROR_FLAG) $(CPPFLAGS) $(LDFLAGS) -std=c99 limine-enroll-config.c $(LIBS) -o $@
|
|
||||||
|
@ -1,143 +0,0 @@
|
|||||||
#undef IS_WINDOWS
|
|
||||||
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
|
|
||||||
#define IS_WINDOWS 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define CONFIG_B2SUM_SIGNATURE "++CONFIG_B2SUM_SIGNATURE++"
|
|
||||||
|
|
||||||
static void usage(const char *name) {
|
|
||||||
printf("Usage: %s <Limine executable> <BLAKE2B of config file>\n", name);
|
|
||||||
printf("\n");
|
|
||||||
printf(" --reset Remove enrolled BLAKE2B, will not check config intergrity\n");
|
|
||||||
printf("\n");
|
|
||||||
printf(" --quiet Do not print verbose diagnostic messages\n");
|
|
||||||
printf("\n");
|
|
||||||
printf(" --help | -h Display this help message\n");
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void remove_arg(int *argc, char *argv[], int index) {
|
|
||||||
for (int i = index; i < *argc - 1; i++) {
|
|
||||||
argv[i] = argv[i + 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
(*argc)--;
|
|
||||||
|
|
||||||
argv[*argc] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
int ret = EXIT_FAILURE;
|
|
||||||
|
|
||||||
char *bootloader = NULL;
|
|
||||||
FILE *bootloader_file = NULL;
|
|
||||||
bool quiet = false;
|
|
||||||
bool reset = false;
|
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++) {
|
|
||||||
if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
|
|
||||||
usage(argv[0]);
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
} else if (strcmp(argv[i], "--quiet") == 0) {
|
|
||||||
remove_arg(&argc, argv, i);
|
|
||||||
quiet = true;
|
|
||||||
} else if (strcmp(argv[i], "--reset") == 0) {
|
|
||||||
remove_arg(&argc, argv, i);
|
|
||||||
reset = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc <= (reset ? 1 : 2)) {
|
|
||||||
usage(argv[0]);
|
|
||||||
#ifdef IS_WINDOWS
|
|
||||||
system("pause");
|
|
||||||
#endif
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reset && strlen(argv[2]) != 128) {
|
|
||||||
fprintf(stderr, "ERROR: BLAKE2B specified is not 128 characters long\n");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
bootloader_file = fopen(argv[1], "r+b");
|
|
||||||
if (bootloader_file == NULL) {
|
|
||||||
perror("ERROR");
|
|
||||||
goto cleanup;;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fseek(bootloader_file, 0, SEEK_END) != 0) {
|
|
||||||
perror("ERROR");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
size_t bootloader_size = ftell(bootloader_file);
|
|
||||||
rewind(bootloader_file);
|
|
||||||
|
|
||||||
bootloader = malloc(bootloader_size);
|
|
||||||
if (bootloader == NULL) {
|
|
||||||
perror("ERROR");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fread(bootloader, bootloader_size, 1, bootloader_file) != 1) {
|
|
||||||
perror("ERROR");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *checksum_loc = NULL;
|
|
||||||
size_t checked_count = 0;
|
|
||||||
const char *config_b2sum_sign = CONFIG_B2SUM_SIGNATURE;
|
|
||||||
for (size_t i = 0; i < bootloader_size - ((sizeof(CONFIG_B2SUM_SIGNATURE) - 1) + 128) + 1; i++) {
|
|
||||||
if (bootloader[i] != config_b2sum_sign[checked_count]) {
|
|
||||||
checked_count = 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
checked_count++;
|
|
||||||
|
|
||||||
if (checked_count == sizeof(CONFIG_B2SUM_SIGNATURE) - 1) {
|
|
||||||
checksum_loc = &bootloader[i + 1];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (checksum_loc == NULL) {
|
|
||||||
fprintf(stderr, "ERROR: Checksum location not found in provided executable\n");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!reset) {
|
|
||||||
memcpy(checksum_loc, argv[2], 128);
|
|
||||||
} else {
|
|
||||||
memset(checksum_loc, '0', 128);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fseek(bootloader_file, 0, SEEK_SET) != 0) {
|
|
||||||
perror("ERROR");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
if (fwrite(bootloader, bootloader_size, 1, bootloader_file) != 1) {
|
|
||||||
perror("ERROR");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!quiet) {
|
|
||||||
fprintf(stderr, "Config file BLAKE2B successfully %s!\n", reset ? "reset" : "enrolled");
|
|
||||||
}
|
|
||||||
ret = EXIT_SUCCESS;
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
if (bootloader != NULL) {
|
|
||||||
free(bootloader);
|
|
||||||
}
|
|
||||||
if (bootloader_file != NULL) {
|
|
||||||
fclose(bootloader_file);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define LIMINE_VERSION "@LIMINE_VERSION@"
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
puts(LIMINE_VERSION);
|
|
||||||
}
|
|
@ -12,7 +12,21 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
|
#ifndef LIMINE_NO_BIOS
|
||||||
#include "limine-hdd.h"
|
#include "limine-hdd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void remove_arg(int *argc, char *argv[], int index) {
|
||||||
|
for (int i = index; i < *argc - 1; i++) {
|
||||||
|
argv[i] = argv[i + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
(*argc)--;
|
||||||
|
|
||||||
|
argv[*argc] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef LIMINE_NO_BIOS
|
||||||
|
|
||||||
static bool quiet = false;
|
static bool quiet = false;
|
||||||
|
|
||||||
@ -265,37 +279,37 @@ static bool device_cache_block(uint64_t block) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct undeploy_data {
|
struct uninstall_data {
|
||||||
void *data;
|
void *data;
|
||||||
uint64_t loc;
|
uint64_t loc;
|
||||||
uint64_t count;
|
uint64_t count;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define UNDEPLOY_DATA_MAX 256
|
#define UNINSTALL_DATA_MAX 256
|
||||||
|
|
||||||
static bool undeploying = false;
|
static bool uninstalling = false;
|
||||||
static struct undeploy_data undeploy_data[UNDEPLOY_DATA_MAX];
|
static struct uninstall_data uninstall_data[UNINSTALL_DATA_MAX];
|
||||||
static struct undeploy_data undeploy_data_rev[UNDEPLOY_DATA_MAX];
|
static struct uninstall_data uninstall_data_rev[UNINSTALL_DATA_MAX];
|
||||||
static uint64_t undeploy_data_i = 0;
|
static uint64_t uninstall_data_i = 0;
|
||||||
static const char *undeploy_file = NULL;
|
static const char *uninstall_file = NULL;
|
||||||
|
|
||||||
static void reverse_undeploy_data(void) {
|
static void reverse_uninstall_data(void) {
|
||||||
for (size_t i = 0, j = undeploy_data_i - 1; i < undeploy_data_i; i++, j--) {
|
for (size_t i = 0, j = uninstall_data_i - 1; i < uninstall_data_i; i++, j--) {
|
||||||
undeploy_data_rev[j] = undeploy_data[i];
|
uninstall_data_rev[j] = uninstall_data[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(undeploy_data, undeploy_data_rev, undeploy_data_i * sizeof(struct undeploy_data));
|
memcpy(uninstall_data, uninstall_data_rev, uninstall_data_i * sizeof(struct uninstall_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_undeploy_data(void) {
|
static void free_uninstall_data(void) {
|
||||||
for (size_t i = 0; i < undeploy_data_i; i++) {
|
for (size_t i = 0; i < uninstall_data_i; i++) {
|
||||||
free(undeploy_data[i].data);
|
free(uninstall_data[i].data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool store_undeploy_data(const char *filename) {
|
static bool store_uninstall_data(const char *filename) {
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Storing undeploy data to file: `%s`...\n", filename);
|
fprintf(stderr, "Storing uninstall data to file: `%s`...\n", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE *udfile = fopen(filename, "wb");
|
FILE *udfile = fopen(filename, "wb");
|
||||||
@ -303,18 +317,18 @@ static bool store_undeploy_data(const char *filename) {
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fwrite(&undeploy_data_i, sizeof(uint64_t), 1, udfile) != 1) {
|
if (fwrite(&uninstall_data_i, sizeof(uint64_t), 1, udfile) != 1) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < undeploy_data_i; i++) {
|
for (size_t i = 0; i < uninstall_data_i; i++) {
|
||||||
if (fwrite(&undeploy_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) {
|
if (fwrite(&uninstall_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (fwrite(&undeploy_data[i].count, sizeof(uint64_t), 1, udfile) != 1) {
|
if (fwrite(&uninstall_data[i].count, sizeof(uint64_t), 1, udfile) != 1) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (fwrite(undeploy_data[i].data, undeploy_data[i].count, 1, udfile) != 1) {
|
if (fwrite(uninstall_data[i].data, uninstall_data[i].count, 1, udfile) != 1) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -330,9 +344,9 @@ error:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool load_undeploy_data(const char *filename) {
|
static bool load_uninstall_data(const char *filename) {
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Loading undeploy data from file: `%s`...\n", filename);
|
fprintf(stderr, "Loading uninstall data from file: `%s`...\n", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE *udfile = fopen(filename, "rb");
|
FILE *udfile = fopen(filename, "rb");
|
||||||
@ -340,22 +354,22 @@ static bool load_undeploy_data(const char *filename) {
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fread(&undeploy_data_i, sizeof(uint64_t), 1, udfile) != 1) {
|
if (fread(&uninstall_data_i, sizeof(uint64_t), 1, udfile) != 1) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < undeploy_data_i; i++) {
|
for (size_t i = 0; i < uninstall_data_i; i++) {
|
||||||
if (fread(&undeploy_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) {
|
if (fread(&uninstall_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (fread(&undeploy_data[i].count, sizeof(uint64_t), 1, udfile) != 1) {
|
if (fread(&uninstall_data[i].count, sizeof(uint64_t), 1, udfile) != 1) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
undeploy_data[i].data = malloc(undeploy_data[i].count);
|
uninstall_data[i].data = malloc(uninstall_data[i].count);
|
||||||
if (undeploy_data[i].data == NULL) {
|
if (uninstall_data[i].data == NULL) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (fread(undeploy_data[i].data, undeploy_data[i].count, 1, udfile) != 1) {
|
if (fread(uninstall_data[i].data, uninstall_data[i].count, 1, udfile) != 1) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -395,16 +409,16 @@ static bool _device_read(void *_buffer, uint64_t loc, size_t count) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool _device_write(const void *_buffer, uint64_t loc, size_t count) {
|
static bool _device_write(const void *_buffer, uint64_t loc, size_t count) {
|
||||||
if (undeploying) {
|
if (uninstalling) {
|
||||||
goto skip_save;
|
goto skip_save;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (undeploy_data_i >= UNDEPLOY_DATA_MAX) {
|
if (uninstall_data_i >= UNINSTALL_DATA_MAX) {
|
||||||
fprintf(stderr, "Internal error: Too many undeploy data entries!\n");
|
fprintf(stderr, "Internal error: Too many uninstall data entries!\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct undeploy_data *ud = &undeploy_data[undeploy_data_i];
|
struct uninstall_data *ud = &uninstall_data[uninstall_data_i];
|
||||||
|
|
||||||
ud->data = malloc(count);
|
ud->data = malloc(count);
|
||||||
if (ud->data == NULL) {
|
if (ud->data == NULL) {
|
||||||
@ -441,31 +455,31 @@ skip_save:;
|
|||||||
progress += chunk;
|
progress += chunk;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!undeploying) {
|
if (!uninstalling) {
|
||||||
undeploy_data_i++;
|
uninstall_data_i++;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void undeploy(void) {
|
static void uninstall(void) {
|
||||||
undeploying = true;
|
uninstalling = true;
|
||||||
|
|
||||||
cache_state = CACHE_CLEAN;
|
cache_state = CACHE_CLEAN;
|
||||||
cached_block = (uint64_t)-1;
|
cached_block = (uint64_t)-1;
|
||||||
|
|
||||||
for (size_t i = 0; i < undeploy_data_i; i++) {
|
for (size_t i = 0; i < uninstall_data_i; i++) {
|
||||||
struct undeploy_data *ud = &undeploy_data[i];
|
struct uninstall_data *ud = &uninstall_data[i];
|
||||||
bool retry = false;
|
bool retry = false;
|
||||||
while (!_device_write(ud->data, ud->loc, ud->count)) {
|
while (!_device_write(ud->data, ud->loc, ud->count)) {
|
||||||
if (retry) {
|
if (retry) {
|
||||||
fprintf(stderr, "ERROR: Undeploy data index %zu failed to write. Undeploy may be incomplete!\n", i);
|
fprintf(stderr, "ERROR: Uninstall data index %zu failed to write. Uninstall may be incomplete!\n", i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Warning: Undeploy data index %zu failed to write, retrying...\n", i);
|
fprintf(stderr, "Warning: Uninstall data index %zu failed to write, retrying...\n", i);
|
||||||
}
|
}
|
||||||
if (!device_flush_cache()) {
|
if (!device_flush_cache()) {
|
||||||
fprintf(stderr, "ERROR: Device cache flush failure. Undeploy may be incomplete!\n");
|
fprintf(stderr, "ERROR: Device cache flush failure. Uninstall may be incomplete!\n");
|
||||||
}
|
}
|
||||||
cache_state = CACHE_CLEAN;
|
cache_state = CACHE_CLEAN;
|
||||||
cached_block = (uint64_t)-1;
|
cached_block = (uint64_t)-1;
|
||||||
@ -474,11 +488,11 @@ static void undeploy(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!device_flush_cache()) {
|
if (!device_flush_cache()) {
|
||||||
fprintf(stderr, "ERROR: Device cache flush failure. Undeploy may be incomplete!\n");
|
fprintf(stderr, "ERROR: Device cache flush failure. Uninstall may be incomplete!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Undeploy data restored successfully. Limine undeployed!\n");
|
fprintf(stderr, "Uninstall data restored successfully. Limine uninstalled!\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,17 +508,17 @@ static void undeploy(void) {
|
|||||||
goto cleanup; \
|
goto cleanup; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
static void usage(const char *name) {
|
static void bios_install_usage(const char *name) {
|
||||||
printf("Usage: %s <device> [GPT partition index]\n", name);
|
printf("Usage: %s bios-install <device> [GPT partition index]\n", name);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf(" --force-mbr Force MBR detection to work even if the\n");
|
printf(" --force-mbr Force MBR detection to work even if the\n");
|
||||||
printf(" safety checks fail (DANGEROUS!)\n");
|
printf(" safety checks fail (DANGEROUS!)\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf(" --undeploy Reverse the entire deployment procedure\n");
|
printf(" --uninstall Reverse the entire install procedure\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf(" --undeploy-data-file=<filename>\n");
|
printf(" --uninstall-data-file=<filename>\n");
|
||||||
printf(" Set the input (for --undeploy) or output file\n");
|
printf(" Set the input (for --uninstall) or output file\n");
|
||||||
printf(" name of the file which contains undeploy data\n");
|
printf(" name of the file which contains uninstall data\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf(" --quiet Do not print verbose diagnostic messages\n");
|
printf(" --quiet Do not print verbose diagnostic messages\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -512,10 +526,10 @@ static void usage(const char *name) {
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
static int bios_install(int argc, char *argv[]) {
|
||||||
int ok = EXIT_FAILURE;
|
int ok = EXIT_FAILURE;
|
||||||
int force_mbr = 0;
|
int force_mbr = 0;
|
||||||
bool undeploy_mode = false;
|
bool uninstall_mode = false;
|
||||||
const uint8_t *bootloader_img = binary_limine_hdd_bin_data;
|
const uint8_t *bootloader_img = binary_limine_hdd_bin_data;
|
||||||
size_t bootloader_file_size = sizeof(binary_limine_hdd_bin_data);
|
size_t bootloader_file_size = sizeof(binary_limine_hdd_bin_data);
|
||||||
uint8_t orig_mbr[70], timestamp[6];
|
uint8_t orig_mbr[70], timestamp[6];
|
||||||
@ -526,7 +540,7 @@ int main(int argc, char *argv[]) {
|
|||||||
bigendian = endbyte == 0x12;
|
bigendian = endbyte == 0x12;
|
||||||
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
usage(argv[0]);
|
bios_install_usage(argv[-1]);
|
||||||
#ifdef IS_WINDOWS
|
#ifdef IS_WINDOWS
|
||||||
system("pause");
|
system("pause");
|
||||||
#endif
|
#endif
|
||||||
@ -535,7 +549,7 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
for (int i = 1; i < argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
|
if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
|
||||||
usage(argv[0]);
|
bios_install_usage(argv[-1]);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
} else if (strcmp(argv[i], "--quiet") == 0) {
|
} else if (strcmp(argv[i], "--quiet") == 0) {
|
||||||
quiet = true;
|
quiet = true;
|
||||||
@ -544,18 +558,18 @@ int main(int argc, char *argv[]) {
|
|||||||
fprintf(stderr, "Warning: --force-mbr already set.\n");
|
fprintf(stderr, "Warning: --force-mbr already set.\n");
|
||||||
}
|
}
|
||||||
force_mbr = 1;
|
force_mbr = 1;
|
||||||
} else if (strcmp(argv[i], "--undeploy") == 0) {
|
} else if (strcmp(argv[i], "--uninstall") == 0) {
|
||||||
if (undeploy_mode && !quiet) {
|
if (uninstall_mode && !quiet) {
|
||||||
fprintf(stderr, "Warning: --undeploy already set.\n");
|
fprintf(stderr, "Warning: --uninstall already set.\n");
|
||||||
}
|
}
|
||||||
undeploy_mode = true;
|
uninstall_mode = true;
|
||||||
} else if (memcmp(argv[i], "--undeploy-data-file=", 21) == 0) {
|
} else if (memcmp(argv[i], "--uninstall-data-file=", 21) == 0) {
|
||||||
if (undeploy_file != NULL && !quiet) {
|
if (uninstall_file != NULL && !quiet) {
|
||||||
fprintf(stderr, "Warning: --undeploy-data-file already set. Overriding...\n");
|
fprintf(stderr, "Warning: --uninstall-data-file already set. Overriding...\n");
|
||||||
}
|
}
|
||||||
undeploy_file = argv[i] + 21;
|
uninstall_file = argv[i] + 21;
|
||||||
if (strlen(undeploy_file) == 0) {
|
if (strlen(uninstall_file) == 0) {
|
||||||
fprintf(stderr, "ERROR: Undeploy data file has a zero-length name!\n");
|
fprintf(stderr, "ERROR: Uninstall data file has a zero-length name!\n");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -570,28 +584,28 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
if (device == NULL) {
|
if (device == NULL) {
|
||||||
fprintf(stderr, "ERROR: No device specified\n");
|
fprintf(stderr, "ERROR: No device specified\n");
|
||||||
usage(argv[0]);
|
bios_install_usage(argv[-1]);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!device_init()) {
|
if (!device_init()) {
|
||||||
goto undeploy_mode_cleanup;
|
goto uninstall_mode_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (undeploy_mode) {
|
if (uninstall_mode) {
|
||||||
if (undeploy_file == NULL) {
|
if (uninstall_file == NULL) {
|
||||||
fprintf(stderr, "ERROR: Undeploy mode set but no --undeploy-data-file=... passed.\n");
|
fprintf(stderr, "ERROR: Uninstall mode set but no --uninstall-data-file=... passed.\n");
|
||||||
goto undeploy_mode_cleanup;
|
goto uninstall_mode_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!load_undeploy_data(undeploy_file)) {
|
if (!load_uninstall_data(uninstall_file)) {
|
||||||
goto undeploy_mode_cleanup;
|
goto uninstall_mode_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
undeploy();
|
uninstall();
|
||||||
|
|
||||||
ok = EXIT_SUCCESS;
|
ok = EXIT_SUCCESS;
|
||||||
goto undeploy_mode_cleanup;
|
goto uninstall_mode_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Probe for GPT and logical block size
|
// Probe for GPT and logical block size
|
||||||
@ -606,7 +620,7 @@ int main(int argc, char *argv[]) {
|
|||||||
if (!force_mbr) {
|
if (!force_mbr) {
|
||||||
gpt = 1;
|
gpt = 1;
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Deploying to GPT. Logical block size of %" PRIu64 " bytes.\n",
|
fprintf(stderr, "Installing to GPT. Logical block size of %" PRIu64 " bytes.\n",
|
||||||
lb_guesses[i]);
|
lb_guesses[i]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -796,7 +810,7 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "GPT partition specified. Deploying there instead of embedding.\n");
|
fprintf(stderr, "GPT partition specified. Installing there instead of embedding.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
stage2_loc_a = ENDSWAP(gpt_entry.starting_lba) * lb_size;
|
stage2_loc_a = ENDSWAP(gpt_entry.starting_lba) * lb_size;
|
||||||
@ -898,7 +912,7 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
fprintf(stderr, "Deploying to MBR.\n");
|
fprintf(stderr, "Installing to MBR.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -945,21 +959,21 @@ int main(int argc, char *argv[]) {
|
|||||||
" the root, /boot, /limine, or /boot/limine directories of\n"
|
" the root, /boot, /limine, or /boot/limine directories of\n"
|
||||||
" one of the partitions on the device, or boot will fail!\n");
|
" one of the partitions on the device, or boot will fail!\n");
|
||||||
|
|
||||||
fprintf(stderr, "Limine deployed successfully!\n");
|
fprintf(stderr, "Limine BIOS stages installed successfully!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
ok = EXIT_SUCCESS;
|
ok = EXIT_SUCCESS;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
reverse_undeploy_data();
|
reverse_uninstall_data();
|
||||||
if (ok != EXIT_SUCCESS) {
|
if (ok != EXIT_SUCCESS) {
|
||||||
// If we failed, attempt to reverse deploy process
|
// If we failed, attempt to reverse install process
|
||||||
undeploy();
|
uninstall();
|
||||||
} else if (undeploy_file != NULL) {
|
} else if (uninstall_file != NULL) {
|
||||||
store_undeploy_data(undeploy_file);
|
store_uninstall_data(uninstall_file);
|
||||||
}
|
}
|
||||||
undeploy_mode_cleanup:
|
uninstall_mode_cleanup:
|
||||||
free_undeploy_data();
|
free_uninstall_data();
|
||||||
if (cache)
|
if (cache)
|
||||||
free(cache);
|
free(cache);
|
||||||
if (device != NULL)
|
if (device != NULL)
|
||||||
@ -967,3 +981,168 @@ undeploy_mode_cleanup:
|
|||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CONFIG_B2SUM_SIGNATURE "++CONFIG_B2SUM_SIGNATURE++"
|
||||||
|
|
||||||
|
static void enroll_config_usage(const char *name) {
|
||||||
|
printf("Usage: %s enroll-config <Limine executable> <BLAKE2B of config file>\n", name);
|
||||||
|
printf("\n");
|
||||||
|
printf(" --reset Remove enrolled BLAKE2B, will not check config intergrity\n");
|
||||||
|
printf("\n");
|
||||||
|
printf(" --quiet Do not print verbose diagnostic messages\n");
|
||||||
|
printf("\n");
|
||||||
|
printf(" --help | -h Display this help message\n");
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static int enroll_config(int argc, char *argv[]) {
|
||||||
|
int ret = EXIT_FAILURE;
|
||||||
|
|
||||||
|
char *bootloader = NULL;
|
||||||
|
FILE *bootloader_file = NULL;
|
||||||
|
bool quiet = false;
|
||||||
|
bool reset = false;
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
|
||||||
|
enroll_config_usage(argv[-1]);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
} else if (strcmp(argv[i], "--quiet") == 0) {
|
||||||
|
remove_arg(&argc, argv, i);
|
||||||
|
quiet = true;
|
||||||
|
} else if (strcmp(argv[i], "--reset") == 0) {
|
||||||
|
remove_arg(&argc, argv, i);
|
||||||
|
reset = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argc <= (reset ? 1 : 2)) {
|
||||||
|
enroll_config_usage(argv[-1]);
|
||||||
|
#ifdef IS_WINDOWS
|
||||||
|
system("pause");
|
||||||
|
#endif
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!reset && strlen(argv[2]) != 128) {
|
||||||
|
fprintf(stderr, "ERROR: BLAKE2B specified is not 128 characters long\n");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
bootloader_file = fopen(argv[1], "r+b");
|
||||||
|
if (bootloader_file == NULL) {
|
||||||
|
perror("ERROR");
|
||||||
|
goto cleanup;;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fseek(bootloader_file, 0, SEEK_END) != 0) {
|
||||||
|
perror("ERROR");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
size_t bootloader_size = ftell(bootloader_file);
|
||||||
|
rewind(bootloader_file);
|
||||||
|
|
||||||
|
bootloader = malloc(bootloader_size);
|
||||||
|
if (bootloader == NULL) {
|
||||||
|
perror("ERROR");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fread(bootloader, bootloader_size, 1, bootloader_file) != 1) {
|
||||||
|
perror("ERROR");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *checksum_loc = NULL;
|
||||||
|
size_t checked_count = 0;
|
||||||
|
const char *config_b2sum_sign = CONFIG_B2SUM_SIGNATURE;
|
||||||
|
for (size_t i = 0; i < bootloader_size - ((sizeof(CONFIG_B2SUM_SIGNATURE) - 1) + 128) + 1; i++) {
|
||||||
|
if (bootloader[i] != config_b2sum_sign[checked_count]) {
|
||||||
|
checked_count = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
checked_count++;
|
||||||
|
|
||||||
|
if (checked_count == sizeof(CONFIG_B2SUM_SIGNATURE) - 1) {
|
||||||
|
checksum_loc = &bootloader[i + 1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checksum_loc == NULL) {
|
||||||
|
fprintf(stderr, "ERROR: Checksum location not found in provided executable\n");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!reset) {
|
||||||
|
memcpy(checksum_loc, argv[2], 128);
|
||||||
|
} else {
|
||||||
|
memset(checksum_loc, '0', 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fseek(bootloader_file, 0, SEEK_SET) != 0) {
|
||||||
|
perror("ERROR");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if (fwrite(bootloader, bootloader_size, 1, bootloader_file) != 1) {
|
||||||
|
perror("ERROR");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!quiet) {
|
||||||
|
fprintf(stderr, "Config file BLAKE2B successfully %s!\n", reset ? "reset" : "enrolled");
|
||||||
|
}
|
||||||
|
ret = EXIT_SUCCESS;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (bootloader != NULL) {
|
||||||
|
free(bootloader);
|
||||||
|
}
|
||||||
|
if (bootloader_file != NULL) {
|
||||||
|
fclose(bootloader_file);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LIMINE_VERSION "@LIMINE_VERSION@"
|
||||||
|
|
||||||
|
static int version(void) {
|
||||||
|
puts(LIMINE_VERSION);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void general_usage(const char *name) {
|
||||||
|
printf("Usage: %s <command> <args...>\n", name);
|
||||||
|
printf("\n");
|
||||||
|
printf("Valid commands: help, version, bios-install, enroll-config\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
if (argc <= 1) {
|
||||||
|
general_usage(argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(argv[1], "help") == 0
|
||||||
|
|| strcmp(argv[1], "--help") == 0
|
||||||
|
|| strcmp(argv[1], "-h") == 0) {
|
||||||
|
general_usage(argv[0]);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
} else if (strcmp(argv[1], "bios-install") == 0) {
|
||||||
|
#ifndef LIMINE_NO_BIOS
|
||||||
|
return bios_install(argc - 1, &argv[1]);
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "ERROR: Limine has been compiled without BIOS support.\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
#endif
|
||||||
|
} else if (strcmp(argv[1], "enroll-config") == 0) {
|
||||||
|
return enroll_config(argc - 1, &argv[1]);
|
||||||
|
} else if (strcmp(argv[1], "version") == 0) {
|
||||||
|
return version();
|
||||||
|
}
|
||||||
|
|
||||||
|
general_usage(argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
@ -1,39 +0,0 @@
|
|||||||
.TH LIMINE-DEPLOY 1 "version @PACKAGE_VERSION@" "@REGEN_DATE@"
|
|
||||||
|
|
||||||
.SH NAME
|
|
||||||
limine-deploy \- install BIOS port's early stages to device
|
|
||||||
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B limine-deploy
|
|
||||||
.RI "<device> [ GPT partition index ]"
|
|
||||||
|
|
||||||
.SH DESCRIPTION
|
|
||||||
\fBlimine-deploy\fR installs the BIOS port's early stages to the specified device.
|
|
||||||
|
|
||||||
.SH OPTIONS
|
|
||||||
.TP
|
|
||||||
.BR \-h ", " \-\-help
|
|
||||||
Show the available command-line options and exit
|
|
||||||
.TP
|
|
||||||
.BR \-\-force-mbr
|
|
||||||
Force MBR detection to work even if the safety checks fail (\fIDANGEROUS\fR!)
|
|
||||||
.TP
|
|
||||||
.BR \-\-undeploy
|
|
||||||
Reverse the entire deployment procedure
|
|
||||||
.TP
|
|
||||||
.BR \-\-undeploy-data-file= \fIfilename
|
|
||||||
Set the input (for --undeploy) or output file name of the file which contains undeploy data
|
|
||||||
.TP
|
|
||||||
.BR \-\-quiet
|
|
||||||
Do not print verbose diagnostic messages
|
|
||||||
|
|
||||||
.SH BUGS
|
|
||||||
Please report bugs via
|
|
||||||
.IR @PACKAGE_BUGREPORT@ .
|
|
||||||
|
|
||||||
.SH HOMEPAGE
|
|
||||||
.I @PACKAGE_URL@
|
|
||||||
|
|
||||||
.SH SEE ALSO
|
|
||||||
.BR limine-version (1)
|
|
||||||
.BR limine-enroll-config (1)
|
|
@ -1,34 +0,0 @@
|
|||||||
.TH LIMINE-ENROLL-CONFIG 1 "version @PACKAGE_VERSION@" "@REGEN_DATE@"
|
|
||||||
|
|
||||||
.SH NAME
|
|
||||||
limine-enroll-config \- embed config hash into Limine executable
|
|
||||||
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B limine-enroll-config
|
|
||||||
.RI "<Limine executable> <BLAKE2B of config file>"
|
|
||||||
|
|
||||||
.SH DESCRIPTION
|
|
||||||
\fBlimine-enroll-config\fR embeds the config file's BLAKE2B hash into a valid Limine bootloader
|
|
||||||
executable, such as its EFI executable or limine.sys, for tampering prevention purposes.
|
|
||||||
|
|
||||||
.SH OPTIONS
|
|
||||||
.TP
|
|
||||||
.BR \-h ", " \-\-help
|
|
||||||
Show the available command-line options and exit
|
|
||||||
.TP
|
|
||||||
.BR \-\-reset
|
|
||||||
Remove enrolled BLAKE2B, will not check config intergrity
|
|
||||||
.TP
|
|
||||||
.BR \-\-quiet
|
|
||||||
Do not print verbose diagnostic messages
|
|
||||||
|
|
||||||
.SH BUGS
|
|
||||||
Please report bugs via
|
|
||||||
.IR @PACKAGE_BUGREPORT@ .
|
|
||||||
|
|
||||||
.SH HOMEPAGE
|
|
||||||
.I @PACKAGE_URL@
|
|
||||||
|
|
||||||
.SH SEE ALSO
|
|
||||||
.BR limine-version (1)
|
|
||||||
.BR limine-deploy (1)
|
|
@ -1,22 +0,0 @@
|
|||||||
.TH LIMINE-VERSION 1 "version @PACKAGE_VERSION@" "@REGEN_DATE@"
|
|
||||||
|
|
||||||
.SH NAME
|
|
||||||
limine-version \- print Limine version
|
|
||||||
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.B limine-version
|
|
||||||
|
|
||||||
.SH DESCRIPTION
|
|
||||||
\fBlimine-version\fR prints the version number of the installed copy of Limine
|
|
||||||
to standard output.
|
|
||||||
|
|
||||||
.SH BUGS
|
|
||||||
Please report bugs via
|
|
||||||
.IR @PACKAGE_BUGREPORT@ .
|
|
||||||
|
|
||||||
.SH HOMEPAGE
|
|
||||||
.I https://limine-bootloader.org/
|
|
||||||
|
|
||||||
.SH SEE ALSO
|
|
||||||
.BR limine-deploy (1)
|
|
||||||
.BR limine-enroll-config (1)
|
|
18
man/man1/limine.1.in
Normal file
18
man/man1/limine.1.in
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
.TH LIMINE 1 "version @PACKAGE_VERSION@" "@REGEN_DATE@"
|
||||||
|
|
||||||
|
.SH NAME
|
||||||
|
limine \- Multiplexer to several Limine-related utilities.
|
||||||
|
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B limine
|
||||||
|
.RI "<command> <args...>"
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
\fBlimine\fR provides a series of Limine-related utilities condensed in a single executable.
|
||||||
|
|
||||||
|
.SH BUGS
|
||||||
|
Please report bugs via
|
||||||
|
.IR @PACKAGE_BUGREPORT@ .
|
||||||
|
|
||||||
|
.SH HOMEPAGE
|
||||||
|
.I @PACKAGE_URL@
|
22
test.mk
22
test.mk
@ -33,7 +33,7 @@ ext2-test:
|
|||||||
$(MAKE) test-clean
|
$(MAKE) test-clean
|
||||||
$(MAKE) test.hdd
|
$(MAKE) test.hdd
|
||||||
$(MAKE) limine-bios
|
$(MAKE) limine-bios
|
||||||
$(MAKE) limine-deploy
|
$(MAKE) limine
|
||||||
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
||||||
rm -rf test_image/
|
rm -rf test_image/
|
||||||
mkdir test_image
|
mkdir test_image
|
||||||
@ -48,7 +48,7 @@ ext2-test:
|
|||||||
sudo umount test_image/
|
sudo umount test_image/
|
||||||
sudo losetup -d `cat loopback_dev`
|
sudo losetup -d `cat loopback_dev`
|
||||||
rm -rf test_image loopback_dev
|
rm -rf test_image loopback_dev
|
||||||
$(BINDIR)/limine-deploy test.hdd
|
$(BINDIR)/limine bios-install test.hdd
|
||||||
qemu-system-x86_64 -net none -smp 4 -hda test.hdd -debugcon stdio
|
qemu-system-x86_64 -net none -smp 4 -hda test.hdd -debugcon stdio
|
||||||
|
|
||||||
.PHONY: fat12-test
|
.PHONY: fat12-test
|
||||||
@ -56,7 +56,7 @@ fat12-test:
|
|||||||
$(MAKE) test-clean
|
$(MAKE) test-clean
|
||||||
$(MAKE) test.hdd
|
$(MAKE) test.hdd
|
||||||
$(MAKE) limine-bios
|
$(MAKE) limine-bios
|
||||||
$(MAKE) limine-deploy
|
$(MAKE) limine
|
||||||
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
||||||
rm -rf test_image/
|
rm -rf test_image/
|
||||||
mkdir test_image
|
mkdir test_image
|
||||||
@ -71,7 +71,7 @@ fat12-test:
|
|||||||
sudo umount test_image/
|
sudo umount test_image/
|
||||||
sudo losetup -d `cat loopback_dev`
|
sudo losetup -d `cat loopback_dev`
|
||||||
rm -rf test_image loopback_dev
|
rm -rf test_image loopback_dev
|
||||||
$(BINDIR)/limine-deploy test.hdd
|
$(BINDIR)/limine bios-install test.hdd
|
||||||
qemu-system-x86_64 -net none -smp 4 -hda test.hdd -debugcon stdio
|
qemu-system-x86_64 -net none -smp 4 -hda test.hdd -debugcon stdio
|
||||||
|
|
||||||
.PHONY: fat16-test
|
.PHONY: fat16-test
|
||||||
@ -79,7 +79,7 @@ fat16-test:
|
|||||||
$(MAKE) test-clean
|
$(MAKE) test-clean
|
||||||
$(MAKE) test.hdd
|
$(MAKE) test.hdd
|
||||||
$(MAKE) limine-bios
|
$(MAKE) limine-bios
|
||||||
$(MAKE) limine-deploy
|
$(MAKE) limine
|
||||||
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
||||||
rm -rf test_image/
|
rm -rf test_image/
|
||||||
mkdir test_image
|
mkdir test_image
|
||||||
@ -94,7 +94,7 @@ fat16-test:
|
|||||||
sudo umount test_image/
|
sudo umount test_image/
|
||||||
sudo losetup -d `cat loopback_dev`
|
sudo losetup -d `cat loopback_dev`
|
||||||
rm -rf test_image loopback_dev
|
rm -rf test_image loopback_dev
|
||||||
$(BINDIR)/limine-deploy test.hdd
|
$(BINDIR)/limine bios-install test.hdd
|
||||||
qemu-system-x86_64 -net none -smp 4 -hda test.hdd -debugcon stdio
|
qemu-system-x86_64 -net none -smp 4 -hda test.hdd -debugcon stdio
|
||||||
|
|
||||||
.PHONY: legacy-fat16-test
|
.PHONY: legacy-fat16-test
|
||||||
@ -103,7 +103,7 @@ legacy-fat16-test:
|
|||||||
$(MAKE) mbrtest.hdd
|
$(MAKE) mbrtest.hdd
|
||||||
fdisk -l mbrtest.hdd
|
fdisk -l mbrtest.hdd
|
||||||
$(MAKE) limine-bios
|
$(MAKE) limine-bios
|
||||||
$(MAKE) limine-deploy
|
$(MAKE) limine
|
||||||
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
||||||
rm -rf test_image/
|
rm -rf test_image/
|
||||||
mkdir test_image
|
mkdir test_image
|
||||||
@ -118,7 +118,7 @@ legacy-fat16-test:
|
|||||||
sudo umount test_image/
|
sudo umount test_image/
|
||||||
sudo losetup -d `cat loopback_dev`
|
sudo losetup -d `cat loopback_dev`
|
||||||
rm -rf test_image loopback_dev
|
rm -rf test_image loopback_dev
|
||||||
$(BINDIR)/limine-deploy mbrtest.hdd
|
$(BINDIR)/limine bios-install mbrtest.hdd
|
||||||
qemu-system-i386 -cpu pentium2 -m 16M -M isapc -net none -hda mbrtest.hdd -debugcon stdio
|
qemu-system-i386 -cpu pentium2 -m 16M -M isapc -net none -hda mbrtest.hdd -debugcon stdio
|
||||||
|
|
||||||
.PHONY: fat32-test
|
.PHONY: fat32-test
|
||||||
@ -126,7 +126,7 @@ fat32-test:
|
|||||||
$(MAKE) test-clean
|
$(MAKE) test-clean
|
||||||
$(MAKE) test.hdd
|
$(MAKE) test.hdd
|
||||||
$(MAKE) limine-bios
|
$(MAKE) limine-bios
|
||||||
$(MAKE) limine-deploy
|
$(MAKE) limine
|
||||||
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
$(MAKE) -C test TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk'
|
||||||
rm -rf test_image/
|
rm -rf test_image/
|
||||||
mkdir test_image
|
mkdir test_image
|
||||||
@ -141,7 +141,7 @@ fat32-test:
|
|||||||
sudo umount test_image/
|
sudo umount test_image/
|
||||||
sudo losetup -d `cat loopback_dev`
|
sudo losetup -d `cat loopback_dev`
|
||||||
rm -rf test_image loopback_dev
|
rm -rf test_image loopback_dev
|
||||||
$(BINDIR)/limine-deploy test.hdd
|
$(BINDIR)/limine bios-install test.hdd
|
||||||
qemu-system-x86_64 -net none -smp 4 -hda test.hdd -debugcon stdio
|
qemu-system-x86_64 -net none -smp 4 -hda test.hdd -debugcon stdio
|
||||||
|
|
||||||
.PHONY: iso9660-test
|
.PHONY: iso9660-test
|
||||||
@ -169,7 +169,7 @@ full-hybrid-test:
|
|||||||
sudo cp -rv $(BINDIR)/* test_image/boot/
|
sudo cp -rv $(BINDIR)/* test_image/boot/
|
||||||
sudo cp -rv test/* test_image/boot/
|
sudo cp -rv test/* test_image/boot/
|
||||||
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot boot/limine-cd-efi.bin -efi-boot-part --efi-boot-image --protective-msdos-label test_image/ -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-cd-efi.bin -efi-boot-part --efi-boot-image --protective-msdos-label test_image/ -o test.iso
|
||||||
$(BINDIR)/limine-deploy test.iso
|
$(BINDIR)/limine bios-install test.iso
|
||||||
qemu-system-x86_64 -m 512M -M q35 -bios ovmf-x64/OVMF.fd -net none -smp 4 -cdrom test.iso -debugcon stdio
|
qemu-system-x86_64 -m 512M -M q35 -bios ovmf-x64/OVMF.fd -net none -smp 4 -cdrom test.iso -debugcon stdio
|
||||||
qemu-system-x86_64 -m 512M -M q35 -bios ovmf-x64/OVMF.fd -net none -smp 4 -hda test.iso -debugcon stdio
|
qemu-system-x86_64 -m 512M -M q35 -bios ovmf-x64/OVMF.fd -net none -smp 4 -hda test.iso -debugcon stdio
|
||||||
qemu-system-x86_64 -m 512M -M q35 -bios ovmf-ia32/OVMF.fd -net none -smp 4 -cdrom test.iso -debugcon stdio
|
qemu-system-x86_64 -m 512M -M q35 -bios ovmf-ia32/OVMF.fd -net none -smp 4 -cdrom test.iso -debugcon stdio
|
||||||
|
Loading…
Reference in New Issue
Block a user