OSDev.org

The Place to Start for Operating System Developers
It is currently Thu Mar 28, 2024 11:53 am

All times are UTC - 6 hours




Post new topic Reply to topic  [ 31 posts ]  Go to page Previous  1, 2, 3
Author Message
 Post subject: Re: linux versus multiboot in GRUB2
PostPosted: Mon Sep 27, 2021 9:59 am 
Offline

Joined: Mon Jul 05, 2021 7:05 am
Posts: 8
I tried many times,and find the solution, just change 'multiboot_header' to:
Code:
multiboot_header:
      /*  magic */
      .long   MULTIBOOT2_HEADER_MAGIC
      /*  ISA: i386 */
      .long   GRUB_MULTIBOOT_ARCHITECTURE_I386
      /*  Header length. */
      .long   multiboot_header_end - multiboot_header
      /*  checksum */
      .long   -(MULTIBOOT2_HEADER_MAGIC + GRUB_MULTIBOOT_ARCHITECTURE_I386 + (multiboot_header_end - multiboot_header))
      .long   0
      .long   8


here is all of my boot.S

Code:
/*  boot.S - bootstrap the kernel */
/*  Copyright (C) 1999, 2001, 2010  Free Software Foundation, Inc.
*
* This program 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.
*
* This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#define ASM_FILE        1
#include "multiboot2.h"

/*  C symbol format. HAVE_ASM_USCORE is defined by configure. */
#ifdef HAVE_ASM_USCORE
# define EXT_C(sym)                     _ ## sym
#else
# define EXT_C(sym)                     sym
#endif

/*  The size of our stack (16KB). */
#define STACK_SIZE                      0x4000

/*  The flags for the Multiboot header. */
#ifdef __ELF__
# define AOUT_KLUDGE 0
#else
# define AOUT_KLUDGE MULTIBOOT_AOUT_KLUDGE
#endif
      
      .text

      .globl  start, _start
start:
_start:
      jmp     multiboot_entry

      /*  Align 64 bits boundary. */
      .align  8
      
      /*  Multiboot header. */
multiboot_header:
      /*  magic */
      .long   MULTIBOOT2_HEADER_MAGIC
      /*  ISA: i386 */
      .long   GRUB_MULTIBOOT_ARCHITECTURE_I386
      /*  Header length. */
      .long   multiboot_header_end - multiboot_header
      /*  checksum */
      .long   -(MULTIBOOT2_HEADER_MAGIC + GRUB_MULTIBOOT_ARCHITECTURE_I386 + (multiboot_header_end - multiboot_header))
      .long   0
      .long   8
#ifndef __ELF__
address_tag_start:     
      .short MULTIBOOT_HEADER_TAG_ADDRESS
      .short MULTIBOOT_HEADER_TAG_OPTIONAL
      .long address_tag_end - address_tag_start
      /*  header_addr */
      .long   multiboot_header
      /*  load_addr */
      .long   _start
      /*  load_end_addr */
      .long   _edata
      /*  bss_end_addr */
      .long   _end
address_tag_end:
entry_address_tag_start:       
      .short MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS
      .short MULTIBOOT_HEADER_TAG_OPTIONAL
      .long entry_address_tag_end - entry_address_tag_start
      /*  entry_addr */
      .long multiboot_entry
entry_address_tag_end:
#endif /*  __ELF__ */
framebuffer_tag_start: 
      .short MULTIBOOT_HEADER_TAG_FRAMEBUFFER
      .short MULTIBOOT_HEADER_TAG_OPTIONAL
      .long framebuffer_tag_end - framebuffer_tag_start
      .long 1024
      .long 768
      .long 32
framebuffer_tag_end:
      .short MULTIBOOT_HEADER_TAG_END
      .short 0
      .long 8
multiboot_header_end:
multiboot_entry:
      /*  Initialize the stack pointer. */
      movl    $(stack + STACK_SIZE), %esp

      /*  Reset EFLAGS. */
      pushl   $0
      popf

      /*  Push the pointer to the Multiboot information structure. */
      pushl   %ebx
      /*  Push the magic value. */
      pushl   %eax

      /*  Now enter the C main function... */
      call    EXT_C(cmain)

      /*  Halt. */
      pushl   $halt_message
      call    EXT_C(printf)
      
loop:   hlt
      jmp     loop

halt_message:
      .asciz  "Halted."

      /*  Our stack area. */
      .comm   stack, STACK_SIZE



Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 31 posts ]  Go to page Previous  1, 2, 3

All times are UTC - 6 hours


Who is online

Users browsing this forum: Bing [Bot], Google [Bot], Octocontrabass and 94 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group