grub의 docs안에 있는 boot.S 어떻게 컴파일하죠?

grub을 다운받으면 docs라는 디렉토리안에 multiboot.h boot.S kernel.c라
는 파일이 있는 데요.
이거 한 번 컴파일 해볼려고 했더니 잘 안되는 군요.
kernel.c는 컴파일되는 데 제가 gas의 사용법을 몰라서 boot.S는 컴파일
을 못하겠군요.....
boot.S의 원본은....
/* boot.S - bootstrap the kernel */
/* Copyright (C) 1999, 2001 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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define ASM 1
#include
.text
.globl start, _start
start
_start
jmp multiboot_entry
/* Align 32 bits boundary. */
.align 4
/* Multiboot header. */
multiboot_header
/* magic */
.long MULTIBOOT_HEADER_MAGIC
/* flags */
.long MULTIBOOT_HEADER_FLAGS
/* checksum */
.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
#ifndef __ELF__
/* header_addr */
.long multiboot_header
/* load_addr */
.long _start
/* load_end_addr */
.long _edata
/* bss_end_addr */
.long _end
/* entry_addr */
.long multiboot_entry
#endif /* ! __ELF__ */
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
Re: grub의 docs안에 있는 boot.S 어떻게 컴파일하죠?
그냥 gcc로 컴파일하니까 잘되는 군요 -.-;;
죄송합니다... 꾸벅..
댓글 달기