* Convert grub2 kernel core.img to linux kernel format
@ 2007-12-01 14:16 Bean
2007-12-06 11:56 ` Robert Millan
0 siblings, 1 reply; 7+ messages in thread
From: Bean @ 2007-12-01 14:16 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 500 bytes --]
Hi,
I've just written a header file that can be used to convert core.img
to linux kernel format:
cat lnxhdr.bin core.img > grub2.bin
You can then load grub2.bin from syslinux/isolinux/pxelinux/lilo or
any other boot loader that supports linux kernel.
qemu support linux kernel as well. Now you can start grub2 like this:
qemu -kernel grub2.bin -hda aa.dsk
To compile lnxhdr.bin, use the following commands:
gcc -nostdlib -Wl,-N -o lnxhdr lnxhdr.S
objcopy -O binary lnxhdr lnxhdr.bin
--
Bean
[-- Attachment #2: lnxhdr.zip --]
[-- Type: application/zip, Size: 2275 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Convert grub2 kernel core.img to linux kernel format
2007-12-01 14:16 Convert grub2 kernel core.img to linux kernel format Bean
@ 2007-12-06 11:56 ` Robert Millan
2007-12-06 16:13 ` Bean
0 siblings, 1 reply; 7+ messages in thread
From: Robert Millan @ 2007-12-06 11:56 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, Dec 01, 2007 at 10:16:38PM +0800, Bean wrote:
> Hi,
>
> I've just written a header file that can be used to convert core.img
> to linux kernel format:
>
> cat lnxhdr.bin core.img > grub2.bin
>
> You can then load grub2.bin from syslinux/isolinux/pxelinux/lilo or
> any other boot loader that supports linux kernel.
>
> qemu support linux kernel as well. Now you can start grub2 like this:
>
> qemu -kernel grub2.bin -hda aa.dsk
>
> To compile lnxhdr.bin, use the following commands:
>
> gcc -nostdlib -Wl,-N -o lnxhdr lnxhdr.S
> objcopy -O binary lnxhdr lnxhdr.bin
Very nice! Can you resend as a patch that puts it in the tree ? (+ ChangeLog)
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Convert grub2 kernel core.img to linux kernel format
2007-12-06 11:56 ` Robert Millan
@ 2007-12-06 16:13 ` Bean
2007-12-12 15:34 ` Robert Millan
0 siblings, 1 reply; 7+ messages in thread
From: Bean @ 2007-12-06 16:13 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 505 bytes --]
Hi,
Added a new file boot/i386/pc/lnxboot.S, which will compile into
lnxboot.img. You can use it in a few ways:
1, Use it as standalone kernel, core.img as initrd
kernel lnxboot.img
initrd core.img
For example, you can start grub2 in qemu like this:
qemu -kernel lnxboot.img -initrd core.img ...
2, Create a combined kernel:
cat lnxboot.img core.img > grub2.img
You can then load grub2.img as kernel
kernel grub2.img
The image grub2.img can also be loaded using the grldr boot loader.
--
Bean
[-- Attachment #2: grub2-lnxboot.diff --]
[-- Type: application/octet-stream, Size: 7091 bytes --]
2007-12-06 Bean <bean123ch@gmail.com>
* conf/i386-pc.rmk (pkgdata_IMAGES): Add lnxboot.img.
(lnxboot_img_SOURCES): New variable.
(lnxboot_img_ASFLAGS): Likewise.
(lnxboot_img_LDFLAGS): Likewise.
* boot/i386/pc/lnxboot.S: New file.
Index: conf/i386-pc.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/i386-pc.rmk,v
retrieving revision 1.94
diff -u -p -r1.94 i386-pc.rmk
--- conf/i386-pc.rmk 18 Nov 2007 06:41:45 -0000 1.94
+++ conf/i386-pc.rmk 6 Dec 2007 15:56:02 -0000
@@ -5,7 +5,7 @@ COMMON_CFLAGS = -fno-builtin -mrtd -mreg
COMMON_LDFLAGS = -m32 -nostdlib
# Images.
-pkgdata_IMAGES = boot.img diskboot.img kernel.img pxeboot.img
+pkgdata_IMAGES = boot.img diskboot.img kernel.img pxeboot.img lnxboot.img
# For boot.img.
boot_img_SOURCES = boot/i386/pc/boot.S
@@ -22,6 +22,11 @@ diskboot_img_SOURCES = boot/i386/pc/disk
diskboot_img_ASFLAGS = $(COMMON_ASFLAGS)
diskboot_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,8000
+# For lnxboot.img.
+lnxboot_img_SOURCES = boot/i386/pc/lnxboot.S
+lnxboot_img_ASFLAGS = $(COMMON_ASFLAGS)
+lnxboot_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,6000
+
# For kernel.img.
kernel_img_SOURCES = kern/i386/pc/startup.S kern/main.c kern/device.c \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
Index: boot/i386/pc/lnxboot.S
===================================================================
RCS file: /sources/grub/grub2/boot/i386/pc/lnxboot.S,v
diff -Nu boot/i386/pc/lnxboot.S
--- /dev/null 2007-12-07 07:38:42.252044265 +0800
+++ boot/i386/pc/lnxboot.S 2007-12-06 23:49:09.359375000 +0800
@@ -0,0 +1,292 @@
+/* -*-Asm-*- */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 1999,2000,2001,2002,2005,2006,2007 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/boot.h>
+#include <grub/machine/boot.h>
+#include <grub/machine/kernel.h>
+
+ .file "lnxboot.S"
+
+#define CODE_ADDR 0x6000
+#define CODE_LENG (code_end - start)
+#define DATA_ADDR ((GRUB_BOOT_MACHINE_KERNEL_ADDR) + 0x200)
+
+#define BLCK_LENG 0x4000
+
+ .text
+
+ .code16
+
+ .globl start, _start
+
+data_start:
+ pushw %cs
+ popw %ds
+ xorl %eax, %eax
+ xorl %ebx, %ebx
+ call data_next
+
+data_next:
+ popw %bx
+ movw %cs, %ax
+ shll $4, %eax
+ leal 0x200 + data_start - data_next(%ebx,%eax), %eax
+ movzbl setup_sects - data_next(%bx), %ecx
+ shll $9, %ecx
+ addl %ecx, %eax
+ movl %eax, code32_start - data_next(%bx)
+
+ jmp linux_next
+
+ . = data_start + 0x1F1
+
+setup_sects:
+ .byte (CODE_LENG >> 9)
+root_flags:
+ .word 0
+syssize:
+ .word 0
+swap_dev:
+ .word 0
+ram_size:
+ .word 0
+vid_mode:
+ .word 0
+root_dev:
+ .word 0
+boot_flag:
+ .word 0xAA55
+
+start:
+_start:
+
+ jmp linux_code
+
+ .ascii "HdrS" // Header signature
+ .word 0x0203 // Header version number
+
+realmode_swtch:
+ .word 0, 0 // default_switch, SETUPSEG
+start_sys_seg:
+ .word 0x1000 // obsolete
+version_ptr:
+ .word 0 // version string ptr
+type_of_loader:
+ .byte 0 // Filled in by boot loader
+loadflags:
+ .byte 1 // Please load high
+setup_move_size:
+ .word 0 // Unused
+code32_start:
+ .long 0x100000 // 32-bit start address
+ramdisk_image:
+ .long 0 // Loaded ramdisk image address
+ramdisk_size:
+ .long 0 // Size of loaded ramdisk
+bootsect_kludge:
+ .word 0, 0
+heap_end_ptr:
+ .word 0
+pad1:
+ .word 0
+cmd_line_ptr:
+ .long 0 // Command line
+ramdisk_max:
+ .long 0xffffffff // Highest allowed ramdisk address
+
+gdt:
+ .long 0, 0, 0, 0 // Must be zero
+ .word 0xffff // 64 K segment size
+gdt_src1:
+ .byte 0, 0 ,0 // Low 24 bits of source addy
+ .byte 0x93 // Access rights
+ .byte 0 // Extended access rights
+gdt_src2:
+ .byte 0 // High 8 bits of source addy
+ .word 0xffff // 64 K segment size
+gdt_dst1:
+ .byte 0, 0, 0 // Low 24 bits of target addy
+ .byte 0x93 // Access rights
+ .byte 0 // Extended access rights
+gdt_dst2:
+ .byte 0 // High 8 bits of source addy
+ .long 0, 0, 0, 0 // More space for the BIOS
+
+reg_edx:
+ .byte 0x80,0,0xFF,0xFF
+
+data_leng:
+ .long 0
+
+linux_code:
+
+ movw %cs:(reg_edx - start), %dx
+
+linux_next:
+
+ call normalize
+
+normalize:
+ popw %bx
+ subw $(normalize - start), %bx
+ shrw $4, %bx
+ movw %cs, %ax
+ addw %bx, %ax
+ pushw %ax
+ pushw $(real_code - start)
+ lret // jump to real_code
+
+real_code:
+ subw $0x20, %ax
+ movw %ax, %ds
+ movw (setup_sects - data_start), %cx
+ shlw $7, %cx
+
+ // Setup stack
+
+ xorw %si, %si
+ movw %si, %ss
+ movw $(CODE_ADDR), %sp
+
+ pushl %esi
+ pushl %edi
+
+ // Move itself to 0:CODE_ADDR
+
+ cld
+ movw %cs, %ax
+ movw %ax, %ds
+ movw $(CODE_ADDR >> 4), %ax
+ movw %ax, %es
+ movw %si, %di
+
+ rep
+ movsl
+
+ ljmp $(CODE_ADDR >> 4), $(real_code_2 - start)
+
+real_code_2:
+
+ pushw %es
+ popw %ds
+
+ movl (ramdisk_image - start), %esi
+ or %esi, %esi
+ jnz 1f
+ movl (code32_start - start), %esi
+1:
+
+ movl $0x200, %ecx
+ addl %ecx, %esi
+ movl $DATA_ADDR, %edi
+
+ call move_memory
+
+ movsbl %dh, %eax
+ movl %eax, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_INSTALL_DOS_PART)
+
+ movsbl (reg_edx + 2 - start), %eax
+ movl %eax, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_INSTALL_BSD_PART)
+
+ movl %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_COMPRESSED_SIZE), %ecx
+ addl $(GRUB_KERNEL_MACHINE_RAW_SIZE - 0x200), %ecx
+
+ call move_memory
+
+ popl %edi
+ popl %esi
+
+ ljmp $(DATA_ADDR >> 4), $0
+
+// Parameters:
+// esi: source address
+// edi: target address
+// ecx: number of bytes
+move_memory:
+ incl %ecx
+ andb $0xFE, %cl
+ pushw %dx
+1:
+ pushl %esi
+ pushl %edi
+ pushl %ecx
+ cmpl $BLCK_LENG, %ecx
+ jbe 2f
+ movl $BLCK_LENG, %ecx
+2:
+ pushl %ecx
+
+ movl %esi, %eax
+ movw %si, (gdt_src1 - start)
+ shrl $16, %eax
+ movb %al, (gdt_src1 + 2 - start)
+ movb %ah, (gdt_src2 - start)
+
+ movl %edi, %eax
+ movw %di, (gdt_dst1 - start)
+ shrl $16, %eax
+ movb %al, (gdt_dst1 + 2 - start)
+ movb %ah, (gdt_dst2 - start)
+
+ movw $(gdt - start), %si
+ movb $0x87, %ah
+ shrw $1, %cx
+
+ int $0x15
+
+ popl %eax
+ popl %ecx
+ popl %edi
+ popl %esi
+
+ jnc 2f
+ movw $(err_int15_msg - start), %si
+ jmp fail
+
+2:
+
+ leal (%esi, %eax), %esi
+ leal (%edi, %eax), %edi
+ subl %eax, %ecx
+ jnz 1b
+
+
+ popw %dx
+ ret
+
+// Parameters:
+// si: message
+fail:
+ movb $0x0e, %ah
+ xorw %bx, %bx
+1:
+ lodsb (%si), %al
+ int $0x10
+ cmpb $0, %al
+ jne 1b
+1: jmp 1b
+
+err_int15_msg:
+ .ascii "move memory fails\0"
+
+ . = (. & (~0x1FF)) + 0x1FF
+
+ .byte 0
+
+code_end:
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Convert grub2 kernel core.img to linux kernel format
2007-12-06 16:13 ` Bean
@ 2007-12-12 15:34 ` Robert Millan
2007-12-12 16:20 ` Bean
0 siblings, 1 reply; 7+ messages in thread
From: Robert Millan @ 2007-12-12 15:34 UTC (permalink / raw)
To: The development of GRUB 2
On Fri, Dec 07, 2007 at 12:13:03AM +0800, Bean wrote:
> Hi,
>
> Added a new file boot/i386/pc/lnxboot.S, which will compile into
Could you make this boot/i386/lnxboot.S ? In principle, this should work on
other firmware (except maybe EFI). It'd also be good to include it in the
makefile for at least i386-linuxbios.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Convert grub2 kernel core.img to linux kernel format
2007-12-12 15:34 ` Robert Millan
@ 2007-12-12 16:20 ` Bean
2007-12-13 2:06 ` Bean
0 siblings, 1 reply; 7+ messages in thread
From: Bean @ 2007-12-12 16:20 UTC (permalink / raw)
To: The development of GRUB 2
Ok.
2007-12-12 Bean <bean123ch@gmail.com>
* conf/i386-pc.rmk (pkgdata_IMAGES): Add lnxboot.img.
(lnxboot_img_SOURCES): New variable.
(lnxboot_img_ASFLAGS): Likewise.
(lnxboot_img_LDFLAGS): Likewise.
* conf/i386-linuxbios.rmk (pkgdata_PROGRAMS): Add lnxboot.img
(lnxboot_img_SOURCES): New variable.
(lnxboot_img_ASFLAGS): Likewise.
(lnxboot_img_LDFLAGS): Likewise.
* boot/i386/lnxboot.S: New file.
Index: conf/i386-pc.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/i386-pc.rmk,v
retrieving revision 1.94
diff -u -p -r1.94 i386-pc.rmk
--- conf/i386-pc.rmk 18 Nov 2007 06:41:45 -0000 1.94
+++ conf/i386-pc.rmk 6 Dec 2007 15:56:02 -0000
@@ -5,7 +5,7 @@ COMMON_CFLAGS = -fno-builtin -mrtd -mreg
COMMON_LDFLAGS = -m32 -nostdlib
# Images.
-pkgdata_IMAGES = boot.img diskboot.img kernel.img pxeboot.img
+pkgdata_IMAGES = boot.img diskboot.img kernel.img pxeboot.img lnxboot.img
# For boot.img.
boot_img_SOURCES = boot/i386/pc/boot.S
@@ -22,6 +22,11 @@ diskboot_img_SOURCES = boot/i386/pc/disk
diskboot_img_ASFLAGS = $(COMMON_ASFLAGS)
diskboot_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,8000
+# For lnxboot.img.
+lnxboot_img_SOURCES = boot/i386/lnxboot.S
+lnxboot_img_ASFLAGS = $(COMMON_ASFLAGS)
+lnxboot_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,6000
+
# For kernel.img.
kernel_img_SOURCES = kern/i386/pc/startup.S kern/main.c kern/device.c \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
Index: conf/i386-linuxbios.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/i386-linuxbios.rmk,v
retrieving revision 1.3
diff -u -p -r1.3 i386-linuxbios.rmk
--- conf/i386-linuxbios.rmk 18 Nov 2007 06:41:45 -0000 1.3
+++ conf/i386-linuxbios.rmk 12 Dec 2007 16:15:45 -0000
@@ -5,7 +5,12 @@ COMMON_CFLAGS = -ffreestanding -mrtd -mr
COMMON_LDFLAGS = -nostdlib -static -lgcc
# Images.
-pkgdata_PROGRAMS = kernel.elf
+pkgdata_PROGRAMS = kernel.elf lnxboot.img
+
+# For lnxboot.img.
+lnxboot_img_SOURCES = boot/i386/lnxboot.S
+lnxboot_img_ASFLAGS = $(COMMON_ASFLAGS)
+lnxboot_img_LDFLAGS = -m32 -nostdlib -Wl,-N,-Ttext,6000
# For kernel.elf.
kernel_elf_SOURCES = kern/i386/linuxbios/startup.S kern/i386/linuxbios/init.c \
Index: boot/i386/lnxboot.S
===================================================================
RCS file: /sources/grub/grub2/boot/i386/lnxboot.S,v
diff -Nu boot/i386/lnxboot.S
--- /dev/null 2007-12-07 07:38:42.252044265 +0800
+++ boot/i386/lnxboot.S 2007-12-06 23:49:09.359375000 +0800
@@ -0,0 +1,292 @@
+/* -*-Asm-*- */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 1999,2000,2001,2002,2005,2006,2007 Free Software
Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/boot.h>
+#include <grub/machine/boot.h>
+#include <grub/machine/kernel.h>
+
+ .file "lnxboot.S"
+
+#define CODE_ADDR 0x6000
+#define CODE_LENG (code_end - start)
+#define DATA_ADDR ((GRUB_BOOT_MACHINE_KERNEL_ADDR) + 0x200)
+
+#define BLCK_LENG 0x4000
+
+ .text
+
+ .code16
+
+ .globl start, _start
+
+data_start:
+ pushw %cs
+ popw %ds
+ xorl %eax, %eax
+ xorl %ebx, %ebx
+ call data_next
+
+data_next:
+ popw %bx
+ movw %cs, %ax
+ shll $4, %eax
+ leal 0x200 + data_start - data_next(%ebx,%eax), %eax
+ movzbl setup_sects - data_next(%bx), %ecx
+ shll $9, %ecx
+ addl %ecx, %eax
+ movl %eax, code32_start - data_next(%bx)
+
+ jmp linux_next
+
+ . = data_start + 0x1F1
+
+setup_sects:
+ .byte (CODE_LENG >> 9)
+root_flags:
+ .word 0
+syssize:
+ .word 0
+swap_dev:
+ .word 0
+ram_size:
+ .word 0
+vid_mode:
+ .word 0
+root_dev:
+ .word 0
+boot_flag:
+ .word 0xAA55
+
+start:
+_start:
+
+ jmp linux_code
+
+ .ascii "HdrS" // Header signature
+ .word 0x0203 // Header version number
+
+realmode_swtch:
+ .word 0, 0 // default_switch, SETUPSEG
+start_sys_seg:
+ .word 0x1000 // obsolete
+version_ptr:
+ .word 0 // version string ptr
+type_of_loader:
+ .byte 0 // Filled in by boot loader
+loadflags:
+ .byte 1 // Please load high
+setup_move_size:
+ .word 0 // Unused
+code32_start:
+ .long 0x100000 // 32-bit start address
+ramdisk_image:
+ .long 0 // Loaded ramdisk image address
+ramdisk_size:
+ .long 0 // Size of loaded ramdisk
+bootsect_kludge:
+ .word 0, 0
+heap_end_ptr:
+ .word 0
+pad1:
+ .word 0
+cmd_line_ptr:
+ .long 0 // Command line
+ramdisk_max:
+ .long 0xffffffff // Highest allowed ramdisk address
+
+gdt:
+ .long 0, 0, 0, 0 // Must be zero
+ .word 0xffff // 64 K segment size
+gdt_src1:
+ .byte 0, 0 ,0 // Low 24 bits of source addy
+ .byte 0x93 // Access rights
+ .byte 0 // Extended access rights
+gdt_src2:
+ .byte 0 // High 8 bits of source addy
+ .word 0xffff // 64 K segment size
+gdt_dst1:
+ .byte 0, 0, 0 // Low 24 bits of target addy
+ .byte 0x93 // Access rights
+ .byte 0 // Extended access rights
+gdt_dst2:
+ .byte 0 // High 8 bits of source addy
+ .long 0, 0, 0, 0 // More space for the BIOS
+
+reg_edx:
+ .byte 0x80,0,0xFF,0xFF
+
+data_leng:
+ .long 0
+
+linux_code:
+
+ movw %cs:(reg_edx - start), %dx
+
+linux_next:
+
+ call normalize
+
+normalize:
+ popw %bx
+ subw $(normalize - start), %bx
+ shrw $4, %bx
+ movw %cs, %ax
+ addw %bx, %ax
+ pushw %ax
+ pushw $(real_code - start)
+ lret // jump to real_code
+
+real_code:
+ subw $0x20, %ax
+ movw %ax, %ds
+ movw (setup_sects - data_start), %cx
+ shlw $7, %cx
+
+ // Setup stack
+
+ xorw %si, %si
+ movw %si, %ss
+ movw $(CODE_ADDR), %sp
+
+ pushl %esi
+ pushl %edi
+
+ // Move itself to 0:CODE_ADDR
+
+ cld
+ movw %cs, %ax
+ movw %ax, %ds
+ movw $(CODE_ADDR >> 4), %ax
+ movw %ax, %es
+ movw %si, %di
+
+ rep
+ movsl
+
+ ljmp $(CODE_ADDR >> 4), $(real_code_2 - start)
+
+real_code_2:
+
+ pushw %es
+ popw %ds
+
+ movl (ramdisk_image - start), %esi
+ or %esi, %esi
+ jnz 1f
+ movl (code32_start - start), %esi
+1:
+
+ movl $0x200, %ecx
+ addl %ecx, %esi
+ movl $DATA_ADDR, %edi
+
+ call move_memory
+
+ movsbl %dh, %eax
+ movl %eax, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_INSTALL_DOS_PART)
+
+ movsbl (reg_edx + 2 - start), %eax
+ movl %eax, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_INSTALL_BSD_PART)
+
+ movl %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_COMPRESSED_SIZE), %ecx
+ addl $(GRUB_KERNEL_MACHINE_RAW_SIZE - 0x200), %ecx
+
+ call move_memory
+
+ popl %edi
+ popl %esi
+
+ ljmp $(DATA_ADDR >> 4), $0
+
+// Parameters:
+// esi: source address
+// edi: target address
+// ecx: number of bytes
+move_memory:
+ incl %ecx
+ andb $0xFE, %cl
+ pushw %dx
+1:
+ pushl %esi
+ pushl %edi
+ pushl %ecx
+ cmpl $BLCK_LENG, %ecx
+ jbe 2f
+ movl $BLCK_LENG, %ecx
+2:
+ pushl %ecx
+
+ movl %esi, %eax
+ movw %si, (gdt_src1 - start)
+ shrl $16, %eax
+ movb %al, (gdt_src1 + 2 - start)
+ movb %ah, (gdt_src2 - start)
+
+ movl %edi, %eax
+ movw %di, (gdt_dst1 - start)
+ shrl $16, %eax
+ movb %al, (gdt_dst1 + 2 - start)
+ movb %ah, (gdt_dst2 - start)
+
+ movw $(gdt - start), %si
+ movb $0x87, %ah
+ shrw $1, %cx
+
+ int $0x15
+
+ popl %eax
+ popl %ecx
+ popl %edi
+ popl %esi
+
+ jnc 2f
+ movw $(err_int15_msg - start), %si
+ jmp fail
+
+2:
+
+ leal (%esi, %eax), %esi
+ leal (%edi, %eax), %edi
+ subl %eax, %ecx
+ jnz 1b
+
+
+ popw %dx
+ ret
+
+// Parameters:
+// si: message
+fail:
+ movb $0x0e, %ah
+ xorw %bx, %bx
+1:
+ lodsb (%si), %al
+ int $0x10
+ cmpb $0, %al
+ jne 1b
+1: jmp 1b
+
+err_int15_msg:
+ .ascii "move memory fails\0"
+
+ . = (. & (~0x1FF)) + 0x1FF
+
+ .byte 0
+
+code_end:
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Convert grub2 kernel core.img to linux kernel format
2007-12-12 16:20 ` Bean
@ 2007-12-13 2:06 ` Bean
2007-12-15 10:43 ` Robert Millan
0 siblings, 1 reply; 7+ messages in thread
From: Bean @ 2007-12-13 2:06 UTC (permalink / raw)
To: The development of GRUB 2
On second thoughts,the original patch is better, because lnxboot.img
works with core.img, which depends on boot.img, kernel.img and
grub-mkimage that exist only in i386-pc.
--
Bean
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Convert grub2 kernel core.img to linux kernel format
2007-12-13 2:06 ` Bean
@ 2007-12-15 10:43 ` Robert Millan
0 siblings, 0 replies; 7+ messages in thread
From: Robert Millan @ 2007-12-15 10:43 UTC (permalink / raw)
To: The development of GRUB 2
On Thu, Dec 13, 2007 at 10:06:31AM +0800, Bean wrote:
> On second thoughts,the original patch is better, because lnxboot.img
> works with core.img, which depends on boot.img, kernel.img and
> grub-mkimage that exist only in i386-pc.
Ok, just checked that in.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call, if you are unable to speak?
(as seen on /.)
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2007-12-16 6:10 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-01 14:16 Convert grub2 kernel core.img to linux kernel format Bean
2007-12-06 11:56 ` Robert Millan
2007-12-06 16:13 ` Bean
2007-12-12 15:34 ` Robert Millan
2007-12-12 16:20 ` Bean
2007-12-13 2:06 ` Bean
2007-12-15 10:43 ` Robert Millan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.