Use custom Limine build
Some checks failed
Build ISO image / build-and-deploy (push) Failing after 12s
Build documentation / build-and-deploy (push) Successful in 35s

This commit is contained in:
2026-04-23 19:38:32 +02:00
parent 24332da967
commit d712604e4f
32 changed files with 112 additions and 2609 deletions

1
.gitignore vendored
View File

@@ -8,3 +8,4 @@ mop3dist.tar
mop3dist.tar.lz4
site/
*.img
build_limine/

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "Limine"]
path = Limine
url = https://github.com/Limine-Bootloader/Limine.git

1
Limine Submodule

Submodule Limine added at 1276c44024

View File

@@ -1,5 +1,6 @@
platform ?= amd64
include make/limine.mk
include make/lz4.mk
include make/apps.mk
include make/kernel.mk

Binary file not shown.

View File

@@ -8,6 +8,7 @@ if [ "$1" = "debug" ]; then
bt="buildtype=debug"
fi
make -B all_limine
make -B all_lz4
make -B all_kernel "$bt"
make -B all_libu "$bt"

47
aux/drive_check_health.sh Executable file
View File

@@ -0,0 +1,47 @@
#!/bin/bash
if [[ -z "$1" ]]; then
echo "Usage: $0 <disk_image.img>"
exit 1
fi
IMAGE_FILE="$1"
if [[ ! -f "$IMAGE_FILE" ]]; then
echo "Error: File '$IMAGE_FILE' not found."
exit 1
fi
if fdisk -l "$IMAGE_FILE" > /dev/null 2>&1; then
echo "MBR ok"
fdisk -l "$IMAGE_FILE"
else
echo "MBR bad"
exit 1
fi
LOOP_DEV=$(sudo losetup --show -fP "$IMAGE_FILE")
cleanup() {
sudo losetup -d "$LOOP_DEV"
echo "$LOOP_DEV detached"
}
trap cleanup EXIT
PARTITIONS=$(lsblk -lnp -o NAME "$LOOP_DEV" | grep -v "^$LOOP_DEV$")
if [[ -z "$PARTITIONS" ]]; then
echo "no partitions found"
else
for PART in $PARTITIONS; do
echo "Checking partition: $PART"
sudo fsck.fat -nv "$PART"
if [ $? -eq 0 ]; then
echo "$PART ok"
else
echo "$PART bad"
fi
echo "------------------------------------------"
done
fi

View File

@@ -8,7 +8,7 @@ mkdir -p img_root/EFI/BOOT
cp -v kernel/build/kernel.elf img_root/boot/
cp -v boot/limine/limine-bios.sys boot/limine.conf img_root/boot/limine/
cp -v boot/limine/limine-bios-cd.bin boot/limine/limine-uefi-cd.bin img_root/boot/limine/
cp -v boot/limine/BOOTX64.EFI boot/limine/BOOTIA32.EFI img_root/EFI/BOOT/
cp -v boot/limine/BOOTX64.EFI img_root/EFI/BOOT/
cp -v mop3dist.tar.lz4 img_root/boot/
dd if=/dev/zero of=mop3.img bs=1M count=64

View File

@@ -3,15 +3,20 @@
make -C boot/limine
rm -rf iso_root
mkdir -p iso_root/boot/limine
mkdir -p iso_root/EFI/BOOT
cp -v kernel/build/kernel.elf iso_root/boot
cp -v boot/limine/limine-bios.sys boot/limine/limine-bios-cd.bin \
boot/limine.conf iso_root/boot/limine
boot/limine/limine-uefi-cd.bin boot/limine.conf iso_root/boot/limine
cp -v boot/limine/BOOTX64.EFI iso_root/EFI/BOOT
cp -v mop3dist.tar.lz4 iso_root/boot
xorriso -as mkisofs -R -r -b boot/limine/limine-bios-cd.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-no-emul-boot -boot-load-size 4 -boot-info-table -hfsplus \
-apm-block-size 2048 --efi-boot boot/limine/limine-uefi-cd.bin \
-efi-boot-part --efi-boot-image --protective-msdos-label \
iso_root -o mop3.iso
boot/limine/limine bios-install mop3.iso

1
boot/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
limine/

View File

