]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
kOpenBSD bootcheck
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 28 Aug 2010 12:51:54 +0000 (14:51 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 28 Aug 2010 12:51:54 +0000 (14:51 +0200)
Makefile.am
grub-core/tests/boot/kbsd.init-i386.S [moved from grub-core/tests/boot/knetbsd.init-i386.S with 76% similarity]
grub-core/tests/boot/kopenbsd.cfg [new file with mode: 0644]
grub-core/tests/boot/kopenbsdlabel.txt [new file with mode: 0644]

index 4b0ef7f4c00cadb0428f581e8c0870c8714b9ac3..35f93bfb652ff3450ea2b8aad194707f9f580f63 100644 (file)
@@ -144,8 +144,11 @@ kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S
 kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S
        $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
 
-knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/knetbsd.init-i386.S
-       $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
+knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S
+       $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
+
+kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S
+       $(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
 
 knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/knetbsd.init-x86_64.S
        $(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
@@ -162,8 +165,8 @@ kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile
 knetbsd.image.i386: knetbsd.init.i386 $(srcdir)/grub-core/tests/boot/kbsd.spec.txt
        TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR
 
-kopenbsd.image.i386: kopenbsd.init.i386
-       TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR
+kopenbsd.image.i386: kopenbsd.init.i386 $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt
+       TDIR=`mktemp -d` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 128k -f 10 -o minfree=0,version=1 $@ $$TDIR && bsdlabel -f -R $@ $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt && rm -rf $$TDIR || rm -f $@
 
 knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386
        $(OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@
@@ -195,7 +198,10 @@ knetbsd.miniroot-image.i386.gz: knetbsd.miniroot-image.i386.img
        gzip < $< > $@
 
 bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg grub-shell
-       timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=qemu-system-i386 --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
+       timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
+
+bootcheck-kopenbsd-i386: kopenbsd.image.i386 $(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg grub-shell
+       timeout -s KILL $(BOOTCHECK_TIMEOUT) ./grub-shell --qemu-opts="$(GRUB_QEMU_OPTS)" --boot=$(BOOTTARGET) --qemu=$(QEMU32) --files=/ramdisk=kopenbsd.image.i386 --files=/kopenbsd=$(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
 
 knetbsd.miniroot-image.x86_64.gz: knetbsd.miniroot-image.x86_64.img
        gzip < $< > $@
similarity index 76%
rename from grub-core/tests/boot/knetbsd.init-i386.S
rename to grub-core/tests/boot/kbsd.init-i386.S
index 587b4f41f43fbddd9a4e8b1828040cc4bbc6e934..7011c79ffb7c429141d0122242b170676e40887a 100644 (file)
  *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#ifdef TARGET_NETBSD
+#define SYSCALL_RESET 208
+#elif defined (TARGET_OPENBSD)
+#define SYSCALL_RESET 55
+#else
+#error unknown target
+#endif
+
 #define MODE_RDRW 2
 #define FLAGS_NONE 0
 #define SYSCALL_OPEN 5
 #define SYSCALL_WRITE 4
-#define SYSCALL_RESET 208
 #define SYSCALL_EXIT 1
+#define SYSCALL_ARCH 165
 #define SYSCALL_INT 0x80
+#define SYSCALL_ARCH_IOPL      2
 
 #define RESET_NOSYNC 0x4
 #define RESET_HALT 0x8
 #define RESET_POWEROFF 0x800
 
+#define SHUTDOWN_PORT 0x8900
+
        .section ".init", "ax"
        .global start,_start
 start:
@@ -53,6 +64,32 @@ _start:
        int $SYSCALL_INT
        addl $16, %esp
 
+       /* IOPL.  */
+       movl $SYSCALL_ARCH, %eax
+       pushl $iopl_arg
+       pushl $SYSCALL_ARCH_IOPL
+       pushl $0
+       int $SYSCALL_INT
+       addl $12, %esp
+
+       movw $SHUTDOWN_PORT, %dx
+       movb $'S', %al
+       outb %al, %dx
+       movb $'h', %al
+       outb %al, %dx
+       movb $'u', %al
+       outb %al, %dx
+       movb $'t', %al
+       outb %al, %dx
+       movb $'d', %al
+       outb %al, %dx
+       movb $'o', %al
+       outb %al, %dx
+       movb $'w', %al
+       outb %al, %dx
+       movb $'n', %al
+       outb %al, %dx
+
        /* shutdown.  */
        movl $SYSCALL_RESET, %eax
        pushl $0
@@ -84,3 +121,5 @@ device:
 message:
        .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
 messageend:
+iopl_arg:
+       .long 3
diff --git a/grub-core/tests/boot/kopenbsd.cfg b/grub-core/tests/boot/kopenbsd.cfg
new file mode 100644 (file)
index 0000000..132bec4
--- /dev/null
@@ -0,0 +1,5 @@
+kopenbsd /kopenbsd -h
+kopenbsd_ramdisk /ramdisk
+boot
+# Shouln't happen
+halt
diff --git a/grub-core/tests/boot/kopenbsdlabel.txt b/grub-core/tests/boot/kopenbsdlabel.txt
new file mode 100644 (file)
index 0000000..bb14113
--- /dev/null
@@ -0,0 +1,3 @@
+#        size   offset    fstype   [fsize bsize bps/cpg]
+  a:      256        0    4.2BSD        0     0     1 
+  c:      256        0    unused        0     0         # "raw" part, don't edit