mirror of
https://github.com/tailix/libkernaux.git
synced 2025-06-02 18:21:48 -04:00
Power off and test example kernels
This commit is contained in:
parent
5296e9cce3
commit
120c21b8dd
14 changed files with 58 additions and 28 deletions
1
examples/kernel-multiboot2-grub/.gitignore
vendored
1
examples/kernel-multiboot2-grub/.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
/image.iso
|
/image.iso
|
||||||
|
/output.txt
|
||||||
/rootfs/boot/kernel
|
/rootfs/boot/kernel
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
all: run
|
all: test
|
||||||
|
|
||||||
CCPREFIX = ../../vendor/cross/bin/i386-elf-
|
CCPREFIX = ../../vendor/cross/bin/i386-elf-
|
||||||
|
|
||||||
AS = $(CCPREFIX)as
|
AS = $(CCPREFIX)as
|
||||||
CC = $(CCPREFIX)gcc
|
CC = $(CCPREFIX)gcc
|
||||||
|
|
||||||
|
DIFF = diff
|
||||||
GRUB_FILE = grub-file
|
GRUB_FILE = grub-file
|
||||||
GRUB_MKRESCUE = grub-mkrescue
|
GRUB_MKRESCUE = grub-mkrescue
|
||||||
|
QEMU = qemu-system-i386
|
||||||
|
|
||||||
|
EXPECTED = expected.txt
|
||||||
IMAGE = image.iso
|
IMAGE = image.iso
|
||||||
LINKERSCR = linker.ld
|
LINKERSCR = linker.ld
|
||||||
|
OUTPUT = output.txt
|
||||||
ROOTFS = rootfs
|
ROOTFS = rootfs
|
||||||
|
|
||||||
GRUBCFG = $(ROOTFS)/boot/grub/grub.cfg
|
GRUBCFG = $(ROOTFS)/boot/grub/grub.cfg
|
||||||
|
@ -28,11 +32,14 @@ CFLAGS = \
|
||||||
|
|
||||||
OBJS = main.c.o start.S.o
|
OBJS = main.c.o start.S.o
|
||||||
|
|
||||||
|
test: run
|
||||||
|
$(DIFF) -a -Z $(EXPECTED) $(OUTPUT)
|
||||||
|
|
||||||
run: $(IMAGE)
|
run: $(IMAGE)
|
||||||
qemu-system-i386 -cdrom $< -serial stdio -display none
|
$(QEMU) -cdrom $< -serial stdio -display none | tee $(OUTPUT)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(IMAGE) $(KERNEL) $(OBJS)
|
rm -f $(OUTPUT) $(IMAGE) $(KERNEL) $(OBJS)
|
||||||
|
|
||||||
$(IMAGE): $(GRUBCFG) $(KERNEL)
|
$(IMAGE): $(GRUBCFG) $(KERNEL)
|
||||||
$(GRUB_MKRESCUE) $(ROOTFS) -o $@
|
$(GRUB_MKRESCUE) $(ROOTFS) -o $@
|
||||||
|
|
BIN
examples/kernel-multiboot2-grub/expected.txt
Normal file
BIN
examples/kernel-multiboot2-grub/expected.txt
Normal file
Binary file not shown.
|
@ -5,7 +5,7 @@
|
||||||
#include <kernaux/console.h>
|
#include <kernaux/console.h>
|
||||||
#include <kernaux/multiboot2.h>
|
#include <kernaux/multiboot2.h>
|
||||||
|
|
||||||
void halt();
|
void poweroff();
|
||||||
|
|
||||||
static void panic(const char *str);
|
static void panic(const char *str);
|
||||||
|
|
||||||
|
@ -28,9 +28,9 @@ void main(
|
||||||
KernAux_Multiboot2_print(multiboot2_info, kernaux_console_printf);
|
KernAux_Multiboot2_print(multiboot2_info, kernaux_console_printf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void halt()
|
void poweroff()
|
||||||
{
|
{
|
||||||
panic("Kernel main function returned");
|
kernaux_asm_i386_outportw(0x604, 0x2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void panic(const char *const str)
|
void panic(const char *const str)
|
||||||
|
|
|
@ -32,9 +32,9 @@ _kernel_stack_end:
|
||||||
|
|
||||||
.global _start
|
.global _start
|
||||||
|
|
||||||
.type _start, @function
|
.type _start, @function
|
||||||
.type main, @function
|
.type main, @function
|
||||||
.type halt, @function
|
.type poweroff, @function
|
||||||
|
|
||||||
_start:
|
_start:
|
||||||
mov $_kernel_stack_end, %esp // Initialize stack
|
mov $_kernel_stack_end, %esp // Initialize stack
|
||||||
|
@ -43,6 +43,6 @@ _start:
|
||||||
push %eax // Multiboot magic number
|
push %eax // Multiboot magic number
|
||||||
call main
|
call main
|
||||||
|
|
||||||
call halt
|
call poweroff
|
||||||
|
|
||||||
.size _start, . - _start
|
.size _start, . - _start
|
||||||
|
|
1
examples/kernel-multiboot2-limine/.gitignore
vendored
1
examples/kernel-multiboot2-limine/.gitignore
vendored
|
@ -1,4 +1,5 @@
|
||||||
/image.iso
|
/image.iso
|
||||||
|
/output.txt
|
||||||
/rootfs/boot/kernel
|
/rootfs/boot/kernel
|
||||||
/rootfs/boot/limine-cd.bin
|
/rootfs/boot/limine-cd.bin
|
||||||
/rootfs/boot/limine-eltorito-efi.bin
|
/rootfs/boot/limine-eltorito-efi.bin
|
||||||
|
|
|
@ -1,16 +1,20 @@
|
||||||
all: run
|
all: test
|
||||||
|
|
||||||
CCPREFIX = ../../vendor/cross/bin/i386-elf-
|
CCPREFIX = ../../vendor/cross/bin/i386-elf-
|
||||||
|
|
||||||
AS = $(CCPREFIX)as
|
AS = $(CCPREFIX)as
|
||||||
CC = $(CCPREFIX)gcc
|
CC = $(CCPREFIX)gcc
|
||||||
|
|
||||||
|
DIFF = diff
|
||||||
GRUB_FILE = grub-file
|
GRUB_FILE = grub-file
|
||||||
LIMINE = ../../vendor/limine/build/bin
|
LIMINE = ../../vendor/limine/build/bin
|
||||||
|
QEMU = qemu-system-x86_64
|
||||||
XORRISO = xorriso
|
XORRISO = xorriso
|
||||||
|
|
||||||
|
EXPECTED = expected.txt
|
||||||
IMAGE = image.iso
|
IMAGE = image.iso
|
||||||
LINKERSCR = linker.ld
|
LINKERSCR = linker.ld
|
||||||
|
OUTPUT = output.txt
|
||||||
ROOTFS = rootfs
|
ROOTFS = rootfs
|
||||||
|
|
||||||
LIMINE_CD = $(LIMINE)/limine-cd.bin
|
LIMINE_CD = $(LIMINE)/limine-cd.bin
|
||||||
|
@ -43,11 +47,14 @@ CFLAGS = \
|
||||||
|
|
||||||
OBJS = main.c.o start.S.o
|
OBJS = main.c.o start.S.o
|
||||||
|
|
||||||
|
test: run
|
||||||
|
$(DIFF) -a -Z $(EXPECTED) $(OUTPUT)
|
||||||
|
|
||||||
run: $(IMAGE)
|
run: $(IMAGE)
|
||||||
qemu-system-x86_64 -cdrom $< -serial stdio -display none
|
$(QEMU) -cdrom $< -serial stdio -display none | tee $(OUTPUT)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(IMAGE) $(OBJS) $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS)
|
rm -f $(OUTPUT) $(IMAGE) $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS) $(OBJS)
|
||||||
|
|
||||||
$(IMAGE): $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS)
|
$(IMAGE): $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS)
|
||||||
$(XORRISO) -as mkisofs -b $(REL_LIMINE_CD) -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot $(REL_LIMINE_ELTORITO) -efi-boot-part --efi-boot-image --protective-msdos-label $(ROOTFS) -o $@
|
$(XORRISO) -as mkisofs -b $(REL_LIMINE_CD) -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot $(REL_LIMINE_ELTORITO) -efi-boot-part --efi-boot-image --protective-msdos-label $(ROOTFS) -o $@
|
||||||
|
|
BIN
examples/kernel-multiboot2-limine/expected.txt
Normal file
BIN
examples/kernel-multiboot2-limine/expected.txt
Normal file
Binary file not shown.
|
@ -5,7 +5,7 @@
|
||||||
#include <kernaux/console.h>
|
#include <kernaux/console.h>
|
||||||
#include <kernaux/multiboot2.h>
|
#include <kernaux/multiboot2.h>
|
||||||
|
|
||||||
void halt();
|
void poweroff();
|
||||||
|
|
||||||
static void panic(const char *str);
|
static void panic(const char *str);
|
||||||
|
|
||||||
|
@ -28,9 +28,9 @@ void main(
|
||||||
KernAux_Multiboot2_print(multiboot2_info, kernaux_console_printf);
|
KernAux_Multiboot2_print(multiboot2_info, kernaux_console_printf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void halt()
|
void poweroff()
|
||||||
{
|
{
|
||||||
panic("Kernel main function returned");
|
kernaux_asm_i386_outportw(0x604, 0x2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void panic(const char *const str)
|
void panic(const char *const str)
|
||||||
|
|
|
@ -32,9 +32,9 @@ _kernel_stack_end:
|
||||||
|
|
||||||
.global _start
|
.global _start
|
||||||
|
|
||||||
.type _start, @function
|
.type _start, @function
|
||||||
.type main, @function
|
.type main, @function
|
||||||
.type halt, @function
|
.type poweroff, @function
|
||||||
|
|
||||||
_start:
|
_start:
|
||||||
mov $_kernel_stack_end, %esp // Initialize stack
|
mov $_kernel_stack_end, %esp // Initialize stack
|
||||||
|
@ -43,6 +43,6 @@ _start:
|
||||||
push %eax // Multiboot magic number
|
push %eax // Multiboot magic number
|
||||||
call main
|
call main
|
||||||
|
|
||||||
call halt
|
call poweroff
|
||||||
|
|
||||||
.size _start, . - _start
|
.size _start, . - _start
|
||||||
|
|
1
examples/kernel-stivale2-limine/.gitignore
vendored
1
examples/kernel-stivale2-limine/.gitignore
vendored
|
@ -1,5 +1,6 @@
|
||||||
/image.iso
|
/image.iso
|
||||||
/main.c.d
|
/main.c.d
|
||||||
|
/output.txt
|
||||||
/rootfs/boot/kernel
|
/rootfs/boot/kernel
|
||||||
/rootfs/boot/limine-cd.bin
|
/rootfs/boot/limine-cd.bin
|
||||||
/rootfs/boot/limine-eltorito-efi.bin
|
/rootfs/boot/limine-eltorito-efi.bin
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
all: run
|
all: test
|
||||||
|
|
||||||
CCPREFIX = ../../vendor/cross/bin/x86_64-elf-
|
CCPREFIX = ../../vendor/cross/bin/x86_64-elf-
|
||||||
|
|
||||||
AS = $(CCPREFIX)as
|
AS = $(CCPREFIX)as
|
||||||
CC = $(CCPREFIX)gcc
|
CC = $(CCPREFIX)gcc
|
||||||
|
|
||||||
|
DIFF = diff
|
||||||
LIMINE = ../../vendor/limine/build/bin
|
LIMINE = ../../vendor/limine/build/bin
|
||||||
|
QEMU = qemu-system-x86_64
|
||||||
XORRISO = xorriso
|
XORRISO = xorriso
|
||||||
|
|
||||||
|
EXPECTED = expected.txt
|
||||||
IMAGE = image.iso
|
IMAGE = image.iso
|
||||||
LINKERSCR = linker.ld
|
LINKERSCR = linker.ld
|
||||||
|
OUTPUT = output.txt
|
||||||
ROOTFS = rootfs
|
ROOTFS = rootfs
|
||||||
|
|
||||||
LIMINE_CD = $(LIMINE)/limine-cd.bin
|
LIMINE_CD = $(LIMINE)/limine-cd.bin
|
||||||
|
@ -52,11 +56,14 @@ CFLAGS = \
|
||||||
|
|
||||||
OBJS = main.c.o # start.S.o
|
OBJS = main.c.o # start.S.o
|
||||||
|
|
||||||
|
test: run
|
||||||
|
$(DIFF) -a -Z $(EXPECTED) $(OUTPUT)
|
||||||
|
|
||||||
run: $(IMAGE)
|
run: $(IMAGE)
|
||||||
qemu-system-x86_64 -cdrom $< -serial stdio # -display none
|
$(QEMU) -cdrom $< -serial stdio -display none | tee $(OUTPUT)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(IMAGE) $(OBJS) $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS)
|
rm -f $(OUTPUT) $(IMAGE) $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS) $(OBJS)
|
||||||
|
|
||||||
$(IMAGE): $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS)
|
$(IMAGE): $(FULL_KERNEL) $(FULL_LIMINE_CD) $(FULL_LIMINE_ELTORITO) $(FULL_LIMINE_SYS)
|
||||||
$(XORRISO) -as mkisofs -b $(REL_LIMINE_CD) -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot $(REL_LIMINE_ELTORITO) -efi-boot-part --efi-boot-image --protective-msdos-label $(ROOTFS) -o $@
|
$(XORRISO) -as mkisofs -b $(REL_LIMINE_CD) -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot $(REL_LIMINE_ELTORITO) -efi-boot-part --efi-boot-image --protective-msdos-label $(ROOTFS) -o $@
|
||||||
|
|
0
examples/kernel-stivale2-limine/expected.txt
Normal file
0
examples/kernel-stivale2-limine/expected.txt
Normal file
|
@ -2,7 +2,9 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#include "stivale2.h"
|
#include "stivale2.h"
|
||||||
|
|
||||||
|
static void poweroff();
|
||||||
|
|
||||||
// We need to tell the stivale bootloader where we want our stack to be.
|
// We need to tell the stivale bootloader where we want our stack to be.
|
||||||
// We are going to allocate our stack as an array in .bss.
|
// We are going to allocate our stack as an array in .bss.
|
||||||
static uint8_t stack[8192];
|
static uint8_t stack[8192];
|
||||||
|
@ -126,8 +128,12 @@ void _start(struct stivale2_struct *stivale2_struct) {
|
||||||
// a simple "Hello World" to screen.
|
// a simple "Hello World" to screen.
|
||||||
term_write("Hello World", 11);
|
term_write("Hello World", 11);
|
||||||
|
|
||||||
// We're done, just hang...
|
poweroff();
|
||||||
for (;;) {
|
}
|
||||||
__asm__ ("hlt");
|
|
||||||
}
|
void poweroff()
|
||||||
|
{
|
||||||
|
const uint16_t port = 0x604;
|
||||||
|
const uint16_t value = 0x2000;
|
||||||
|
__asm__ volatile("outw %1, %0" : : "dN" (port), "a" (value));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue