Merge multiboot into mbvid-spec

This commit is contained in:
Vladimir 'phcoder' Serbinenko committed 2010-01-02 13:32:13 +01:00
commit b711494093
16 files changed
+402 -446

No files matched your search

+14 -9
View File
@@ -1,3 +1,6 @@
gendocs.sh
lib
m4
.deps
Makefile
autom4te.cache
@@ -7,9 +10,17 @@ config.log
config.status
stamp-h
stamp-h1
docs/Makefile
docs/*.info*
docs/.deps
doc/Makefile
doc/*.info*
doc/.deps
doc/gendocs_template
doc/mdate-sh
doc/Makefile.in
doc/boot.S.texi
doc/kernel
doc/kernel.c.texi
doc/multiboot.h.texi
doc/texinfo.tex
Makefile.in
aclocal.m4
config.h.in
@@ -17,9 +28,3 @@ configure
depcomp
install-sh
missing
docs/Makefile.in
docs/boot.S.texi
docs/kernel
docs/kernel.c.texi
docs/multiboot.h.texi
docs/texinfo.tex
-2
View File
@@ -1,2 +0,0 @@
NEWS and README are empty
INSTALL is out-of-sync
+91
View File
@@ -1,3 +1,94 @@
2010-01-01 Robert Millan <rmh.grub@aybabtu.com>
* autogen.sh: Use `gnulib-tool' to install gendocs.sh.
* Makefile.am (web-manual): New target. Builds a web manual using
gendocs.sh.
* configure.ac (AC_PREREQ): Require Autoconf 2.59 or later.
2010-01-01 Robert Millan <rmh.grub@aybabtu.com>
Use more standard `doc' directory.
* docs: Rename to ...
* doc: ... this. Update all users.
* doc/multiboot.texi: Fix an obsolete reference to `docs' directory
in GRUB distribution.
2010-01-01 Robert Millan <rmh.grub@aybabtu.com>
Make ia32 libc unnecessary on amd64.
* configure.ac (CFLAGS): Move down after the basic gcc tests are
done. Add `-nostdlib'.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* configure.ac: Bump version to 0.6.96.
* docs/multiboot.texi: Include `version.texi' instead of hardcoding
version number.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* docs/Makefile.am (EXTRA_DIST): Remove `menu.lst'.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* autogen.sh: Workaround Automake requirement for NEWS and README.
We really should have them, but in practice we never had. This
ought not be considered a regression.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* BUGS: Remove.
* INSTALL: Remove.
* NEWS: Remove.
* README: Remove.
* autogen.sh: Adjust automake flags to add generic files such
as `INSTALL', `depcomp', `install-sh' and `missing'.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* docs/multiboot.texi: Bump version number to 0.6.96.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* docs/multiboot.texi: Misc editorial changes:
Avoid using `commercial' as a synonym for `non-free'
(see http://www.gnu.org/philosophy/words-to-avoid.html#Commercial).
Make a clear distinction between kernels and Operating Systems
(Linux is a kernel, FreeBSD and NetBSD are Operating Systems, Mach
is a microkernel, VSTa is something in-between).
Use 64-bit types to describe 64-bit datum (instead of splitting in
two 32-bit fields). Little endianess assumption applies (as per
Terminology section).
Update status of GNU GRUB relative to version 2.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* docs/multiboot.h: Replace with include/multiboot.h from GRUB 2 Bazaar
trunk.
* docs/kernel.c (cmain): Update name references for new multiboot.h
header.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* docs/multiboot.h (MULTIBOOT_HEADER_FLAGS): Moved from here ...
* docs/boot.S (MULTIBOOT_HEADER_FLAGS): ... to here.
2009-12-24 Robert Millan <rmh.grub@aybabtu.com>
* docs/boot.S (ASM): Rename to ...
(ASM_FILE): ... this.
* docs/multiboot.h: Check for `ASM_FILE' instead of `ASM'.
* docs/multiboot.h (EXT_C, STACK_SIZE): Moved from here ...
* docs/boot.S (EXT_C, STACK_SIZE): ... to here.
2009-12-13 Vladimir Serbinenko <phcoder@gmail.com>
* docs/fdl.texi: Remove. It's not used.
-266
View File
@@ -1,266 +0,0 @@
-*- Text -*-
This is the GRUB. Welcome.
This file contains instructions for compiling and installing the GRUB.
The Requirements
================
GRUB depends on some software packages installed into your system. If
you don't have any of them, please obtain and install them before
configuring the GRUB.
* GCC
Probably every recent GCC should work, but we recommend GCC 2.95 and
later, since you can create smaller binary images. See the web page
<http://gcc.gnu.org/>.
* GNU Make
For now, the Makefiles produced by Automake depends on GNU Make. See
the web page <http://www.gnu.org/software/make/make.html>.
* GNU binutils 2.9.1.0.23 or later
Binutils has changed the behavior of 16bit assembler between 2.9.1
and 2.9.1.0.x, and we support only 2.9.1.0.x and higher. In
particular, we recommend using binutils 2.10, since it is the only
public release that supports real 16bit mode. Please take a look at
the web page <http://sourceware.cygnus.com/binutils/>, for more
information. Note that you don't have to install it into any system
directory. See the section "Operation Controls", if you want to
install binutils into your own directory.
If you'd like to develop GRUB, these below are also required. Don't
forget to specify the option `--enable-maintainer-mode' when running the
configure script.
* Texinfo 4.0 or later
We use some new macros in the documents, so you need a recent
Texinfo release. See the web page
<http://www.gnu.org/software/texinfo/texinfo.html>.
* Developers: GNU Autoconf 2.5x and GNU Automake 1.7 or later
You should not need Automake just to compile GRUB, but you will need
it if you edit any of the build files (Makefile.am, configure.in,
etc). We use the new "per-executable flags" feature found in the
latest release of automake. See the web page
<http://www.gnu.org/software/automake/automake.html>.
Configuring the GRUB
====================
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a
file `config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try to
figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
The file `configure.in' is used to create `configure' by a program
called `autoconf'. You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
Building the GRUB
=================
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and
type `./configure' to configure the package for your system. If
you're using `csh' on an old version of System V, you might need
to type `sh ./configure' instead to prevent `csh' from trying to
execute `configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. `cd' to the directory where you want the object files
and executables to go and run the `configure' script. `configure'
automatically checks for the source code in the directory that
`configure' is in and in `..'.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix by giving `configure' the option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If
you give `configure' the option `--exec-prefix=PATH', the package will
use PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for
particular kinds of files. Run `configure --help' for a list of the
directories you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure'
the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Please note, however, that the GRUB knows where it is located in the
filesystem. If you have installed it in an unusual location, the
system might not work properly, or at all. The chief utility of these
options for the GRUB is to allow you to "install" in some alternate
location, and then copy these to the actual root filesystem later.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made.
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--enable-maintainer-mode'
Enable make rules and dependencies not useful (and sometimes
confusing) to the casual installer. If you are a GRUB developer,
it is a good idea to specify this option.
`--disable-ext2fs'
Omit the ext2fs support in Stage 2.
`--disable-fat'
Omit the FAT support in Stage 2.
`--disable-ffs'
Omit the FFS support in Stage 2.
`--disable-minix'
Omit the Minix fs support in Stage 2.
`--disable-reiserfs'
Omit the ReiserFS support in Stage 2.
`--disable-vstafs'
Omit the VSTa filesystem support in Stage 2.
`--disable-jfs'
Omit the JFS support in Stage 2.
`--disable-xfs'
Omit the XFS support in Stage 2.
`--disable-ufs2'
Omit the UFS2 support in Stage 2.
`--disable-iso9660'
Omit the ISO9660 support in Stage 2.
`--disable-gunzip'
Omit the decompression support in Stage 2.
`--disable-md5-password'
Omit the MD5 password support in Stage2.
`--with-binutils=PATH'
Search the path PATH to find binutils. If you have installed your
binutils executables into an unusual location where GCC doesn't
search by default, use this option.
`--without-curses'
Don't use the curses library.
`--disable-hercules'
Omit the hercules console support in Stage 2.
`--disable-serial'
Omit the serial terminal support in Stage 2.
`--enable-serial-speed-simulation'
Simulate the slowness of a serial device in the grub shell. This
option is useful for GRUB developers, as you can test the
performance of a terminal emulation even on pseudo terminals.
`--enable-preset-menu=FILE'
Preset a menu file FILE in Stage 2. This is useful, if you cannot
put a configuration file on a filesystem for some reason (e.g. when
you need to set the default terminal to a serial terminal in an
embedded system).
`--enable-example-kernel'
Build the example Multiboot kernel in the directory "docs". You
will be able to boot the image "kernel" with GRUB.
`--disable-auto-linux-mem-opt'
Don't pass the "mem=" option automatically, when booting Linux.
You can also disable the feature at run time.
`configure' also accepts several options for the network support. See
the file `netboot/README.netboot', for more information.
+9 -1
View File
@@ -1,3 +1,11 @@
# Do not change this order if you don't know what you are doing.
AUTOMAKE_OPTIONS = 1.7 gnu
SUBDIRS = docs
SUBDIRS = doc
.PHONY: web-manual
web-manual:
@cd '$(srcdir)/doc' ; \
$(SHELL) ../gendocs.sh -o '$(abs_builddir)/doc/manual' \
--email $(PACKAGE_BUGREPORT) $(PACKAGE) \
"$(PACKAGE_NAME) - $(manual_title)"
@echo " *** Upload the doc/manual directory to web-cvs."
View File
Whitespace-only changes.
View File
Whitespace-only changes.
+6 -1
View File
@@ -2,9 +2,14 @@
set -ex
gnulib-tool --import gendocs
aclocal
autoheader
automake --add-missing
# Automake is unhappy without NEWS and README, but we don't have any
touch NEWS README
automake -a -c -f
autoconf
exit 0
+6 -7
View File
@@ -1,5 +1,5 @@
dnl Configure script for GRUB.
dnl Copyright 1999,2000,2001,2002,2003,2004,2005,2008,2009 Free Software Foundation, Inc.
dnl Copyright 1999,2000,2001,2002,2003,2004,2005,2008,2009,2010 Free Software Foundation, Inc.
dnl Permission to use, copy, modify and distribute this software and its
dnl documentation is hereby granted, provided that both the copyright
@@ -12,14 +12,12 @@ dnl "AS IS" CONDITION. THE FREE SOFTWARE FOUNDATION DISCLAIMS ANY
dnl LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE
dnl USE OF THIS SOFTWARE.
AC_PREREQ(2.57)
AC_INIT([Multiboot], [0.6.95], [bug-grub@gnu.org])
AC_CONFIG_SRCDIR([docs/multiboot.texi])
AC_PREREQ(2.59)
AC_INIT([Multiboot], [0.6.96], [bug-grub@gnu.org])
AC_CONFIG_SRCDIR([doc/multiboot.texi])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE
CFLAGS="-m32 $CFLAGS"
#
# Programs
#
@@ -44,7 +42,8 @@ dnl Because recent automake complains about CCASFLAGS, set it here.
CCASFLAGS='$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)'
AC_SUBST(CCASFLAGS)
CFLAGS="-m32 -nostdlib $CFLAGS"
dnl Output.
AC_CONFIG_FILES([Makefile docs/Makefile])
AC_CONFIG_FILES([Makefile doc/Makefile])
AC_OUTPUT
+1 -1
View File
@@ -16,7 +16,7 @@ kernel_LDFLAGS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,100000 -Wl,--build-id=none
boot.o: multiboot.h
endif
EXTRA_DIST = menu.lst $(man_MANS) $(noinst_SCRIPTS) \
EXTRA_DIST = $(man_MANS) $(noinst_SCRIPTS) \
$(EXAMPLES) $(multiboot_TEXINFOS)
CLEANFILES = $(noinst_PROGRAMS)
+18 -1
View File
@@ -15,9 +15,26 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define ASM 1
#define ASM_FILE 1
#include <multiboot.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 MULTIBOOT_HEADER_FLAGS 0x00000003
#else
# define MULTIBOOT_HEADER_FLAGS 0x00010003
#endif
.text
.globl start, _start
+20 -20
View File
@@ -86,18 +86,18 @@ cmain (unsigned long magic, unsigned long addr)
/* Are mods_* valid? */
if (CHECK_FLAG (mbi->flags, 3))
{
module_t *mod;
multiboot_module_t *mod;
int i;
printf ("mods_count = %d, mods_addr = 0x%x\n",
(int) mbi->mods_count, (int) mbi->mods_addr);
for (i = 0, mod = (module_t *) mbi->mods_addr;
for (i = 0, mod = (multiboot_module_t *) mbi->mods_addr;
i < mbi->mods_count;
i++, mod++)
printf (" mod_start = 0x%x, mod_end = 0x%x, string = %s\n",
printf (" mod_start = 0x%x, mod_end = 0x%x, cmdline = %s\n",
(unsigned) mod->mod_start,
(unsigned) mod->mod_end,
(char *) mod->string);
(char *) mod->cmdline);
}
/* Bits 4 and 5 are mutually exclusive! */
@@ -110,44 +110,44 @@ cmain (unsigned long magic, unsigned long addr)
/* Is the symbol table of a.out valid? */
if (CHECK_FLAG (mbi->flags, 4))
{
aout_symbol_table_t *aout_sym = &(mbi->u.aout_sym);
multiboot_aout_symbol_table_t *multiboot_aout_sym = &(mbi->u.aout_sym);
printf ("aout_symbol_table: tabsize = 0x%0x, "
printf ("multiboot_aout_symbol_table: tabsize = 0x%0x, "
"strsize = 0x%x, addr = 0x%x\n",
(unsigned) aout_sym->tabsize,
(unsigned) aout_sym->strsize,
(unsigned) aout_sym->addr);
(unsigned) multiboot_aout_sym->tabsize,
(unsigned) multiboot_aout_sym->strsize,
(unsigned) multiboot_aout_sym->addr);
}
/* Is the section header table of ELF valid? */
if (CHECK_FLAG (mbi->flags, 5))
{
elf_section_header_table_t *elf_sec = &(mbi->u.elf_sec);
multiboot_elf_section_header_table_t *multiboot_elf_sec = &(mbi->u.elf_sec);
printf ("elf_sec: num = %u, size = 0x%x,"
printf ("multiboot_elf_sec: num = %u, size = 0x%x,"
" addr = 0x%x, shndx = 0x%x\n",
(unsigned) elf_sec->num, (unsigned) elf_sec->size,
(unsigned) elf_sec->addr, (unsigned) elf_sec->shndx);
(unsigned) multiboot_elf_sec->num, (unsigned) multiboot_elf_sec->size,
(unsigned) multiboot_elf_sec->addr, (unsigned) multiboot_elf_sec->shndx);
}
/* Are mmap_* valid? */
if (CHECK_FLAG (mbi->flags, 6))
{
memory_map_t *mmap;
multiboot_memory_map_t *mmap;
printf ("mmap_addr = 0x%x, mmap_length = 0x%x\n",
(unsigned) mbi->mmap_addr, (unsigned) mbi->mmap_length);
for (mmap = (memory_map_t *) mbi->mmap_addr;
for (mmap = (multiboot_memory_map_t *) mbi->mmap_addr;
(unsigned long) mmap < mbi->mmap_addr + mbi->mmap_length;
mmap = (memory_map_t *) ((unsigned long) mmap
mmap = (multiboot_memory_map_t *) ((unsigned long) mmap
+ mmap->size + sizeof (mmap->size)))
printf (" size = 0x%x, base_addr = 0x%x%x,"
" length = 0x%x%x, type = 0x%x\n",
(unsigned) mmap->size,
(unsigned) mmap->base_addr_high,
(unsigned) mmap->base_addr_low,
(unsigned) mmap->length_high,
(unsigned) mmap->length_low,
mmap->addr >> 32,
mmap->addr & 0xffffffff,
mmap->len >> 32,
mmap->len & 0xffffffff,
(unsigned) mmap->type);
}
}
+223
View File
@@ -0,0 +1,223 @@
/* multiboot.h - Multiboot header file. */
/* Copyright (C) 1999,2003,2007,2008,2009 Free Software Foundation, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY
* DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef MULTIBOOT_HEADER
#define MULTIBOOT_HEADER 1
/* How many bytes from the start of the file we search for the header. */
#define MULTIBOOT_SEARCH 8192
/* The magic field should contain this. */
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002
/* This should be in %eax. */
#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
/* The bits in the required part of flags field we don't support. */
#define MULTIBOOT_UNSUPPORTED 0x0000fffc
/* Alignment of multiboot modules. */
#define MULTIBOOT_MOD_ALIGN 0x00001000
/* Alignment of the multiboot info structure. */
#define MULTIBOOT_INFO_ALIGN 0x00000004
/* Flags set in the 'flags' member of the multiboot header. */
/* Align all boot modules on i386 page (4KB) boundaries. */
#define MULTIBOOT_PAGE_ALIGN 0x00000001
/* Must pass memory information to OS. */
#define MULTIBOOT_MEMORY_INFO 0x00000002
/* Must pass video information to OS. */
#define MULTIBOOT_VIDEO_MODE 0x00000004
/* This flag indicates the use of the address fields in the header. */
#define MULTIBOOT_AOUT_KLUDGE 0x00010000
/* Flags to be set in the 'flags' member of the multiboot info structure. */
/* is there basic lower/upper memory information? */
#define MULTIBOOT_INFO_MEMORY 0x00000001
/* is there a boot device set? */
#define MULTIBOOT_INFO_BOOTDEV 0x00000002
/* is the command-line defined? */
#define MULTIBOOT_INFO_CMDLINE 0x00000004
/* are there modules to do something with? */
#define MULTIBOOT_INFO_MODS 0x00000008
/* These next two are mutually exclusive */
/* is there a symbol table loaded? */
#define MULTIBOOT_INFO_AOUT_SYMS 0x00000010
/* is there an ELF section header table? */
#define MULTIBOOT_INFO_ELF_SHDR 0X00000020
/* is there a full memory map? */
#define MULTIBOOT_INFO_MEM_MAP 0x00000040
/* Is there drive info? */
#define MULTIBOOT_INFO_DRIVE_INFO 0x00000080
/* Is there a config table? */
#define MULTIBOOT_INFO_CONFIG_TABLE 0x00000100
/* Is there a boot loader name? */
#define MULTIBOOT_INFO_BOOT_LOADER_NAME 0x00000200
/* Is there a APM table? */
#define MULTIBOOT_INFO_APM_TABLE 0x00000400
/* Is there video information? */
#define MULTIBOOT_INFO_VIDEO_INFO 0x00000800
#ifndef ASM_FILE
typedef unsigned short multiboot_uint16_t;
typedef unsigned int multiboot_uint32_t;
typedef unsigned long long multiboot_uint64_t;
struct multiboot_header
{
/* Must be MULTIBOOT_MAGIC - see above. */
multiboot_uint32_t magic;
/* Feature flags. */
multiboot_uint32_t flags;
/* The above fields plus this one must equal 0 mod 2^32. */
multiboot_uint32_t checksum;
/* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */
multiboot_uint32_t header_addr;
multiboot_uint32_t load_addr;
multiboot_uint32_t load_end_addr;
multiboot_uint32_t bss_end_addr;
multiboot_uint32_t entry_addr;
/* These are only valid if MULTIBOOT_VIDEO_MODE is set. */
multiboot_uint32_t mode_type;
multiboot_uint32_t width;
multiboot_uint32_t height;
multiboot_uint32_t depth;
};
/* The symbol table for a.out. */
struct multiboot_aout_symbol_table
{
multiboot_uint32_t tabsize;
multiboot_uint32_t strsize;
multiboot_uint32_t addr;
multiboot_uint32_t reserved;
};
typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t;
/* The section header table for ELF. */
struct multiboot_elf_section_header_table
{
multiboot_uint32_t num;
multiboot_uint32_t size;
multiboot_uint32_t addr;
multiboot_uint32_t shndx;
};
typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t;
struct multiboot_info
{
/* Multiboot info version number */
multiboot_uint32_t flags;
/* Available memory from BIOS */
multiboot_uint32_t mem_lower;
multiboot_uint32_t mem_upper;
/* "root" partition */
multiboot_uint32_t boot_device;
/* Kernel command line */
multiboot_uint32_t cmdline;
/* Boot-Module list */
multiboot_uint32_t mods_count;
multiboot_uint32_t mods_addr;
union
{
multiboot_aout_symbol_table_t aout_sym;
multiboot_elf_section_header_table_t elf_sec;
} u;
/* Memory Mapping buffer */
multiboot_uint32_t mmap_length;
multiboot_uint32_t mmap_addr;
/* Drive Info buffer */
multiboot_uint32_t drives_length;
multiboot_uint32_t drives_addr;
/* ROM configuration table */
multiboot_uint32_t config_table;
/* Boot Loader Name */
multiboot_uint32_t boot_loader_name;
/* APM table */
multiboot_uint32_t apm_table;
/* Video */
multiboot_uint32_t vbe_control_info;
multiboot_uint32_t vbe_mode_info;
multiboot_uint16_t vbe_mode;
multiboot_uint16_t vbe_interface_seg;
multiboot_uint16_t vbe_interface_off;
multiboot_uint16_t vbe_interface_len;
};
typedef struct multiboot_info multiboot_info_t;
struct multiboot_mmap_entry
{
multiboot_uint32_t size;
multiboot_uint64_t addr;
multiboot_uint64_t len;
#define MULTIBOOT_MEMORY_AVAILABLE 1
#define MULTIBOOT_MEMORY_RESERVED 2
multiboot_uint32_t type;
} __attribute__((packed));
typedef struct multiboot_mmap_entry multiboot_memory_map_t;
struct multiboot_mod_list
{
/* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */
multiboot_uint32_t mod_start;
multiboot_uint32_t mod_end;
/* Module command line */
multiboot_uint32_t cmdline;
/* padding to take it to 16 bytes (must be zero) */
multiboot_uint32_t pad;
};
typedef struct multiboot_mod_list multiboot_module_t;
#endif /* ! ASM_FILE */
#endif /* ! MULTIBOOT_HEADER */
+14 -19
View File
@@ -1,7 +1,7 @@
\input texinfo @c -*-texinfo-*-
@c %**start of header
@setfilename multiboot.info
@set VERSION 0.6.95
@include version.texi
@settitle Multiboot Specification version @value{VERSION}
@c Unify all our little indices for now.
@syncodeindex fn cp
@@ -20,7 +20,7 @@ Copyright @copyright{} 1995,96 Bryan Ford <baford@@cs.utah.edu>
Copyright @copyright{} 1995,96 Erich Stefan Boleyn <erich@@uruk.org>
Copyright @copyright{} 1999,2000,2001,2002,2005,2006 Free Software Foundation, Inc.
Copyright @copyright{} 1999,2000,2001,2002,2005,2006,2009 Free Software Foundation, Inc.
@quotation
Permission is granted to make and distribute verbatim copies of
@@ -112,7 +112,7 @@ choice of boot loaders for a particular operating system --- if the one
that comes with the operating system doesn't do exactly what you want,
or doesn't work on your machine, you're screwed.
While we may not be able to fix this problem in existing commercial
While we may not be able to fix this problem in existing proprietary
operating systems, it shouldn't be too difficult for a few people in the
free operating system communities to put their heads together and solve
this problem for the popular free operating systems. That's what this
@@ -141,10 +141,10 @@ This specification is targeted toward free 32-bit operating systems
that can be fairly easily modified to support the specification without
going through lots of bureaucratic rigmarole. The particular free
operating systems that this specification is being primarily designed
for are Linux, FreeBSD, NetBSD, Mach, and VSTa. It is hoped that other
for are Linux, the kernels of FreeBSD and NetBSD, Mach, and VSTa. It is hoped that other
emerging free operating systems will adopt it from the start, and thus
immediately be able to take advantage of existing boot loaders. It would
be nice if commercial operating system vendors eventually adopted this
be nice if proprietary operating system vendors eventually adopted this
specification as well, but that's probably a pipe dream.
@@ -221,7 +221,7 @@ Multiboot-compliant.
@node Boot modules
@section Boot modules
Many modern operating system kernels, such as those of VSTa and Mach, do
Many modern operating system kernels, such as Mach and the microkernel in VSTa, do
not by themselves contain enough mechanism to get the system fully
operational: they require the presence of additional software modules at
boot time in order to access devices, mount file systems, etc. While
@@ -801,22 +801,17 @@ buffer consists of one or more of the following size/structure pairs
+-------------------+
-4 | size |
+-------------------+
0 | base_addr_low |
4 | base_addr_high |
8 | length_low |
12 | length_high |
0 | base_addr |
8 | length |
16 | type |
+-------------------+
@end group
@end example
where @samp{size} is the size of the associated structure in bytes, which
can be greater than the minimum of 20 bytes. @samp{base_addr_low} is the
lower 32 bits of the starting address, and @samp{base_addr_high} is the
upper 32 bits, for a total of a 64-bit starting address. @samp{length_low}
is the lower 32 bits of the size of the memory region in bytes, and
@samp{length_high} is the upper 32 bits, for a total of a 64-bit
length. @samp{type} is the variety of address range represented, where a
can be greater than the minimum of 20 bytes. @samp{base_addr} is the
starting address. @samp{length} is the size of the memory region in bytes.
@samp{type} is the variety of address range represented, where a
value of 1 indicates available @sc{ram}, and all other values currently
indicated a reserved area.
@@ -1129,7 +1124,7 @@ included. The kernel just prints out the Multiboot information structure
on the screen, so you can make use of the kernel to test a
Multiboot-compliant boot loader and for reference to how to implement a
Multiboot kernel. The source files can be found under the directory
@file{docs} in the GRUB distribution.
@file{doc} in the Multiboot source distribution.
The kernel @file{kernel} consists of only three files: @file{boot.S},
@file{kernel.c} and @file{multiboot.h}. The assembly source
@@ -1199,8 +1194,8 @@ library supporting the specification.
@section Example boot loader code
The GNU GRUB (@pxref{Top, , GRUB, grub.info, The GRUB manual}) project
is a full Multiboot-compliant boot loader, supporting all required and
optional features present in this specification. A public release has
is a Multiboot-compliant boot loader, supporting all required and
many optional features present in this specification. A public release has
not been made, but the test release is available from:
@url{ftp://alpha.gnu.org/gnu/grub}
View File
File renamed without changes.
-119
View File
@@ -1,119 +0,0 @@
/* multiboot.h - the header for Multiboot */
/* 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. */
/* Macros. */
/* The magic number for the Multiboot header. */
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002
/* The flags for the Multiboot header. */
#ifdef __ELF__
# define MULTIBOOT_HEADER_FLAGS 0x00000003
#else
# define MULTIBOOT_HEADER_FLAGS 0x00010003
#endif
/* The magic number passed by a Multiboot-compliant boot loader. */
#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
/* The size of our stack (16KB). */
#define STACK_SIZE 0x4000
/* 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
#ifndef ASM
/* Do not include here in boot.S. */
/* Types. */
/* The Multiboot header. */
typedef struct multiboot_header
{
unsigned long magic;
unsigned long flags;
unsigned long checksum;
unsigned long header_addr;
unsigned long load_addr;
unsigned long load_end_addr;
unsigned long bss_end_addr;
unsigned long entry_addr;
} multiboot_header_t;
/* The symbol table for a.out. */
typedef struct aout_symbol_table
{
unsigned long tabsize;
unsigned long strsize;
unsigned long addr;
unsigned long reserved;
} aout_symbol_table_t;
/* The section header table for ELF. */
typedef struct elf_section_header_table
{
unsigned long num;
unsigned long size;
unsigned long addr;
unsigned long shndx;
} elf_section_header_table_t;
/* The Multiboot information. */
typedef struct multiboot_info
{
unsigned long flags;
unsigned long mem_lower;
unsigned long mem_upper;
unsigned long boot_device;
unsigned long cmdline;
unsigned long mods_count;
unsigned long mods_addr;
union
{
aout_symbol_table_t aout_sym;
elf_section_header_table_t elf_sec;
} u;
unsigned long mmap_length;
unsigned long mmap_addr;
} multiboot_info_t;
/* The module structure. */
typedef struct module
{
unsigned long mod_start;
unsigned long mod_end;
unsigned long string;
unsigned long reserved;
} module_t;
/* The memory map. Be careful that the offset 0 is base_addr_low
but no size. */
typedef struct memory_map
{
unsigned long size;
unsigned long base_addr_low;
unsigned long base_addr_high;
unsigned long length_low;
unsigned long length_high;
unsigned long type;
} memory_map_t;
#endif /* ! ASM */