2008-01-21 Robert Millan <rmh@aybabtu.com>
* conf/i386-pc.rmk (GRUB_MEMORY_MACHINE_LINK_ADDR): New variable. (kernel_img_LDFLAGS): Use `GRUB_MEMORY_MACHINE_LINK_ADDR' as link address. (grub_mkimage_CFLAGS): Propagate `GRUB_MEMORY_MACHINE_LINK_ADDR' as a C macro. * include/grub/i386/pc/memory.h (GRUB_MEMORY_MACHINE_UPPER): New macro. Indicates start of upper memory. * util/i386/pc/grub-mkimage.c: Include `<grub/machine/memory.h>'. (generate_image): Abort when image size is big enough to corrupt upper memory. * include/grub/i386/pc/vga.h: Include `<grub/machine/memory.h>'. (GRUB_MEMORY_MACHINE_VGA_ADDR): Alias for `GRUB_MEMORY_MACHINE_UPPER'. * term/i386/pc/vga.c (VGA_MEM): Use `GRUB_MEMORY_MACHINE_VGA_ADDR' instead of hardcoding 0xA0000. * video/i386/pc/vbe.c: Include `<grub/machine/vga.h>'. (grub_vbe_set_video_mode): Use `GRUB_MEMORY_MACHINE_VGA_ADDR' instead of hardcoding 0xA0000.
This commit is contained in:
parent
f970b55e43
commit
261bd4bc56
8 changed files with 48 additions and 8 deletions
21
ChangeLog
21
ChangeLog
|
@ -1,3 +1,24 @@
|
|||
2008-01-21 Robert Millan <rmh@aybabtu.com>
|
||||
|
||||
* conf/i386-pc.rmk (GRUB_MEMORY_MACHINE_LINK_ADDR): New variable.
|
||||
(kernel_img_LDFLAGS): Use `GRUB_MEMORY_MACHINE_LINK_ADDR' as link
|
||||
address.
|
||||
(grub_mkimage_CFLAGS): Propagate `GRUB_MEMORY_MACHINE_LINK_ADDR' as
|
||||
a C macro.
|
||||
* include/grub/i386/pc/memory.h (GRUB_MEMORY_MACHINE_UPPER): New macro.
|
||||
Indicates start of upper memory.
|
||||
* util/i386/pc/grub-mkimage.c: Include `<grub/machine/memory.h>'.
|
||||
(generate_image): Abort when image size is big enough to corrupt
|
||||
upper memory.
|
||||
|
||||
* include/grub/i386/pc/vga.h: Include `<grub/machine/memory.h>'.
|
||||
(GRUB_MEMORY_MACHINE_VGA_ADDR): Alias for `GRUB_MEMORY_MACHINE_UPPER'.
|
||||
* term/i386/pc/vga.c (VGA_MEM): Use `GRUB_MEMORY_MACHINE_VGA_ADDR'
|
||||
instead of hardcoding 0xA0000.
|
||||
* video/i386/pc/vbe.c: Include `<grub/machine/vga.h>'.
|
||||
(grub_vbe_set_video_mode): Use `GRUB_MEMORY_MACHINE_VGA_ADDR'
|
||||
instead of hardcoding 0xA0000.
|
||||
|
||||
2008-01-21 Robert Millan <rmh@aybabtu.com>
|
||||
|
||||
* disk/memdisk.c (memdisk_size): New variable.
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# -*- makefile -*-
|
||||
|
||||
GRUB_MEMORY_MACHINE_LINK_ADDR = 0x8200
|
||||
|
||||
COMMON_ASFLAGS = -nostdinc -fno-builtin -m32
|
||||
COMMON_CFLAGS = -fno-builtin -mrtd -mregparm=3 -m32
|
||||
COMMON_LDFLAGS = -m32 -nostdlib
|
||||
|
@ -183,7 +185,7 @@ kernel_img_HEADERS = arg.h boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
|
|||
machine/memory.h machine/loader.h machine/vga.h machine/vbe.h machine/kernel.h
|
||||
kernel_img_CFLAGS = $(COMMON_CFLAGS)
|
||||
kernel_img_ASFLAGS = $(COMMON_ASFLAGS)
|
||||
kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,8200 $(COMMON_CFLAGS)
|
||||
kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,$(GRUB_MEMORY_MACHINE_LINK_ADDR) $(COMMON_CFLAGS)
|
||||
|
||||
MOSTLYCLEANFILES += symlist.c kernel_syms.lst
|
||||
DEFSYMFILES += kernel_syms.lst
|
||||
|
@ -222,6 +224,7 @@ grub_mkimage-util_resolve.o: util/resolve.c $(util/resolve.c_DEPENDENCIES)
|
|||
$(CC) -Iutil -I$(srcdir)/util $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(grub_mkimage_CFLAGS) -MD -c -o $@ $<
|
||||
-include grub_mkimage-util_resolve.d
|
||||
|
||||
grub_mkimage_CFLAGS = -DGRUB_MEMORY_MACHINE_LINK_ADDR=$(GRUB_MEMORY_MACHINE_LINK_ADDR)
|
||||
grub_mkimage_LDFLAGS = $(LIBLZO)
|
||||
|
||||
# For grub-setup.
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# -*- makefile -*-
|
||||
|
||||
GRUB_MEMORY_MACHINE_LINK_ADDR = 0x8200
|
||||
|
||||
COMMON_ASFLAGS = -nostdinc -fno-builtin -m32
|
||||
COMMON_CFLAGS = -fno-builtin -mrtd -mregparm=3 -m32
|
||||
COMMON_LDFLAGS = -m32 -nostdlib
|
||||
|
@ -42,7 +44,7 @@ kernel_img_HEADERS = arg.h boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
|
|||
machine/memory.h machine/loader.h machine/vga.h machine/vbe.h machine/kernel.h
|
||||
kernel_img_CFLAGS = $(COMMON_CFLAGS)
|
||||
kernel_img_ASFLAGS = $(COMMON_ASFLAGS)
|
||||
kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,8200 $(COMMON_CFLAGS)
|
||||
kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -Wl,-N,-Ttext,$(GRUB_MEMORY_MACHINE_LINK_ADDR) $(COMMON_CFLAGS)
|
||||
|
||||
MOSTLYCLEANFILES += symlist.c kernel_syms.lst
|
||||
DEFSYMFILES += kernel_syms.lst
|
||||
|
@ -63,6 +65,7 @@ endif
|
|||
# For grub-mkimage.
|
||||
grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \
|
||||
util/resolve.c
|
||||
grub_mkimage_CFLAGS = -DGRUB_MEMORY_MACHINE_LINK_ADDR=$(GRUB_MEMORY_MACHINE_LINK_ADDR)
|
||||
grub_mkimage_LDFLAGS = $(LIBLZO)
|
||||
|
||||
# For grub-setup.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* memory.h - describe the memory map */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2007,2008 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
|
||||
|
@ -36,6 +36,9 @@
|
|||
/* The size of the protect mode stack. */
|
||||
#define GRUB_MEMORY_MACHINE_PROT_STACK_SIZE 0x8000
|
||||
|
||||
/* The upper memory area (starting at 640 kiB). */
|
||||
#define GRUB_MEMORY_MACHINE_UPPER 0xa0000
|
||||
|
||||
/* The protected mode stack. */
|
||||
#define GRUB_MEMORY_MACHINE_PROT_STACK \
|
||||
(GRUB_MEMORY_MACHINE_SCRATCH_ADDR + GRUB_MEMORY_MACHINE_SCRATCH_SIZE \
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2003,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2003,2007,2008 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
|
||||
|
@ -20,6 +20,10 @@
|
|||
#define GRUB_VGA_MACHINE_HEADER 1
|
||||
|
||||
#include <grub/symbol.h>
|
||||
#include <grub/machine/memory.h>
|
||||
|
||||
/* The VGA (at the beginning of upper memory). */
|
||||
#define GRUB_MEMORY_MACHINE_VGA_ADDR GRUB_MEMORY_MACHINE_UPPER
|
||||
|
||||
/* Set the video mode to MODE and return the previous mode. */
|
||||
unsigned char EXPORT_FUNC(grub_vga_set_mode) (unsigned char mode);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2000,2001,2002,2003,2004,2005,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008 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
|
||||
|
@ -35,7 +35,7 @@
|
|||
#define CHAR_HEIGHT 16
|
||||
#define TEXT_WIDTH (VGA_WIDTH / CHAR_WIDTH)
|
||||
#define TEXT_HEIGHT (VGA_HEIGHT / CHAR_HEIGHT)
|
||||
#define VGA_MEM ((unsigned char *) 0xA0000)
|
||||
#define VGA_MEM ((grub_uint8_t *) GRUB_MEMORY_MACHINE_VGA_ADDR)
|
||||
#define PAGE_OFFSET(x) ((x) * (VGA_WIDTH * VGA_HEIGHT / 8))
|
||||
|
||||
#define DEFAULT_FG_COLOR 0xa
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* grub-mkimage.c - make a bootable image */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002,2003,2004,2005,2006,2007,2008 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
|
||||
|
@ -21,6 +21,7 @@
|
|||
#include <grub/types.h>
|
||||
#include <grub/machine/boot.h>
|
||||
#include <grub/machine/kernel.h>
|
||||
#include <grub/machine/memory.h>
|
||||
#include <grub/kernel.h>
|
||||
#include <grub/disk.h>
|
||||
#include <grub/util/misc.h>
|
||||
|
@ -180,6 +181,10 @@ generate_image (const char *dir, char *prefix, FILE *out, char *mods[], char *me
|
|||
= grub_cpu_to_le32 (memdisk_size);
|
||||
*((grub_uint32_t *) (core_img + GRUB_KERNEL_MACHINE_COMPRESSED_SIZE))
|
||||
= grub_cpu_to_le32 (core_size - GRUB_KERNEL_MACHINE_RAW_SIZE);
|
||||
|
||||
if (core_size > GRUB_MEMORY_MACHINE_UPPER - GRUB_MEMORY_MACHINE_LINK_ADDR)
|
||||
grub_util_error ("Core image is too big (%p > %p)\n", core_size,
|
||||
GRUB_MEMORY_MACHINE_UPPER - GRUB_MEMORY_MACHINE_LINK_ADDR);
|
||||
|
||||
grub_util_write_image (core_img, core_size, out);
|
||||
free (kernel_img);
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include <grub/err.h>
|
||||
#include <grub/machine/memory.h>
|
||||
#include <grub/machine/vga.h>
|
||||
#include <grub/machine/vbe.h>
|
||||
#include <grub/machine/vbeblit.h>
|
||||
#include <grub/machine/vbefill.h>
|
||||
|
@ -193,7 +194,7 @@ grub_vbe_set_video_mode (grub_uint32_t mode,
|
|||
if (mode < 0x100)
|
||||
{
|
||||
/* If this is not a VESA mode, guess address. */
|
||||
framebuffer.ptr = (grub_uint8_t *) 0xA0000;
|
||||
framebuffer.ptr = (grub_uint8_t *) GRUB_MEMORY_MACHINE_VGA_ADDR;
|
||||
framebuffer.index_color_mode = 1;
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue