multiboot and multiboot2 bootchecks

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-08-25 20:34:07 +02:00
parent 5ad6967b19
commit 1e82303f1d
4 changed files with 112 additions and 1 deletions

View file

@ -126,6 +126,12 @@ linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S
linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
multiboot.elf: $(srcdir)/grub-core/tests/boot/multiboot.S
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
multiboot2.elf: $(srcdir)/grub-core/tests/boot/multiboot.S
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DMULTIBOOT2=1
kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S
$(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
@ -200,8 +206,16 @@ bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(s
bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
bootcheck-multiboot: multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg grub-shell
timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/multiboot.elf=multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
bootcheck-multiboot2: multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg grub-shell
timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/multiboot2.elf=multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
BOOTCHECKS=
BOOTCHECKS += bootcheck-multiboot bootcheck-multiboot2
BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64
BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64

View file

@ -0,0 +1,89 @@
#define ASM_FILE 1
#ifdef MULTIBOOT2
#include <multiboot2.h>
#else
#include <multiboot.h>
#endif
#define SHUTDOWN_PORT 0x8900
.text
/* Align 32 bits boundary. */
.align 8
#ifdef MULTIBOOT2
/* Multiboot header. */
multiboot_header:
/* magic */
.long MULTIBOOT2_HEADER_MAGIC
/* ISA: i386 */
.long MULTIBOOT_ARCHITECTURE_I386
/* Header length. */
.long multiboot_header_end - multiboot_header
/* checksum */
.long -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT_ARCHITECTURE_I386 + (multiboot_header_end - multiboot_header))
.short MULTIBOOT_HEADER_TAG_END
.short 0
.long 8
multiboot_header_end:
#else
/* Multiboot header. */
multiboot_header:
/* magic */
.long MULTIBOOT_HEADER_MAGIC
/* flags */
.long 0
/* checksum */
.long -MULTIBOOT_HEADER_MAGIC
#endif
.global start
portmsg:
xorl %eax, %eax
1:
movb 0(%esi), %al
test %eax, %eax
jz 1f
outb %al, %dx
incl %esi
jmp 1b
1:
ret
serialmsg:
1:
movb 0(%esi), %bl
testb %bl, %bl
jz 1f
movw $0x3fd, %dx
2:
inb %dx, %al
testb $0x20, %al
jz 2b
movw $0x3f8, %dx
movb %bl, %al
outb %al, %dx
incl %esi
jmp 1b
1:
ret
.globl _start
_start:
lea message, %esi
call serialmsg
lea shutdown, %esi
movw $SHUTDOWN_PORT, %dx
call portmsg
1:
hlt
jmp 1b
shutdown:
.ascii "Shutdown"
.byte 0
message:
.ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
.byte 0

View file

@ -0,0 +1,4 @@
multiboot /multiboot.elf
boot
# Shouln't happen
halt

View file

@ -0,0 +1,4 @@
multiboot2 /multiboot2.elf
boot
# Shouln't happen
halt