multiboot and multiboot2 bootchecks
This commit is contained in:
parent
5ad6967b19
commit
1e82303f1d
4 changed files with 112 additions and 1 deletions
14
Makefile.am
14
Makefile.am
|
@ -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
|
linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(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
|
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 $@
|
$(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
|
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
|
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=
|
||||||
|
|
||||||
|
BOOTCHECKS += bootcheck-multiboot bootcheck-multiboot2
|
||||||
|
|
||||||
BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64
|
BOOTCHECKS += bootcheck-linux16-i386 bootcheck-linux16-x86_64
|
||||||
|
|
||||||
BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64
|
BOOTCHECKS += bootcheck-linux-i386 bootcheck-linux-x86_64
|
||||||
|
|
89
grub-core/tests/boot/multiboot.S
Normal file
89
grub-core/tests/boot/multiboot.S
Normal 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
|
4
grub-core/tests/boot/multiboot.cfg
Normal file
4
grub-core/tests/boot/multiboot.cfg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
multiboot /multiboot.elf
|
||||||
|
boot
|
||||||
|
# Shouln't happen
|
||||||
|
halt
|
4
grub-core/tests/boot/multiboot2.cfg
Normal file
4
grub-core/tests/boot/multiboot2.cfg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
multiboot2 /multiboot2.elf
|
||||||
|
boot
|
||||||
|
# Shouln't happen
|
||||||
|
halt
|
Loading…
Reference in a new issue