@@ -1,2 +0,0 @@
limine
limine.exe

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,22 +0,0 @@
Copyright (C) 2019-2025 Mintsuki and contributors.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@@ -1,19 +0,0 @@
.POSIX:
SHELL=/bin/sh
CC=cc
CFLAGS=-g -O2 -pipe
CPPFLAGS=
LDFLAGS=
LIBS=
.PHONY: all
all: limine
.PHONY: clean
clean:
rm -f limine limine.exe
limine: limine.c
$(CC) $(CFLAGS) -std=c99 $(CPPFLAGS) $(LDFLAGS) $< $(LIBS) -o $@

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -23,13 +23,18 @@ mkvol bootpart $3 $1p0
# Prepare directories
mkdir bootpart:/boot
mkdir bootpart:/boot/limine
mkdir bootpart:/EFI
mkdir bootpart:/EFI/BOOT
# Copy files
copy bootmedia:/boot/kernel.elf bootpart:/boot/kernel.elf
copy bootmedia:/boot/limine/limine-bios.sys bootpart:/boot/limine/limine-bios.sys
copy bootmedia:/boot/limine/limine-bios-cd.bin bootpart:/boot/limine/limine-bios-cd.bin
copy bootmedia:/boot/limine/limine.conf bootpart:/boot/limine/limine.conf
copy bootmedia:/boot/limine/limine-uefi-cd.bin bootpart:/boot/limine/limine-uefi-cd.bin
copy bootmedia:/boot/mop3dist.tar.lz4 bootpart:/boot/mop3dist.tar.lz4
copy bootmedia:/EFI/BOOT/BOOTIA32.EFI bootpart:/EFI/BOOT/BOOTIA32.EFI
copy bootmedia:/EFI/BOOT/BOOTX64.EFI bootpart:/EFI/BOOT/BOOTX64.EFI
# List
ls bootpart:/boot

View File

@@ -27,5 +27,6 @@
#define ST_XDRV_WRITE_ERROR 23
#define ST_NOT_PARTIAL 24
#define ST_USB_CTRL_ERROR 25
#define ST_IO_ERROR 26
#endif // _M_STATUS_H

View File

@@ -112,3 +112,19 @@ void* memmove (void* dest, const void* src, unsigned int n) {
}
return dest;
}
char* strchr (register const char* s, int c) {
do {
if (*s == c) {
return (char*)s;
}
} while (*s++);
return (0);
}
char* strcpy (char* strDest, const char* strSrc) {
char* temp = strDest;
while ((*strDest++ = *strSrc++))
;
return temp;
}

View File

@@ -23,4 +23,10 @@ void* memmove (void* dest, const void* src, unsigned int n);
#define strlen_null(x) (strlen ((x)) + 1)
char* strchr (register const char* s, int c);
char* strcpy (char* strDest, const char* strSrc);
char* strcat (char* dest, const char* src);
#endif // _KERNEL_LIBK_STRING_H

View File

@@ -30,6 +30,7 @@ static const char* str_status[] = {
[ST_XDRV_WRITE_ERROR] = "drive write error",
[ST_NOT_PARTIAL] = "not a partially created process",
[ST_USB_CTRL_ERROR] = "USB controller error",
[ST_IO_ERROR] = "I/O Error",
};
#endif // _LIBSYSTEM_STR_STATUS_H

16
make/limine.mk Normal file
View File

@@ -0,0 +1,16 @@
LIMINE_OPTS=--enable-bios-cd \
--enable-bios \
--enable-uefi-x86-64 \
--enable-uefi-cd
all_limine:
mkdir -p build_limine && \
cd build_limine && \
../Limine/bootstrap && \
../Limine/configure $(LIMINE_OPTS) && \
make -j $(nproc) && \
rm -rf ../boot/limine && \
cp -r ./bin ../boot/limine
.PHONY: all_limine

View File

@@ -1208,3 +1208,4 @@ const char binary_limine_hdd_bin_data[] = {
0x8d, 0x50, 0xf9, 0x6c, 0xb0, 0x7c, 0x56, 0x01, 0xfa, 0xb9, 0x4e, 0xf9, 0x7d, 0x83, 0x61, 0xfe,
0x3f, 0x19, 0xa8, 0x86, 0x93, 0x70, 0x5e, 0x00, 0x00,
};
/* clang-format on */

View File

@@ -66,6 +66,9 @@ static void ask_and_setup_dos_partition (struct dos_pte* pte, int part_num) {
part_sector_count = str_to_uint32 (part_sector_count_str);
part_isboot = (strcmp (part_isboot_str, "yes") == 0);
if (part_sector_count == 0)
return;
pte->start_lba = part_start_lba;
pte->sector_count = part_sector_count;