* [PATCH] import multiboot1 specification in grub trunk
@ 2009-08-19 11:54 Vladimir 'phcoder' Serbinenko
2009-08-19 15:34 ` Robert Millan
0 siblings, 1 reply; 14+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-19 11:54 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 389 bytes --]
This is a dirty import of multiboot specification from grub1. It
doesn't compile it unless explicitly requested since we don't have
appropriate autoconf tests yet. The main goal is to leave no current
documentation in grub1 trunk. Everything in this patch is copy-pasted
from grub1
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
[-- Attachment #2: multiboot.diff --]
[-- Type: text/plain, Size: 63191 bytes --]
diff --git a/ChangeLog b/ChangeLog
index b76fe38..24271a4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2009-08-19 Vladimir Serbinenko <phcoder@gmail.com>
+
+ Import multiboot specification
+
+ * docs/kernel.c: New file.
+ * docs/multiboot.h: Likewise.
+ * docs/multiboot.texi: Likewise.
+ * docs/src2texi: Likewise.
+ * conf/common.rmk (SRC2TEXI): New variable.
+ (MULTIBOOT_TEXI): Likewise.
+ (%.c.texi): New target.
+ (%.h.texi): Likewise.
+ (%.S.texi): Likewise.
+ (multiboot.dvi): Likewise.
+ (multiboot.html): Likewise.
+ (multiboot.info): Likewise.
+ (multiboot.info.bz2): Likewise.
+
2009-08-17 Michal Suchanek <hramrach@centrum.cz>
VBE cleanup.
diff --git a/conf/common.rmk b/conf/common.rmk
index b0d3785..314e6b4 100644
--- a/conf/common.rmk
+++ b/conf/common.rmk
@@ -1,5 +1,32 @@
# -*- makefile -*-
+SRC2TEXI=src2texi
+MULTIBOOT_TEXI=docs/multiboot.texi docs/multiboot.h.texi docs/kernel.c.texi docs/boot.S.texi
+
+%.c.texi: %.c $(srcdir)/docs/$(SRC2TEXI)
+ $(SHELL) $(srcdir)/docs/$(SRC2TEXI) $(srcdir)/docs $< $@
+
+%.h.texi: %.h $(srcdir)/docs/$(SRC2TEXI)
+ $(SHELL) $(srcdir)/docs/$(SRC2TEXI) $(srcdir)/docs $< $@
+
+%.S.texi: %.S $(srcdir)/docs/$(SRC2TEXI)
+ $(SHELL) $(srcdir)/docs/$(SRC2TEXI) $(srcdir)/docs $< $@
+
+multiboot.dvi: $(MULTIBOOT_TEXI)
+ texi2dvi -o $@ $<
+
+multiboot.pdf: $(MULTIBOOT_TEXI)
+ texi2pdf -o $@ $<
+
+multiboot.html: $(MULTIBOOT_TEXI)
+ texi2html -o $@ $<
+
+multiboot.info: $(MULTIBOOT_TEXI)
+ makeinfo -o $@ $<
+
+multiboot.info.bz2: multiboot.info
+ bzip2 < $< > $@
+
# For grub-mkelfimage.
bin_UTILITIES += grub-mkelfimage
grub_mkelfimage_SOURCES = util/elf/grub-mkimage.c util/misc.c \
diff --git a/docs/boot.S b/docs/boot.S
new file mode 100644
index 0000000..4db6a00
--- /dev/null
+++ b/docs/boot.S
@@ -0,0 +1,79 @@
+/* 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 <multiboot.h>
+
+ .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
diff --git a/docs/kernel.c b/docs/kernel.c
new file mode 100644
index 0000000..af0def9
--- /dev/null
+++ b/docs/kernel.c
@@ -0,0 +1,284 @@
+/* kernel.c - the C part of the kernel */
+/* Copyright (C) 1999 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. */
+
+#include <multiboot.h>
+
+/* Macros. */
+
+/* Check if the bit BIT in FLAGS is set. */
+#define CHECK_FLAG(flags,bit) ((flags) & (1 << (bit)))
+
+/* Some screen stuff. */
+/* The number of columns. */
+#define COLUMNS 80
+/* The number of lines. */
+#define LINES 24
+/* The attribute of an character. */
+#define ATTRIBUTE 7
+/* The video memory address. */
+#define VIDEO 0xB8000
+
+/* Variables. */
+/* Save the X position. */
+static int xpos;
+/* Save the Y position. */
+static int ypos;
+/* Point to the video memory. */
+static volatile unsigned char *video;
+
+/* Forward declarations. */
+void cmain (unsigned long magic, unsigned long addr);
+static void cls (void);
+static void itoa (char *buf, int base, int d);
+static void putchar (int c);
+void printf (const char *format, ...);
+
+/* Check if MAGIC is valid and print the Multiboot information structure
+ pointed by ADDR. */
+void
+cmain (unsigned long magic, unsigned long addr)
+{
+ multiboot_info_t *mbi;
+
+ /* Clear the screen. */
+ cls ();
+
+ /* Am I booted by a Multiboot-compliant boot loader? */
+ if (magic != MULTIBOOT_BOOTLOADER_MAGIC)
+ {
+ printf ("Invalid magic number: 0x%x\n", (unsigned) magic);
+ return;
+ }
+
+ /* Set MBI to the address of the Multiboot information structure. */
+ mbi = (multiboot_info_t *) addr;
+
+ /* Print out the flags. */
+ printf ("flags = 0x%x\n", (unsigned) mbi->flags);
+
+ /* Are mem_* valid? */
+ if (CHECK_FLAG (mbi->flags, 0))
+ printf ("mem_lower = %uKB, mem_upper = %uKB\n",
+ (unsigned) mbi->mem_lower, (unsigned) mbi->mem_upper);
+
+ /* Is boot_device valid? */
+ if (CHECK_FLAG (mbi->flags, 1))
+ printf ("boot_device = 0x%x\n", (unsigned) mbi->boot_device);
+
+ /* Is the command line passed? */
+ if (CHECK_FLAG (mbi->flags, 2))
+ printf ("cmdline = %s\n", (char *) mbi->cmdline);
+
+ /* Are mods_* valid? */
+ if (CHECK_FLAG (mbi->flags, 3))
+ {
+ 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;
+ i < mbi->mods_count;
+ i++, mod++)
+ printf (" mod_start = 0x%x, mod_end = 0x%x, string = %s\n",
+ (unsigned) mod->mod_start,
+ (unsigned) mod->mod_end,
+ (char *) mod->string);
+ }
+
+ /* Bits 4 and 5 are mutually exclusive! */
+ if (CHECK_FLAG (mbi->flags, 4) && CHECK_FLAG (mbi->flags, 5))
+ {
+ printf ("Both bits 4 and 5 are set.\n");
+ return;
+ }
+
+ /* Is the symbol table of a.out valid? */
+ if (CHECK_FLAG (mbi->flags, 4))
+ {
+ aout_symbol_table_t *aout_sym = &(mbi->u.aout_sym);
+
+ printf ("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);
+ }
+
+ /* 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);
+
+ printf ("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);
+ }
+
+ /* Are mmap_* valid? */
+ if (CHECK_FLAG (mbi->flags, 6))
+ {
+ 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;
+ (unsigned long) mmap < mbi->mmap_addr + mbi->mmap_length;
+ mmap = (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,
+ (unsigned) mmap->type);
+ }
+}
+
+/* Clear the screen and initialize VIDEO, XPOS and YPOS. */
+static void
+cls (void)
+{
+ int i;
+
+ video = (unsigned char *) VIDEO;
+
+ for (i = 0; i < COLUMNS * LINES * 2; i++)
+ *(video + i) = 0;
+
+ xpos = 0;
+ ypos = 0;
+}
+
+/* Convert the integer D to a string and save the string in BUF. If
+ BASE is equal to 'd', interpret that D is decimal, and if BASE is
+ equal to 'x', interpret that D is hexadecimal. */
+static void
+itoa (char *buf, int base, int d)
+{
+ char *p = buf;
+ char *p1, *p2;
+ unsigned long ud = d;
+ int divisor = 10;
+
+ /* If %d is specified and D is minus, put `-' in the head. */
+ if (base == 'd' && d < 0)
+ {
+ *p++ = '-';
+ buf++;
+ ud = -d;
+ }
+ else if (base == 'x')
+ divisor = 16;
+
+ /* Divide UD by DIVISOR until UD == 0. */
+ do
+ {
+ int remainder = ud % divisor;
+
+ *p++ = (remainder < 10) ? remainder + '0' : remainder + 'a' - 10;
+ }
+ while (ud /= divisor);
+
+ /* Terminate BUF. */
+ *p = 0;
+
+ /* Reverse BUF. */
+ p1 = buf;
+ p2 = p - 1;
+ while (p1 < p2)
+ {
+ char tmp = *p1;
+ *p1 = *p2;
+ *p2 = tmp;
+ p1++;
+ p2--;
+ }
+}
+
+/* Put the character C on the screen. */
+static void
+putchar (int c)
+{
+ if (c == '\n' || c == '\r')
+ {
+ newline:
+ xpos = 0;
+ ypos++;
+ if (ypos >= LINES)
+ ypos = 0;
+ return;
+ }
+
+ *(video + (xpos + ypos * COLUMNS) * 2) = c & 0xFF;
+ *(video + (xpos + ypos * COLUMNS) * 2 + 1) = ATTRIBUTE;
+
+ xpos++;
+ if (xpos >= COLUMNS)
+ goto newline;
+}
+
+/* Format a string and print it on the screen, just like the libc
+ function printf. */
+void
+printf (const char *format, ...)
+{
+ char **arg = (char **) &format;
+ int c;
+ char buf[20];
+
+ arg++;
+
+ while ((c = *format++) != 0)
+ {
+ if (c != '%')
+ putchar (c);
+ else
+ {
+ char *p;
+
+ c = *format++;
+ switch (c)
+ {
+ case 'd':
+ case 'u':
+ case 'x':
+ itoa (buf, c, *((int *) arg++));
+ p = buf;
+ goto string;
+ break;
+
+ case 's':
+ p = *arg++;
+ if (! p)
+ p = "(null)";
+
+ string:
+ while (*p)
+ putchar (*p++);
+ break;
+
+ default:
+ putchar (*((int *) arg++));
+ break;
+ }
+ }
+ }
+}
diff --git a/docs/multiboot.h b/docs/multiboot.h
new file mode 100644
index 0000000..df79225
--- /dev/null
+++ b/docs/multiboot.h
@@ -0,0 +1,119 @@
+/* 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 */
diff --git a/docs/multiboot.texi b/docs/multiboot.texi
new file mode 100644
index 0000000..c069fae
--- /dev/null
+++ b/docs/multiboot.texi
@@ -0,0 +1,1234 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename multiboot.info
+@set VERSION 0.6.95
+@settitle Multiboot Specification version @value{VERSION}
+@c Unify all our little indices for now.
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex ky cp
+@syncodeindex pg cp
+@syncodeindex tp cp
+@c %**end of header
+
+@footnotestyle separate
+@paragraphindent 3
+@finalout
+
+@copying
+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.
+
+@quotation
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries a copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+@end ignore
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified
+versions.
+@end quotation
+@end copying
+
+@dircategory Kernel
+@direntry
+* Multiboot Specification: (multiboot). Multiboot Specification.
+@end direntry
+
+@titlepage
+@sp 10
+@title The Multiboot Specification version @value{VERSION}
+@author Yoshinori K. Okuji, Bryan Ford, Erich Stefan Boleyn, Kunihiro Ishiguro
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@finalout
+@headings double
+
+@ifnottex
+@node Top
+@top Multiboot Specification
+
+This file documents Multiboot Specification, the proposal for the boot
+sequence standard. This edition documents version @value{VERSION}.
+
+@insertcopying
+@end ifnottex
+
+@menu
+* Overview::
+* Terminology::
+* Specification::
+* Examples::
+* History::
+* Index::
+@end menu
+
+
+@node Overview
+@chapter Introduction to Multiboot Specification
+
+This chapter describes some rough information on the Multiboot
+Specification. Note that this is not a part of the specification itself.
+
+@menu
+* Motivation::
+* Architecture::
+* Operating systems::
+* Boot sources::
+* Boot-time configuration::
+* Convenience to operating systems::
+* Boot modules::
+@end menu
+
+
+@node Motivation
+@section The background of Multiboot Specification
+
+Every operating system ever created tends to have its own boot loader.
+Installing a new operating system on a machine generally involves
+installing a whole new set of boot mechanisms, each with completely
+different install-time and boot-time user interfaces. Getting multiple
+operating systems to coexist reliably on one machine through typical
+@dfn{chaining} mechanisms can be a nightmare. There is little or no
+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
+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
+specification aims for. Basically, it specifies an interface between a
+boot loader and a operating system, such that any complying boot loader
+should be able to load any complying operating system. This
+specification does @emph{not} specify how boot loaders should work ---
+only how they must interface with the operating system being loaded.
+
+
+@node Architecture
+@section The target architecture
+
+This specification is primarily targeted at @sc{pc}, since they are the
+most common and have the largest variety of operating systems and boot
+loaders. However, to the extent that certain other architectures may
+need a boot specification and do not have one already, a variation of
+this specification, stripped of the x86-specific details, could be
+adopted for them as well.
+
+
+@node Operating systems
+@section The target operating systems
+
+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
+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
+specification as well, but that's probably a pipe dream.
+
+
+@node Boot sources
+@section Boot sources
+
+It should be possible to write compliant boot loaders that load the OS
+image from a variety of sources, including floppy disk, hard disk, and
+across a network.
+
+Disk-based boot loaders may use a variety of techniques to find the
+relevant OS image and boot module data on disk, such as by
+interpretation of specific file systems (e.g. the BSD/Mach boot loader),
+using precalculated @dfn{blocklists} (e.g. LILO), loading from a
+special @dfn{boot partition} (e.g. OS/2), or even loading from within
+another operating system (e.g. the VSTa boot code, which loads from
+DOS). Similarly, network-based boot loaders could use a variety of
+network hardware and protocols.
+
+It is hoped that boot loaders will be created that support multiple
+loading mechanisms, increasing their portability, robustness, and
+user-friendliness.
+
+
+@node Boot-time configuration
+@section Configure an operating system at boot-time
+
+It is often necessary for one reason or another for the user to be able
+to provide some configuration information to an operating system
+dynamically at boot time. While this specification should not dictate
+how this configuration information is obtained by the boot loader, it
+should provide a standard means for the boot loader to pass such
+information to the operating system.
+
+
+@node Convenience to operating systems
+@section How to make OS development easier
+
+OS images should be easy to generate. Ideally, an OS image should simply
+be an ordinary 32-bit executable file in whatever file format the
+operating system normally uses. It should be possible to @code{nm} or
+disassemble OS images just like normal executables. Specialized tools
+should not be required to create OS images in a @emph{special} file
+format. If this means shifting some work from the operating system to
+a boot loader, that is probably appropriate, because all the memory
+consumed by the boot loader will typically be made available again after
+the boot process is created, whereas every bit of code in the OS image
+typically has to remain in memory forever. The operating system should
+not have to worry about getting into 32-bit mode initially, because mode
+switching code generally needs to be in the boot loader anyway in order
+to load operating system data above the 1MB boundary, and forcing the
+operating system to do this makes creation of OS images much more
+difficult.
+
+Unfortunately, there is a horrendous variety of executable file formats
+even among free Unix-like @sc{pc}-based operating systems --- generally
+a different format for each operating system. Most of the relevant free
+operating systems use some variant of a.out format, but some are moving
+to @sc{elf}. It is highly desirable for boot loaders not to have to be
+able to interpret all the different types of executable file formats in
+existence in order to load the OS image --- otherwise the boot loader
+effectively becomes operating system specific again.
+
+This specification adopts a compromise solution to this
+problem. Multiboot-compliant OS images always contain a magic
+@dfn{Multiboot header} (@pxref{OS image format}), which allows the boot
+loader to load the image without having to understand numerous a.out
+variants or other executable formats. This magic header does not need to
+be at the very beginning of the executable file, so kernel images can
+still conform to the local a.out format variant in addition to being
+Multiboot-compliant.
+
+
+@node Boot modules
+@section Boot modules
+
+Many modern operating system kernels, such as those of VSTa and Mach, 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
+these additional modules could be embedded in the main OS image along
+with the kernel itself, and the resulting image be split apart manually
+by the operating system when it receives control, it is often more
+flexible, more space-efficient, and more convenient to the operating
+system and user if the boot loader can load these additional modules
+independently in the first place.
+
+Thus, this specification should provide a standard method for a boot
+loader to indicate to the operating system what auxiliary boot modules
+were loaded, and where they can be found. Boot loaders don't have to
+support multiple boot modules, but they are strongly encouraged to,
+because some operating systems will be unable to boot without them.
+
+
+@node Terminology
+@chapter The definitions of terms used through the specification
+
+@table @dfn
+@item must
+We use the term @dfn{must}, when any boot loader or OS image needs to
+follow a rule --- otherwise, the boot loader or OS image is @emph{not}
+Multiboot-compliant.
+
+@item should
+We use the term @dfn{should}, when any boot loader or OS image is
+recommended to follow a rule, but it doesn't need to follow the rule.
+
+@item may
+We use the term @dfn{may}, when any boot loader or OS image is allowed
+to follow a rule.
+
+@item boot loader
+Whatever program or set of programs loads the image of the final
+operating system to be run on the machine. The boot loader may itself
+consist of several stages, but that is an implementation detail not
+relevant to this specification. Only the @emph{final} stage of the boot
+loader --- the stage that eventually transfers control to an operating
+system --- must follow the rules specified in this document in order
+to be @dfn{Multiboot-compliant}; earlier boot loader stages may be
+designed in whatever way is most convenient.
+
+@item OS image
+The initial binary image that a boot loader loads into memory and
+transfers control to start an operating system. The OS image is
+typically an executable containing the operating system kernel.
+
+@item boot module
+Other auxiliary files that a boot loader loads into memory along with
+an OS image, but does not interpret in any way other than passing their
+locations to the operating system when it is invoked.
+
+@item Multiboot-compliant
+A boot loader or an OS image which follows the rules defined as
+@dfn{must} is Multiboot-compliant. When this specification specifies a
+rule as @dfn{should} or @dfn{may}, a Multiboot-complaint boot loader/OS
+image doesn't need to follow the rule.
+
+@item u8
+The type of unsigned 8-bit data.
+
+@item u16
+The type of unsigned 16-bit data. Because the target architecture is
+little-endian, u16 is coded in little-endian.
+
+@item u32
+The type of unsigned 32-bit data. Because the target architecture is
+little-endian, u32 is coded in little-endian.
+
+@item u64
+The type of unsigned 64-bit data. Because the target architecture is
+little-endian, u64 is coded in little-endian.
+@end table
+
+
+@node Specification
+@chapter The exact definitions of Multiboot Specification
+
+There are three main aspects of a boot loader/OS image interface:
+
+@enumerate
+@item
+The format of an OS image as seen by a boot loader.
+
+@item
+The state of a machine when a boot loader starts an operating
+system.
+
+@item
+The format of information passed by a boot loader to an operating
+system.
+@end enumerate
+
+@menu
+* OS image format::
+* Machine state::
+* Boot information format::
+@end menu
+
+
+@node OS image format
+@section OS image format
+
+An OS image may be an ordinary 32-bit executable file in the standard
+format for that particular operating system, except that it may be
+linked at a non-default load address to avoid loading on top of the
+@sc{pc}'s I/O region or other reserved areas, and of course it should
+not use shared libraries or other fancy features.
+
+An OS image must contain an additional header called @dfn{Multiboot
+header}, besides the headers of the format used by the OS image. The
+Multiboot header must be contained completely within the first 8192
+bytes of the OS image, and must be longword (32-bit) aligned. In
+general, it should come @emph{as early as possible}, and may be
+embedded in the beginning of the text segment after the @emph{real}
+executable header.
+
+@menu
+* Header layout:: The layout of Multiboot header
+* Header magic fields:: The magic fields of Multiboot header
+* Header address fields::
+* Header graphics fields::
+@end menu
+
+
+@node Header layout
+@subsection The layout of Multiboot header
+
+The layout of the Multiboot header must be as follows:
+
+@multitable @columnfractions .1 .1 .2 .5
+@item Offset @tab Type @tab Field Name @tab Note
+@item 0 @tab u32 @tab magic @tab required
+@item 4 @tab u32 @tab flags @tab required
+@item 8 @tab u32 @tab checksum @tab required
+@item 12 @tab u32 @tab header_addr @tab if flags[16] is set
+@item 16 @tab u32 @tab load_addr @tab if flags[16] is set
+@item 20 @tab u32 @tab load_end_addr @tab if flags[16] is set
+@item 24 @tab u32 @tab bss_end_addr @tab if flags[16] is set
+@item 28 @tab u32 @tab entry_addr @tab if flags[16] is set
+@item 32 @tab u32 @tab mode_type @tab if flags[2] is set
+@item 36 @tab u32 @tab width @tab if flags[2] is set
+@item 40 @tab u32 @tab height @tab if flags[2] is set
+@item 44 @tab u32 @tab depth @tab if flags[2] is set
+@end multitable
+
+The fields @samp{magic}, @samp{flags} and @samp{checksum} are defined in
+@ref{Header magic fields}, the fields @samp{header_addr},
+@samp{load_addr}, @samp{load_end_addr}, @samp{bss_end_addr} and
+@samp{entry_addr} are defined in @ref{Header address fields}, and the
+fields @samp{mode_type}, @samp{width}, @samp{height} and @samp{depth} are
+defined in @ref{Header graphics fields}.
+
+
+@node Header magic fields
+@subsection The magic fields of Multiboot header
+
+@table @samp
+@item magic
+The field @samp{magic} is the magic number identifying the header,
+which must be the hexadecimal value @code{0x1BADB002}.
+
+@item flags
+The field @samp{flags} specifies features that the OS image requests or
+requires of an boot loader. Bits 0-15 indicate requirements; if the
+boot loader sees any of these bits set but doesn't understand the flag
+or can't fulfill the requirements it indicates for some reason, it must
+notify the user and fail to load the OS image. Bits 16-31 indicate
+optional features; if any bits in this range are set but the boot loader
+doesn't understand them, it may simply ignore them and proceed as
+usual. Naturally, all as-yet-undefined bits in the @samp{flags} word
+must be set to zero in OS images. This way, the @samp{flags} fields
+serves for version control as well as simple feature selection.
+
+If bit 0 in the @samp{flags} word is set, then all boot modules loaded
+along with the operating system must be aligned on page (4KB)
+boundaries. Some operating systems expect to be able to map the pages
+containing boot modules directly into a paged address space during
+startup, and thus need the boot modules to be page-aligned.
+
+If bit 1 in the @samp{flags} word is set, then information on available
+memory via at least the @samp{mem_*} fields of the Multiboot information
+structure (@pxref{Boot information format}) must be included. If the
+boot loader is capable of passing a memory map (the @samp{mmap_*} fields)
+and one exists, then it may be included as well.
+
+If bit 2 in the @samp{flags} word is set, information about the video
+mode table (@pxref{Boot information format}) must be available to the
+kernel.
+
+If bit 16 in the @samp{flags} word is set, then the fields at offsets
+12-28 in the Multiboot header are valid, and the boot loader should use
+them instead of the fields in the actual executable header to calculate
+where to load the OS image. This information does not need to be
+provided if the kernel image is in @sc{elf} format, but it @emph{must}
+be provided if the images is in a.out format or in some other
+format. Compliant boot loaders must be able to load images that either
+are in @sc{elf} format or contain the load address information embedded
+in the Multiboot header; they may also directly support other executable
+formats, such as particular a.out variants, but are not required to.
+
+@item checksum
+The field @samp{checksum} is a 32-bit unsigned value which, when added
+to the other magic fields (i.e. @samp{magic} and @samp{flags}), must
+have a 32-bit unsigned sum of zero.
+@end table
+
+
+@node Header address fields
+@subsection The address fields of Multiboot header
+
+All of the address fields enabled by flag bit 16 are physical addresses.
+The meaning of each is as follows:
+
+@table @code
+@item header_addr
+Contains the address corresponding to the beginning of the Multiboot
+header --- the physical memory location at which the magic value is
+supposed to be loaded. This field serves to @dfn{synchronize} the
+mapping between OS image offsets and physical memory addresses.
+
+@item load_addr
+Contains the physical address of the beginning of the text segment. The
+offset in the OS image file at which to start loading is defined by the
+offset at which the header was found, minus (header_addr -
+load_addr). load_addr must be less than or equal to header_addr.
+
+@item load_end_addr
+Contains the physical address of the end of the data
+segment. (load_end_addr - load_addr) specifies how much data to load.
+This implies that the text and data segments must be consecutive in the
+OS image; this is true for existing a.out executable formats.
+If this field is zero, the boot loader assumes that the text and data
+segments occupy the whole OS image file.
+
+@item bss_end_addr
+Contains the physical address of the end of the bss segment. The boot
+loader initializes this area to zero, and reserves the memory it
+occupies to avoid placing boot modules and other data relevant to the
+operating system in that area. If this field is zero, the boot loader
+assumes that no bss segment is present.
+
+@item entry_addr
+The physical address to which the boot loader should jump in order to
+start running the operating system.
+@end table
+
+
+@node Header graphics fields
+@subsection The graphics fields of Multiboot header
+
+All of the graphics fields are enabled by flag bit 2. They specify the
+preferred graphics mode. Note that that is only a @emph{recommended}
+mode by the OS image. If the mode exists, the boot loader should set
+it, when the user doesn't specify a mode explicitly. Otherwise, the
+boot loader should fall back to a similar mode, if available.
+
+The meaning of each is as follows:
+
+@table @code
+@item mode_type
+Contains @samp{0} for linear graphics mode or @samp{1} for
+EGA-standard text mode. Everything else is reserved for future
+expansion. Note that the boot loader may set a text mode, even if this
+field contains @samp{0}.
+
+@item width
+Contains the number of the columns. This is specified in pixels in a
+graphics mode, and in characters in a text mode. The value zero
+indicates that the OS image has no preference.
+
+@item height
+Contains the number of the lines. This is specified in pixels in a
+graphics mode, and in characters in a text mode. The value zero
+indicates that the OS image has no preference.
+
+@item depth
+Contains the number of bits per pixel in a graphics mode, and zero in
+a text mode. The value zero indicates that the OS image has no
+preference.
+@end table
+
+
+@node Machine state
+@section Machine state
+
+When the boot loader invokes the 32-bit operating system, the machine
+must have the following state:
+
+@table @samp
+@item EAX
+Must contain the magic value @samp{0x2BADB002}; the presence of this
+value indicates to the operating system that it was loaded by a
+Multiboot-compliant boot loader (e.g. as opposed to another type of
+boot loader that the operating system can also be loaded from).
+
+@item EBX
+Must contain the 32-bit physical address of the Multiboot
+information structure provided by the boot loader (@pxref{Boot
+information format}).
+
+@item CS
+Must be a 32-bit read/execute code segment with an offset of @samp{0}
+and a limit of @samp{0xFFFFFFFF}. The exact value is undefined.
+
+@item DS
+@itemx ES
+@itemx FS
+@itemx GS
+@itemx SS
+Must be a 32-bit read/write data segment with an offset of @samp{0}
+and a limit of @samp{0xFFFFFFFF}. The exact values are all undefined.
+
+@item A20 gate
+Must be enabled.
+
+@item CR0
+Bit 31 (PG) must be cleared. Bit 0 (PE) must be set. Other bits are
+all undefined.
+
+@item EFLAGS
+Bit 17 (VM) must be cleared. Bit 9 (IF) must be cleared. Other bits
+are all undefined.
+@end table
+
+All other processor registers and flag bits are undefined. This
+includes, in particular:
+
+@table @samp
+@item ESP
+The OS image must create its own stack as soon as it needs one.
+
+@item GDTR
+Even though the segment registers are set up as described above, the
+@samp{GDTR} may be invalid, so the OS image must not load any segment
+registers (even just reloading the same values!) until it sets up its
+own @samp{GDT}.
+
+@item IDTR
+The OS image must leave interrupts disabled until it sets up its own
+@code{IDT}.
+@end table
+
+However, other machine state should be left by the boot loader in
+@dfn{normal working order}, i.e. as initialized by the @sc{bios} (or
+DOS, if that's what the boot loader runs from). In other words, the
+operating system should be able to make @sc{bios} calls and such after
+being loaded, as long as it does not overwrite the @sc{bios} data
+structures before doing so. Also, the boot loader must leave the
+@sc{pic} programmed with the normal @sc{bios}/DOS values, even if it
+changed them during the switch to 32-bit mode.
+
+
+@node Boot information format
+@section Boot information format
+
+FIXME: Split this chapter like the chapter ``OS image format''.
+
+Upon entry to the operating system, the @code{EBX} register contains the
+physical address of a @dfn{Multiboot information} data structure,
+through which the boot loader communicates vital information to the
+operating system. The operating system can use or ignore any parts of
+the structure as it chooses; all information passed by the boot loader
+is advisory only.
+
+The Multiboot information structure and its related substructures may be
+placed anywhere in memory by the boot loader (with the exception of the
+memory reserved for the kernel and boot modules, of course). It is the
+operating system's responsibility to avoid overwriting this memory until
+it is done using it.
+
+The format of the Multiboot information structure (as defined so far)
+follows:
+
+@example
+@group
+ +-------------------+
+0 | flags | (required)
+ +-------------------+
+4 | mem_lower | (present if flags[0] is set)
+8 | mem_upper | (present if flags[0] is set)
+ +-------------------+
+12 | boot_device | (present if flags[1] is set)
+ +-------------------+
+16 | cmdline | (present if flags[2] is set)
+ +-------------------+
+20 | mods_count | (present if flags[3] is set)
+24 | mods_addr | (present if flags[3] is set)
+ +-------------------+
+28 - 40 | syms | (present if flags[4] or
+ | | flags[5] is set)
+ +-------------------+
+44 | mmap_length | (present if flags[6] is set)
+48 | mmap_addr | (present if flags[6] is set)
+ +-------------------+
+52 | drives_length | (present if flags[7] is set)
+56 | drives_addr | (present if flags[7] is set)
+ +-------------------+
+60 | config_table | (present if flags[8] is set)
+ +-------------------+
+64 | boot_loader_name | (present if flags[9] is set)
+ +-------------------+
+68 | apm_table | (present if flags[10] is set)
+ +-------------------+
+72 | vbe_control_info | (present if flags[11] is set)
+76 | vbe_mode_info |
+80 | vbe_mode |
+82 | vbe_interface_seg |
+84 | vbe_interface_off |
+86 | vbe_interface_len |
+ +-------------------+
+@end group
+@end example
+
+The first longword indicates the presence and validity of other fields
+in the Multiboot information structure. All as-yet-undefined bits must
+be set to zero by the boot loader. Any set bits that the operating
+system does not understand should be ignored. Thus, the @samp{flags}
+field also functions as a version indicator, allowing the Multiboot
+information structure to be expanded in the future without breaking
+anything.
+
+If bit 0 in the @samp{flags} word is set, then the @samp{mem_*} fields
+are valid. @samp{mem_lower} and @samp{mem_upper} indicate the amount of
+lower and upper memory, respectively, in kilobytes. Lower memory starts
+at address 0, and upper memory starts at address 1 megabyte. The maximum
+possible value for lower memory is 640 kilobytes. The value returned for
+upper memory is maximally the address of the first upper memory hole
+minus 1 megabyte. It is not guaranteed to be this value.
+
+If bit 1 in the @samp{flags} word is set, then the @samp{boot_device}
+field is valid, and indicates which @sc{bios} disk device the boot
+loader loaded the OS image from. If the OS image was not loaded from a
+@sc{bios} disk, then this field must not be present (bit 3 must be
+clear). The operating system may use this field as a hint for
+determining its own @dfn{root} device, but is not required to. The
+@samp{boot_device} field is laid out in four one-byte subfields as
+follows:
+
+@example
+@group
++-------+-------+-------+-------+
+| part3 | part2 | part1 | drive |
++-------+-------+-------+-------+
+@end group
+@end example
+
+The first byte contains the @sc{bios} drive number as understood by the
+@sc{bios} INT 0x13 low-level disk interface: e.g. 0x00 for the first
+floppy disk or 0x80 for the first hard disk.
+
+The three remaining bytes specify the boot partition. @samp{part1}
+specifies the @dfn{top-level} partition number, @samp{part2} specifies a
+@dfn{sub-partition} in the top-level partition, etc. Partition numbers
+always start from zero. Unused partition bytes must be set to 0xFF. For
+example, if the disk is partitioned using a simple one-level DOS
+partitioning scheme, then @samp{part1} contains the DOS partition
+number, and @samp{part2} and @samp{part3} are both 0xFF. As another
+example, if a disk is partitioned first into DOS partitions, and then
+one of those DOS partitions is subdivided into several BSD partitions
+using BSD's @dfn{disklabel} strategy, then @samp{part1} contains the DOS
+partition number, @samp{part2} contains the BSD sub-partition within
+that DOS partition, and @samp{part3} is 0xFF.
+
+DOS extended partitions are indicated as partition numbers starting from
+4 and increasing, rather than as nested sub-partitions, even though the
+underlying disk layout of extended partitions is hierarchical in
+nature. For example, if the boot loader boots from the second extended
+partition on a disk partitioned in conventional DOS style, then
+@samp{part1} will be 5, and @samp{part2} and @samp{part3} will both be
+0xFF.
+
+If bit 2 of the @samp{flags} longword is set, the @samp{cmdline} field
+is valid, and contains the physical address of the command line to
+be passed to the kernel. The command line is a normal C-style
+zero-terminated string.
+
+If bit 3 of the @samp{flags} is set, then the @samp{mods} fields
+indicate to the kernel what boot modules were loaded along with the
+kernel image, and where they can be found. @samp{mods_count} contains
+the number of modules loaded; @samp{mods_addr} contains the physical
+address of the first module structure. @samp{mods_count} may be zero,
+indicating no boot modules were loaded, even if bit 1 of @samp{flags} is
+set. Each module structure is formatted as follows:
+
+@example
+@group
+ +-------------------+
+0 | mod_start |
+4 | mod_end |
+ +-------------------+
+8 | string |
+ +-------------------+
+12 | reserved (0) |
+ +-------------------+
+@end group
+@end example
+
+The first two fields contain the start and end addresses of the boot
+module itself. The @samp{string} field provides an arbitrary string to
+be associated with that particular boot module; it is a zero-terminated
+ASCII string, just like the kernel command line. The @samp{string} field
+may be 0 if there is no string associated with the module. Typically the
+string might be a command line (e.g. if the operating system treats boot
+modules as executable programs), or a pathname (e.g. if the operating
+system treats boot modules as files in a file system), but its exact use
+is specific to the operating system. The @samp{reserved} field must be
+set to 0 by the boot loader and ignored by the operating system.
+
+@strong{Caution:} Bits 4 & 5 are mutually exclusive.
+
+If bit 4 in the @samp{flags} word is set, then the following fields in
+the Multiboot information structure starting at byte 28 are valid:
+
+@example
+@group
+ +-------------------+
+28 | tabsize |
+32 | strsize |
+36 | addr |
+40 | reserved (0) |
+ +-------------------+
+@end group
+@end example
+
+These indicate where the symbol table from an a.out kernel image can be
+found. @samp{addr} is the physical address of the size (4-byte unsigned
+long) of an array of a.out format @dfn{nlist} structures, followed
+immediately by the array itself, then the size (4-byte unsigned long) of
+a set of zero-terminated @sc{ascii} strings (plus sizeof(unsigned long) in
+this case), and finally the set of strings itself. @samp{tabsize} is
+equal to its size parameter (found at the beginning of the symbol
+section), and @samp{strsize} is equal to its size parameter (found at
+the beginning of the string section) of the following string table to
+which the symbol table refers. Note that @samp{tabsize} may be 0,
+indicating no symbols, even if bit 4 in the @samp{flags} word is set.
+
+If bit 5 in the @samp{flags} word is set, then the following fields in
+the Multiboot information structure starting at byte 28 are valid:
+
+@example
+@group
+ +-------------------+
+28 | num |
+32 | size |
+36 | addr |
+40 | shndx |
+ +-------------------+
+@end group
+@end example
+
+These indicate where the section header table from an ELF kernel is, the
+size of each entry, number of entries, and the string table used as the
+index of names. They correspond to the @samp{shdr_*} entries
+(@samp{shdr_num}, etc.) in the Executable and Linkable Format (@sc{elf})
+specification in the program header. All sections are loaded, and the
+physical address fields of the @sc{elf} section header then refer to where
+the sections are in memory (refer to the i386 @sc{elf} documentation for
+details as to how to read the section header(s)). Note that
+@samp{shdr_num} may be 0, indicating no symbols, even if bit 5 in the
+@samp{flags} word is set.
+
+If bit 6 in the @samp{flags} word is set, then the @samp{mmap_*} fields
+are valid, and indicate the address and length of a buffer containing a
+memory map of the machine provided by the @sc{bios}. @samp{mmap_addr} is
+the address, and @samp{mmap_length} is the total size of the buffer. The
+buffer consists of one or more of the following size/structure pairs
+(@samp{size} is really used for skipping to the next pair):
+
+@example
+@group
+ +-------------------+
+-4 | size |
+ +-------------------+
+0 | base_addr_low |
+4 | base_addr_high |
+8 | length_low |
+12 | length_high |
+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
+value of 1 indicates available @sc{ram}, and all other values currently
+indicated a reserved area.
+
+The map provided is guaranteed to list all standard @sc{ram} that should
+be available for normal use.
+
+If bit 7 in the @samp{flags} is set, then the @samp{drives_*} fields
+are valid, and indicate the address of the physical address of the first
+drive structure and the size of drive structures. @samp{drives_addr}
+is the address, and @samp{drives_length} is the total size of drive
+structures. Note that @samp{drives_length} may be zero. Each drive
+structure is formatted as follows:
+
+@example
+@group
+ +-------------------+
+0 | size |
+ +-------------------+
+4 | drive_number |
+ +-------------------+
+5 | drive_mode |
+ +-------------------+
+6 | drive_cylinders |
+8 | drive_heads |
+9 | drive_sectors |
+ +-------------------+
+10 - xx | drive_ports |
+ +-------------------+
+@end group
+@end example
+
+The @samp{size} field specifies the size of this structure. The size
+varies, depending on the number of ports. Note that the size may not be
+equal to (10 + 2 * the number of ports), because of an alignment.
+
+The @samp{drive_number} field contains the BIOS drive number. The
+@samp{drive_mode} field represents the access mode used by the boot
+loader. Currently, the following modes are defined:
+
+@table @samp
+@item 0
+CHS mode (traditional cylinder/head/sector addressing mode).
+
+@item 1
+LBA mode (Logical Block Addressing mode).
+@end table
+
+The three fields, @samp{drive_cylinders}, @samp{drive_heads} and
+@samp{drive_sectors}, indicate the geometry of the drive detected by the
+@sc{bios}. @samp{drive_cylinders} contains the number of the
+cylinders. @samp{drive_heads} contains the number of the
+heads. @samp{drive_sectors} contains the number of the sectors per
+track.
+
+The @samp{drive_ports} field contains the array of the I/O ports used
+for the drive in the @sc{bios} code. The array consists of zero or more
+unsigned two-bytes integers, and is terminated with zero. Note that the
+array may contain any number of I/O ports that are not related to the
+drive actually (such as @sc{dma} controller's ports).
+
+If bit 8 in the @samp{flags} is set, then the @samp{config_table} field
+is valid, and indicates the address of the @sc{rom} configuration table
+returned by the @dfn{GET CONFIGURATION} @sc{bios} call. If the @sc{bios}
+call fails, then the size of the table must be @emph{zero}.
+
+If bit 9 in the @samp{flags} is set, the @samp{boot_loader_name} field
+is valid, and contains the physical address of the name of a boot
+loader booting the kernel. The name is a normal C-style zero-terminated
+string.
+
+If bit 10 in the @samp{flags} is set, the @samp{apm_table} field is
+valid, and contains the physical address of an @sc{apm} table defined as
+below:
+
+@example
+@group
+ +----------------------+
+0 | version |
+2 | cseg |
+4 | offset |
+8 | cseg_16 |
+10 | dseg |
+12 | flags |
+14 | cseg_len |
+16 | cseg_16_len |
+18 | dseg_len |
+ +----------------------+
+@end group
+@end example
+
+The fields @samp{version}, @samp{cseg}, @samp{offset}, @samp{cseg_16},
+@samp{dseg}, @samp{flags}, @samp{cseg_len}, @samp{cseg_16_len},
+@samp{dseg_len} indicate the version number, the protected mode 32-bit
+code segment, the offset of the entry point, the protected mode 16-bit
+code segment, the protected mode 16-bit data segment, the flags, the
+length of the protected mode 32-bit code segment, the length of the
+protected mode 16-bit code segment, and the length of the protected mode
+16-bit data segment, respectively. Only the field @samp{offset} is 4
+bytes, and the others are 2 bytes. See
+@uref{http://www.microsoft.com/hwdev/busbios/amp_12.htm, Advanced Power
+Management (APM) BIOS Interface Specification}, for more information.
+
+If bit 11 in the @samp{flags} is set, the graphics table is available.
+This must only be done if the kernel has indicated in the
+@samp{Multiboot Header} that it accepts a graphics mode.
+
+The fields @samp{vbe_control_info} and @samp{vbe_mode_info} contain
+the physical addresses of @sc{vbe} control information returned by the
+@sc{vbe} Function 00h and @sc{vbe} mode information returned by the
+@sc{vbe} Function 01h, respectively.
+
+The field @samp{vbe_mode} indicates current video mode in the format
+specified in @sc{vbe} 3.0.
+
+The rest fields @samp{vbe_interface_seg}, @samp{vbe_interface_off}, and
+@samp{vbe_interface_len} contain the table of a protected mode interface
+defined in @sc{vbe} 2.0+. If this information is not available, those
+fields contain zero. Note that @sc{vbe} 3.0 defines another protected
+mode interface which is incompatible with the old one. If you want to
+use the new protected mode interface, you will have to find the table
+yourself.
+
+The fields for the graphics table are designed for @sc{vbe}, but
+Multiboot boot loaders may simulate @sc{vbe} on non-@sc{vbe} modes, as
+if they were @sc{vbe} modes.
+
+
+@node Examples
+@chapter Examples
+
+@strong{Caution:} The following items are not part of the specification
+document, but are included for prospective operating system and boot
+loader writers.
+
+@menu
+* Notes on PC::
+* BIOS device mapping techniques::
+* Example OS code::
+* Example boot loader code::
+@end menu
+
+
+@node Notes on PC
+@section Notes on PC
+
+In reference to bit 0 of the @samp{flags} parameter in the Multiboot
+information structure, if the bootloader in question uses older
+@sc{bios} interfaces, or the newest ones are not available (see
+description about bit 6), then a maximum of either 15 or 63 megabytes of
+memory may be reported. It is @emph{highly} recommended that boot
+loaders perform a thorough memory probe.
+
+In reference to bit 1 of the @samp{flags} parameter in the Multiboot
+information structure, it is recognized that determination of which
+@sc{bios} drive maps to which device driver in an operating system is
+non-trivial, at best. Many kludges have been made to various operating
+systems instead of solving this problem, most of them breaking under
+many conditions. To encourage the use of general-purpose solutions to
+this problem, there are 2 @sc{bios} device mapping techniques
+(@pxref{BIOS device mapping techniques}).
+
+In reference to bit 6 of the @samp{flags} parameter in the Multiboot
+information structure, it is important to note that the data structure
+used there (starting with @samp{BaseAddrLow}) is the data returned by
+the INT 15h, AX=E820h --- Query System Address Map call. See @xref{Query
+System Address Map, , Query System Address Map, grub.info, The GRUB
+Manual}, for more information. The interface here is meant to allow a
+boot loader to work unmodified with any reasonable extensions of the
+@sc{bios} interface, passing along any extra data to be interpreted by
+the operating system as desired.
+
+
+@node BIOS device mapping techniques
+@section BIOS device mapping techniques
+
+Both of these techniques should be usable from any PC operating system,
+and neither require any special support in the drivers themselves. This
+section will be flushed out into detailed explanations, particularly for
+the I/O restriction technique.
+
+The general rule is that the data comparison technique is the quick and
+dirty solution. It works most of the time, but doesn't cover all the
+bases, and is relatively simple.
+
+The I/O restriction technique is much more complex, but it has potential
+to solve the problem under all conditions, plus allow access of the
+remaining @sc{bios} devices when not all of them have operating system
+drivers.
+
+@menu
+* Data comparison technique::
+* I/O restriction technique::
+@end menu
+
+
+@node Data comparison technique
+@subsection Data comparison technique
+
+Before activating @emph{any} of the device drivers, gather enough data
+from similar sectors on each of the disks such that each one can be
+uniquely identified.
+
+After activating the device drivers, compare data from the drives using
+the operating system drivers. This should hopefully be sufficient to
+provide such a mapping.
+
+Problems:
+
+@enumerate
+@item
+The data on some @sc{bios} devices might be identical (so the part
+reading the drives from the @sc{bios} should have some mechanism to give
+up).
+
+@item
+There might be extra drives not accessible from the @sc{bios} which are
+identical to some drive used by the @sc{bios} (so it should be capable
+of giving up there as well).
+@end enumerate
+
+
+@node I/O restriction technique
+@subsection I/O restriction technique
+
+This first step may be unnecessary, but first create copy-on-write
+mappings for the device drivers writing into @sc{pc} @sc{ram}. Keep the
+original copies for the @dfn{clean @sc{bios} virtual machine} to be
+created later.
+
+For each device driver brought online, determine which @sc{bios} devices
+become inaccessible by:
+
+@enumerate
+@item
+Create a @dfn{clean @sc{bios} virtual machine}.
+
+@item
+Set the I/O permission map for the I/O area claimed by the device driver
+to no permissions (neither read nor write).
+
+@item
+Access each device.
+
+@item
+Record which devices succeed, and those which try to access the
+@dfn{restricted} I/O areas (hopefully, this will be an @dfn{xor}
+situation).
+@end enumerate
+
+For each device driver, given how many of the @sc{bios} devices were
+subsumed by it (there should be no gaps in this list), it should be easy
+to determine which devices on the controller these are.
+
+In general, you have at most 2 disks from each controller given
+@sc{bios} numbers, but they pretty much always count from the lowest
+logically numbered devices on the controller.
+
+
+@node Example OS code
+@section Example OS code
+
+In this distribution, the example Multiboot kernel @file{kernel} is
+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.
+
+The kernel @file{kernel} consists of only three files: @file{boot.S},
+@file{kernel.c} and @file{multiboot.h}. The assembly source
+@file{boot.S} is written in GAS (@pxref{Top, , GNU assembler, as.info,
+The GNU assembler}), and contains the Multiboot information structure to
+comply with the specification. When a Multiboot-compliant boot loader
+loads and execute it, it initialize the stack pointer and @code{EFLAGS},
+and then call the function @code{cmain} defined in @file{kernel.c}. If
+@code{cmain} returns to the callee, then it shows a message to inform
+the user of the halt state and stops forever until you push the reset
+key. The file @file{kernel.c} contains the function @code{cmain},
+which checks if the magic number passed by the boot loader is valid and
+so on, and some functions to print messages on the screen. The file
+@file{multiboot.h} defines some macros, such as the magic number for the
+Multiboot header, the Multiboot header structure and the Multiboot
+information structure.
+
+@menu
+* multiboot.h::
+* boot.S::
+* kernel.c::
+* Other Multiboot kernels::
+@end menu
+
+
+@node multiboot.h
+@subsection multiboot.h
+
+This is the source code in the file @file{multiboot.h}:
+
+@example
+@include multiboot.h.texi
+@end example
+
+
+@node boot.S
+@subsection boot.S
+
+In the file @file{boot.S}:
+
+@example
+@include boot.S.texi
+@end example
+
+
+@node kernel.c
+@subsection kernel.c
+
+And, in the file @file{kernel.c}:
+
+@example
+@include kernel.c.texi
+@end example
+
+
+@node Other Multiboot kernels
+@subsection Other Multiboot kernels
+
+Other useful information should be available in Multiboot kernels, such
+as GNU Mach and Fiasco @url{http://os.inf.tu-dresden.de/fiasco/}. And,
+it is worth mentioning the OSKit
+@url{http://www.cs.utah.edu/projects/flux/oskit/}, which provides a
+library supporting the specification.
+
+
+@node Example boot loader code
+@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
+not been made, but the test release is available from:
+
+@url{ftp://alpha.gnu.org/gnu/grub}
+
+See the webpage @url{http://www.gnu.org/software/grub/grub.html}, for
+more information.
+
+
+@node History
+@chapter The change log of this specification
+
+@table @asis
+@item 0.7
+@itemize @bullet
+@item
+@dfn{Multiboot Standard} is renamed to @dfn{Multiboot Specification}.
+
+@item
+Graphics fields are added to Multiboot header.
+
+@item
+BIOS drive information, BIOS configuration table, the name of a boot
+loader, APM information, and graphics information are added to Multiboot
+information.
+
+@item
+Rewritten in Texinfo format.
+
+@item
+Rewritten, using more strict words.
+
+@item
+The maintainer changes to the GNU GRUB maintainer team
+@email{bug-grub@@gnu.org}, from Bryan Ford and Erich Stefan Boleyn.
+
+@item
+The byte order of the @samp{boot_device} in Multiboot information is
+reversed. This was a mistake.
+
+@item
+The offset of the address fields were wrong.
+
+@item
+The format is adapted to a newer Texinfo, and the version number is
+specified more explicitly in the title.
+@end itemize
+
+@item 0.6
+@itemize @bullet
+@item
+A few wording changes.
+
+@item
+Header checksum.
+
+@item
+Classification of machine state passed to an operating system.
+@end itemize
+
+@item 0.5
+@itemize @bullet
+@item
+Name change.
+@end itemize
+
+@item 0.4
+@itemize @bullet
+@item
+Major changes plus HTMLification.
+@end itemize
+@end table
+
+
+@node Index
+@unnumbered Index
+
+@printindex cp
+
+@contents
+@bye
diff --git a/docs/src2texi b/docs/src2texi
new file mode 100644
index 0000000..10786d9
--- /dev/null
+++ b/docs/src2texi
@@ -0,0 +1,16 @@
+#! /bin/sh
+#
+# Convert a source file to a TeXinfo file. Stolen from glibc.
+#
+# Usage: src2texi SRCDIR SRC TEXI
+
+dir=$1
+src=`basename $2`
+texi=`basename $3`
+
+sed -e 's,[{}],@&,g' \
+ -e 's,/\*\(@.*\)\*/,\1,g' \
+ -e 's,/\* *,/* @r{,g' -e 's, *\*/,} */,' \
+ -e 's/\(@[a-z][a-z]*\)@{\([^}]*\)@}/\1{\2}/g' \
+ ${dir}/${src} | expand > ${texi}.new
+mv -f ${texi}.new ${dir}/${texi}
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-19 11:54 [PATCH] import multiboot1 specification in grub trunk Vladimir 'phcoder' Serbinenko
@ 2009-08-19 15:34 ` Robert Millan
2009-08-19 15:38 ` Vladimir 'phcoder' Serbinenko
0 siblings, 1 reply; 14+ messages in thread
From: Robert Millan @ 2009-08-19 15:34 UTC (permalink / raw)
To: The development of GRUB 2
On Wed, Aug 19, 2009 at 01:54:46PM +0200, Vladimir 'phcoder' Serbinenko wrote:
> This is a dirty import of multiboot specification from grub1. It
> doesn't compile it unless explicitly requested since we don't have
> appropriate autoconf tests yet. The main goal is to leave no current
> documentation in grub1 trunk. Everything in this patch is copy-pasted
> from grub1
Actually, my plan was to move this to a separate module. I even sent a patch,
long ago.
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-19 15:34 ` Robert Millan
@ 2009-08-19 15:38 ` Vladimir 'phcoder' Serbinenko
2009-08-20 16:28 ` Robert Millan
0 siblings, 1 reply; 14+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-19 15:38 UTC (permalink / raw)
To: The development of GRUB 2
On Wed, Aug 19, 2009 at 5:34 PM, Robert Millan<rmh@aybabtu.com> wrote:
> On Wed, Aug 19, 2009 at 01:54:46PM +0200, Vladimir 'phcoder' Serbinenko wrote:
>> This is a dirty import of multiboot specification from grub1. It
>> doesn't compile it unless explicitly requested since we don't have
>> appropriate autoconf tests yet. The main goal is to leave no current
>> documentation in grub1 trunk. Everything in this patch is copy-pasted
>> from grub1
>
> Actually, my plan was to move this to a separate module. I even sent a patch,
> long ago.
It would be ok with me to do so.
>
> --
> Robert Millan
>
> The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
> how) you may access your data; but nobody's threatening your freedom: we
> still allow you to remove your data and not access it at all."
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-19 15:38 ` Vladimir 'phcoder' Serbinenko
@ 2009-08-20 16:28 ` Robert Millan
2009-08-20 20:56 ` Vladimir 'phcoder' Serbinenko
0 siblings, 1 reply; 14+ messages in thread
From: Robert Millan @ 2009-08-20 16:28 UTC (permalink / raw)
To: The development of GRUB 2
On Wed, Aug 19, 2009 at 05:38:58PM +0200, Vladimir 'phcoder' Serbinenko wrote:
> On Wed, Aug 19, 2009 at 5:34 PM, Robert Millan<rmh@aybabtu.com> wrote:
> > On Wed, Aug 19, 2009 at 01:54:46PM +0200, Vladimir 'phcoder' Serbinenko wrote:
> >> This is a dirty import of multiboot specification from grub1. It
> >> doesn't compile it unless explicitly requested since we don't have
> >> appropriate autoconf tests yet. The main goal is to leave no current
> >> documentation in grub1 trunk. Everything in this patch is copy-pasted
> >> from grub1
> >
> > Actually, my plan was to move this to a separate module. I even sent a patch,
> > long ago.
> It would be ok with me to do so.
Yes. Would you like to review my patch?
See the discussion here:
http://lists.gnu.org/archive/html/grub-devel/2008-01/msg00051.html
and the patch:
http://lists.gnu.org/archive/html/grub-devel/2008-02/msg00220.html
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-20 16:28 ` Robert Millan
@ 2009-08-20 20:56 ` Vladimir 'phcoder' Serbinenko
2009-08-23 10:39 ` Robert Millan
0 siblings, 1 reply; 14+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-20 20:56 UTC (permalink / raw)
To: The development of GRUB 2
On Thu, Aug 20, 2009 at 6:28 PM, Robert Millan<rmh@aybabtu.com> wrote:
> On Wed, Aug 19, 2009 at 05:38:58PM +0200, Vladimir 'phcoder' Serbinenko wrote:
>> On Wed, Aug 19, 2009 at 5:34 PM, Robert Millan<rmh@aybabtu.com> wrote:
>> > On Wed, Aug 19, 2009 at 01:54:46PM +0200, Vladimir 'phcoder' Serbinenko wrote:
>> >> This is a dirty import of multiboot specification from grub1. It
>> >> doesn't compile it unless explicitly requested since we don't have
>> >> appropriate autoconf tests yet. The main goal is to leave no current
>> >> documentation in grub1 trunk. Everything in this patch is copy-pasted
>> >> from grub1
>> >
>> > Actually, my plan was to move this to a separate module. I even sent a patch,
>> > long ago.
>> It would be ok with me to do so.
>
> Yes. Would you like to review my patch?
>
+AC_INIT([Multiboot], [1], address@hidden)
Current version of multiboot spec is 0.69. If we want to increase
version we need to clarify few aspects first but I feel like its
discussion should be a separate thread.
Patch on ML archive is garbled (address@hidden around every @). Can
you resend it?
> See the discussion here:
>
> http://lists.gnu.org/archive/html/grub-devel/2008-01/msg00051.html
>
> and the patch:
>
> http://lists.gnu.org/archive/html/grub-devel/2008-02/msg00220.html
>
> --
> Robert Millan
>
> The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
> how) you may access your data; but nobody's threatening your freedom: we
> still allow you to remove your data and not access it at all."
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-20 20:56 ` Vladimir 'phcoder' Serbinenko
@ 2009-08-23 10:39 ` Robert Millan
2009-08-24 11:35 ` Vladimir 'phcoder' Serbinenko
0 siblings, 1 reply; 14+ messages in thread
From: Robert Millan @ 2009-08-23 10:39 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 1493 bytes --]
On Thu, Aug 20, 2009 at 10:56:09PM +0200, Vladimir 'phcoder' Serbinenko wrote:
> On Thu, Aug 20, 2009 at 6:28 PM, Robert Millan<rmh@aybabtu.com> wrote:
> > On Wed, Aug 19, 2009 at 05:38:58PM +0200, Vladimir 'phcoder' Serbinenko wrote:
> >> On Wed, Aug 19, 2009 at 5:34 PM, Robert Millan<rmh@aybabtu.com> wrote:
> >> > On Wed, Aug 19, 2009 at 01:54:46PM +0200, Vladimir 'phcoder' Serbinenko wrote:
> >> >> This is a dirty import of multiboot specification from grub1. It
> >> >> doesn't compile it unless explicitly requested since we don't have
> >> >> appropriate autoconf tests yet. The main goal is to leave no current
> >> >> documentation in grub1 trunk. Everything in this patch is copy-pasted
> >> >> from grub1
> >> >
> >> > Actually, my plan was to move this to a separate module. I even sent a patch,
> >> > long ago.
> >> It would be ok with me to do so.
> >
> > Yes. Would you like to review my patch?
> >
> +AC_INIT([Multiboot], [1], address@hidden)
> Current version of multiboot spec is 0.69. If we want to increase
> version we need to clarify few aspects first but I feel like its
> discussion should be a separate thread.
Agreed.
> Patch on ML archive is garbled (address@hidden around every @). Can
> you resend it?
Here you are.
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
[-- Attachment #2: convert_grub_legacy_to_multiboot.bash --]
[-- Type: text/plain, Size: 26592 bytes --]
#!/bin/bash -e
static_files=`mktemp`
for i in \
INSTALL autogen.sh README COPYING AUTHORS .cvsignore NEWS configure.ac \
Makefile.am ChangeLog docs/multiboot.texi docs/.cvsignore docs/Makefile.am \
docs/src2texi docs/kernel.c docs/boot.S docs/help2man docs/multiboot.h ; do
echo ./$i
done > $static_files
# be careful before removing stuff
test -e docs/multiboot.texi || exit 1
find . -type f | \
while read i ; do
if ! grep -qx "$i" $static_files ; then
rm -f $i
fi
done
rm -f $static_files
for i in 1 2 ; do
find . -type d -empty | xargs rmdir
done
patch -p1 < $0
exit 0
diff -Nur multiboot/AUTHORS multiboot.good/AUTHORS
--- multiboot/AUTHORS 2004-03-27 18:02:53.000000000 +0100
+++ multiboot.good/AUTHORS 2008-02-08 23:06:09.000000000 +0100
@@ -1,54 +1,5 @@
-VaX#n8 (real name unknown) wrote shared_src/fsys_ext2fs.c.
-
-Heiko Schroeder rewrote shared_src/stage1.S to be more readable.
The following authors assigned copyright on their work to the Free
Software Foundation:
-Erich Stefan Boleyn originally designed and implemented GRUB.
-
-Gordon Matzigkeit adopted GRUB into the GNU Project. He fixed several
-bugs, added symbolic link support to shared_src/fsys_ext2fs.c, and
-began the implementation of /sbin/grub. He was an official maintainer.
-
-Yoshinori K. Okuji contributed many bugfixes and new features, such as
-working LBA support, /sbin/grub support for configuration files, the
-script /sbin/grub-install, the utility /bin/mbchk, the new engine for
-builtin commands, disk swapping support, keyboard configuration support,
-network support, online help support, command-line history support,
-hidden menu support, the new Linux loader, serial terminal support,
-single-line editing support, the utility /sbin/grub-md5-crypt, the new
-GRUB manual, and several new commands. He is the current official
-maintainer.
-
-Peter Astrand added support for a color menu.
-
-Pavel Roskin contributed many bugfixes and new features, such as FreeBSD
-support for the grub shell, and configure process cleanups.
-
-Klaus Reichl wrote stage2/fsys_minix.c.
-
Per Lundberg added graphics support to the Multiboot Specification.
-
-Jochen Hoenicke rewrote stage2/fsys_fat.c and wrote
-stage2/fsys_reiserfs.c and stage2/md5.c.
-
-Christoph Plattner added support for Net Boot Image Proposal.
-
-Frank Mehnert added support for hercules console.
-
-Kristoffer Branemyr added VSTa filesystem support.
-
-Serguei Tzukanov added JFS and XFS support.
-
-Jason Thomas added Linux DAC960 support and support for hiding/unhiding
-logical partitions, and did a significant bugfix for the terminal stuff.
-
-Tilmann Bubeck added support for vt100-incompatible terminals.
-
-KB Sriram added a better detection of FAT filesystem and fixed a
-network device completion.
-
-Eric Kvaalen fixed a lot of problems in the GRUB manual.
-
-Leonid Lisovskiy added El Torito support.
diff -Nur multiboot/autogen.sh multiboot.good/autogen.sh
--- multiboot/autogen.sh 1970-01-01 01:00:00.000000000 +0100
+++ multiboot.good/autogen.sh 2008-02-08 23:11:31.000000000 +0100
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+set -ex
+
+aclocal
+autoheader
+automake --add-missing
+autoconf
+
+exit 0
diff -Nur multiboot/configure.ac multiboot.good/configure.ac
--- multiboot/configure.ac 2007-11-05 02:29:46.000000000 +0100
+++ multiboot.good/configure.ac 2008-02-08 22:56:20.000000000 +0100
@@ -1,5 +1,5 @@
dnl Configure script for GRUB.
-dnl Copyright 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation, Inc.
+dnl Copyright 1999,2000,2001,2002,2003,2004,2005,2008 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
@@ -13,42 +13,12 @@
dnl USE OF THIS SOFTWARE.
AC_PREREQ(2.57)
-AC_INIT([GRUB], [0.97], [bug-grub@gnu.org])
-AC_CONFIG_SRCDIR([stage2/stage2.c])
+AC_INIT([Multiboot], [1], [bug-grub@gnu.org])
+AC_CONFIG_SRCDIR([docs/multiboot.texi])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE
-AC_CANONICAL_HOST
-
-case "$host_cpu" in
-i[[3456]]86) host_cpu=i386 ;;
-x86_64) host_cpu=x86_64 ;;
-*) AC_MSG_ERROR([unsupported CPU type]) ;;
-esac
-
-AC_SUBST(host_cpu)
-AC_SUBST(host_vendor)
-
-#
-# Options
-#
-
-AM_MAINTAINER_MODE
-if test "x$enable_maintainer_mode" = xyes; then
- AC_PATH_PROG(PERL,perl)
- if test -z "$PERL"; then
- AC_MSG_ERROR([perl not found])
- fi
-fi
-
-# This should be checked before AC_PROG_CC
-if test "x$CFLAGS" = x; then
- default_CFLAGS=yes
-fi
-
-if test "x$host_cpu" = xx86_64; then
- CFLAGS="-m32 $CFLAGS"
-fi
+CFLAGS="-m32 $CFLAGS"
#
# Programs
@@ -63,619 +33,16 @@
CCAS="$CC"
AC_SUBST(CCAS)
-AC_ARG_WITH(binutils,
- [ --with-binutils=DIR search the directory DIR to find binutils])
-
-if test "x$with_binutils" != x; then
-dnl AC_PATH_TOOL is not seen in autoconf 2.13, so use AC_PATH_PROG
-dnl instead for now. It is preferable when you cross-compile GRUB.
-dnl AC_PATH_TOOL(RANLIB, ranlib, :, "$with_binutils:$PATH")
- AC_PATH_PROG(RANLIB, ranlib, :, "$with_binutils:$PATH")
-else
- AC_PROG_RANLIB
-fi
-
-# optimization flags
-if test "x$ac_cv_prog_gcc" = xyes; then
- if test "x$default_CFLAGS" = xyes; then
- # Autoconf may set CFLAGS to -O2 and/or -g. So eliminate them.
- CFLAGS="`echo $CFLAGS | sed -e 's/-g//g' -e 's/-O[[0-9]]//g'` -g"
- # If the user specify the directory for binutils, add the option `-B'.
- if test "x$with_binutils" != x; then
- CFLAGS="-B$with_binutils/ $CFLAGS"
- fi
- STAGE1_CFLAGS="-O2"
- GRUB_CFLAGS="-O2"
- AC_CACHE_CHECK([whether optimization for size works], size_flag, [
- saved_CFLAGS=$CFLAGS
- CFLAGS="-Os -g"
- AC_TRY_COMPILE(, , size_flag=yes, size_flag=no)
- CFLAGS=$saved_CFLAGS
- ])
- if test "x$size_flag" = xyes; then
- STAGE2_CFLAGS="-Os"
- else
- STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops"
- fi
- # OpenBSD has a GCC extension for protecting applications from
- # stack smashing attacks, but GRUB doesn't want this feature.
- AC_CACHE_CHECK([whether gcc has -fno-stack-protector],
- no_stack_protector_flag, [
- saved_CFLAGS=$CFLAGS
- CFLAGS="-fno-stack-protector"
- AC_TRY_COMPILE(,
- ,
- no_stack_protector_flag=yes,
- no_stack_protector_flag=no)
- CFLAGS=$saved_CFLAGS
- ])
- if test "x$no_stack_protector_flag" = xyes; then
- STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector"
- fi
- fi
-fi
-
-AC_SUBST(STAGE1_CFLAGS)
-AC_SUBST(STAGE2_CFLAGS)
-AC_SUBST(GRUB_CFLAGS)
-
-# Enforce coding standards.
-CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow"
-CPPFLAGS="$CPPFLAGS -Wpointer-arith"
-
-AC_CACHE_CHECK([whether -Wundef works], undef_flag, [
- saved_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="-Wundef"
- AC_TRY_COMPILE(, , undef_flag=yes, undef_flag=no)
- CPPFLAGS="$saved_CPPFLAGS"
-])
-
-# The options `-falign-*' are supported by gcc 3.0 or later.
-# Probably it is sufficient to only check for -falign-loops.
-AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [
- saved_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="-falign-loops=1"
- AC_TRY_COMPILE(, , [falign_loop_flag=yes], [falign_loop_flag=no])
- CPPFLAGS="$saved_CPPFLAGS"
-])
-
-# Force no alignment to save space.
-if test "x$falign_loop_flag" = xyes; then
- CPPFLAGS="$CPPFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
-else
- CPPFLAGS="$CPPFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
-fi
-
-if test "x$undef_flag" = xyes; then
- CPPFLAGS="$CPPFLAGS -Wundef"
-fi
-
-# Check if build ID can be disabled in the linker
-AC_MSG_CHECKING([whether linker accepts `--build-id=none'])
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS -Wl,--build-id=none"
-AC_TRY_LINK(, , build_id_flag=yes, build_id_flag=no)
-AC_MSG_RESULT([$build_id_flag])
-LDFLAGS="$save_LDFLAGS"
-if test "x$build_id_flag" = xyes; then
- LDFLAGS="$LDFLAGS -Wl,--build-id=none"
-fi
-
-if test "x$with_binutils" != x; then
-dnl AC_PATH_TOOL(OBJCOPY, objcopy, , "$with_binutils:$PATH")
- AC_PATH_PROG(OBJCOPY, objcopy, , "$with_binutils:$PATH")
-else
- AC_CHECK_TOOL(OBJCOPY, objcopy)
-fi
-
-# Defined in acinclude.m4.
-grub_ASM_USCORE
-grub_PROG_OBJCOPY_ABSOLUTE
-if test "x$grub_cv_prog_objcopy_absolute" != xyes; then
- AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils])
-fi
-
-grub_ASM_PREFIX_REQUIREMENT
-
-grub_ASM_ADDR32
-if test "x$grub_cv_asm_addr32" != xyes; then
- AC_MSG_ERROR([GRUB requires GAS .code16 addr32 support; upgrade your binutils])
-fi
-
-grub_ASM_ABSOLUTE_WITHOUT_ASTERISK
-
-grub_CHECK_START_SYMBOL
-grub_CHECK_USCORE_START_SYMBOL
-if test "x$grub_cv_check_start_symbol" != "xyes" \
- -a "x$grub_cv_check_uscore_start_symbol" != "xyes"; then
- AC_MSG_ERROR([Neither start nor _start is defined])
-fi
-
-grub_CHECK_USCORE_USCORE_BSS_START_SYMBOL
-grub_CHECK_USCORE_EDATA_SYMBOL
-grub_CHECK_EDATA_SYMBOL
-if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" != "xyes" \
- -a "x$grub_cv_check_uscore_edata_symbol" != "xyes" \
- -a "x$grub_cv_check_edata_symbol" != "xyes"; then
- AC_MSG_ERROR([None of __bss_start, _edata, edata defined])
-fi
-
-grub_CHECK_END_SYMBOL
-grub_CHECK_USCORE_END_SYMBOL
-if test "x$grub_cv_check_end_symbol" != "xyes" \
- -a "x$grub_cv_check_uscore_end_symbol" != "xyes"; then
- AC_MSG_ERROR([Neither end nor _end is defined])
-fi
-
-# Check for curses libraries.
-AC_ARG_WITH(curses,
- [ --without-curses do not use curses])
-
-# Get the filename or the whole disk and open it.
-# Known to work on NetBSD.
-AC_CHECK_LIB(util, opendisk, [GRUB_LIBS="$GRUB_LIBS -lutil"
- AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])])
-
-# Unless the user specify --without-curses, check for curses.
-if test "x$with_curses" != "xno"; then
- AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lncurses"
- AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])],
- [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lcurses"
- AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])])])
-fi
-
-AC_SUBST(GRUB_LIBS)
-
-# Check for headers.
-AC_CHECK_HEADERS(string.h strings.h ncurses/curses.h ncurses.h curses.h)
-
-# Check for user options.
-
-# filesystems support.
-AC_ARG_ENABLE(ext2fs,
- [ --disable-ext2fs disable ext2fs support in Stage 2])
-
-if test x"$enable_ext2fs" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_EXT2FS=1"
-fi
-
-AC_ARG_ENABLE(fat,
- [ --disable-fat disable FAT support in Stage 2])
-
-if test x"$enable_fat" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FAT=1"
-fi
-
-AC_ARG_ENABLE(ffs,
- [ --disable-ffs disable FFS support in Stage 2])
-
-if test x"$enable_ffs" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FFS=1"
-fi
-
-AC_ARG_ENABLE(ufs2,
- [ --disable-ufs2 disable UFS2 support in Stage 2])
-
-if test x"$enable_ufs2" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_UFS2=1"
-fi
-
-AC_ARG_ENABLE(minix,
- [ --disable-minix disable Minix fs support in Stage 2])
-
-if test x"$enable_minix" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_MINIX=1"
-fi
-
-AC_ARG_ENABLE(reiserfs,
- [ --disable-reiserfs disable ReiserFS support in Stage 2])
-
-if test x"$enable_reiserfs" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_REISERFS=1"
-fi
-
-AC_ARG_ENABLE(vstafs,
- [ --disable-vstafs disable VSTa FS support in Stage 2])
-
-if test x"$enable_vstafs" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_VSTAFS=1"
-fi
-
-AC_ARG_ENABLE(jfs,
- [ --disable-jfs disable IBM JFS support in Stage 2])
-
-if test x"$enable_jfs" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_JFS=1"
-fi
-
-AC_ARG_ENABLE(xfs,
- [ --disable-xfs disable SGI XFS support in Stage 2])
-
-if test x"$enable_xfs" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_XFS=1"
-fi
-
-AC_ARG_ENABLE(iso9660,
- [ --disable-iso9660 disable ISO9660 support in Stage 2])
-
-if test x"$enable_iso9660" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_ISO9660=1"
-fi
-
-dnl AC_ARG_ENABLE(tftp,
-dnl [ --enable-tftp enable TFTP support in Stage 2])
-dnl
-dnl #if test x"$enable_tftp" = xyes; then
-dnl FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_TFTP=1"
-dnl fi
-
-AC_ARG_ENABLE(gunzip,
- [ --disable-gunzip disable decompression in Stage 2])
-
-if test x"$enable_gunzip" = xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DNO_DECOMPRESSION=1"
-fi
-
-AC_ARG_ENABLE(md5-password,
- [ --disable-md5-password disable MD5 password support in Stage 2])
-if test "x$enable_md5_password" != xno; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DUSE_MD5_PASSWORDS=1"
-fi
-
-dnl The netboot support.
-dnl General options.
-AC_ARG_ENABLE(packet-retransmission,
- [ --disable-packet-retransmission
- turn off packet retransmission])
-if test "x$enable_packet_retransmission" != xno; then
- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONGESTED=1"
-fi
-
-AC_ARG_ENABLE(pci-direct,
- [ --enable-pci-direct access PCI directly instead of using BIOS])
-if test "x$enable_pci_direct" = xyes; then
- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONFIG_PCI_DIRECT=1"
-fi
-
-dnl Device drivers.
-AC_ARG_ENABLE(3c509,
- [ --enable-3c509 enable 3Com509 driver])
-if test "x$enable_3c509" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C509"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c509.o"
-fi
-
-AC_ARG_ENABLE(3c529,
- [ --enable-3c529 enable 3Com529 driver])
-if test "x$enable_3c529" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C529=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c529.o"
-fi
-
-AC_ARG_ENABLE(3c595,
- [ --enable-3c595 enable 3Com595 driver])
-if test "x$enable_3c595" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C595=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c595.o"
-fi
-
-AC_ARG_ENABLE(3c90x,
- [ --enable-3c90x enable 3Com90x driver])
-if test "x$enable_3c90x" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C90X=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c90x.o"
-fi
-
-AC_ARG_ENABLE(cs89x0,
- [ --enable-cs89x0 enable CS89x0 driver])
-if test "x$enable_cs89x0" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_CS89X0=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS cs89x0.o"
-fi
-
-AC_ARG_ENABLE(davicom,
- [ --enable-davicom enable Davicom driver])
-if test "x$enable_davicom" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DAVICOM=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS davicom.o"
-fi
-
-AC_ARG_ENABLE(depca,
- [ --enable-depca enable DEPCA and EtherWORKS driver])
-if test "x$enable_depca" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DEPCA=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS depca.o"
-fi
-
-AC_ARG_ENABLE(eepro,
- [ --enable-eepro enable Etherexpress Pro/10 driver])
-if test "x$enable_eepro" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro.o"
-fi
-
-AC_ARG_ENABLE(eepro100,
- [ --enable-eepro100 enable Etherexpress Pro/100 driver])
-if test "x$enable_eepro100" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO100=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro100.o"
-fi
-
-AC_ARG_ENABLE(epic100,
- [ --enable-epic100 enable SMC 83c170 EPIC/100 driver])
-if test "x$enable_epic100" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EPIC100=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS epic100.o"
-fi
-
-AC_ARG_ENABLE(3c507,
- [ --enable-3c507 enable 3Com507 driver])
-if test "x$enable_3c507" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C507=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c507.o"
-fi
-
-AC_ARG_ENABLE(exos205,
- [ --enable-exos205 enable EXOS205 driver])
-if test "x$enable_exos205" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EXOS205=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS exos205.o"
-fi
-
-AC_ARG_ENABLE(ni5210,
- [ --enable-ni5210 enable Racal-Interlan NI5210 driver])
-if test "x$enable_ni5210" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5210=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5210.o"
-fi
-
-AC_ARG_ENABLE(lance,
- [ --enable-lance enable Lance PCI PCNet/32 driver])
-if test "x$enable_lance" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_LANCE=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS lance.o"
-fi
-
-AC_ARG_ENABLE(ne2100,
- [ --enable-ne2100 enable Novell NE2100 driver])
-if test "x$enable_ne2100" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE2100=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne2100.o"
-fi
-
-AC_ARG_ENABLE(ni6510,
- [ --enable-ni6510 enable Racal-Interlan NI6510 driver])
-if test "x$enable_ni6510" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI6510=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni6510.o"
-fi
-
-AC_ARG_ENABLE(natsemi,
- [ --enable-natsemi enable NatSemi DP8381x driver])
-if test "x$enable_natsemi" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NATSEMI=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS natsemi.o"
-fi
-
-AC_ARG_ENABLE(ni5010,
- [ --enable-ni5010 enable Racal-Interlan NI5010 driver])
-if test "x$enable_ni5010" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5010=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5010.o"
-fi
-
-AC_ARG_ENABLE(3c503,
- [ --enable-3c503 enable 3Com503 driver])
-if test "x$enable_3c503" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C503=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c503.o"
-fi
-
-AC_ARG_ENABLE(ne,
- [ --enable-ne enable NE1000/2000 ISA driver])
-if test "x$enable_ne" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne.o"
-fi
-
-AC_ARG_ENABLE(ns8390,
- [ --enable-ns8390 enable NE2000 PCI driver])
-if test "x$enable_ns8390" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NS8390=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ns8390.o"
-fi
-
-AC_ARG_ENABLE(wd,
- [ --enable-wd enable WD8003/8013, SMC8216/8416 driver])
-if test "x$enable_wd" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_WD=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS wd.o"
-fi
-
-AC_ARG_ENABLE(otulip,
- [ --enable-otulip enable old Tulip driver])
-if test "x$enable_otulip" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_OTULIP=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS otulip.o"
-fi
-
-AC_ARG_ENABLE(rtl8139,
- [ --enable-rtl8139 enable Realtek 8139 driver])
-if test "x$enable_rtl8139" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_RTL8139=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS rtl8139.o"
-fi
-
-AC_ARG_ENABLE(sis900,
- [ --enable-sis900 enable SIS 900 and SIS 7016 driver])
-if test "x$enable_sis900" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SIS900=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS sis900.o"
-fi
-
-AC_ARG_ENABLE(sk-g16,
- [ --enable-sk-g16 enable Schneider and Koch G16 driver])
-if test "x$enable_sk_g16" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SK_G16=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS sk_g16.o"
-fi
-
-AC_ARG_ENABLE(smc9000,
- [ --enable-smc9000 enable SMC9000 driver])
-if test "x$enable_smc9000" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SMC9000=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS smc9000.o"
-fi
-
-AC_ARG_ENABLE(tiara,
- [ --enable-tiara enable Tiara driver])
-if test "x$enable_tiara" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TIARA=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS tiara.o"
-fi
-
-AC_ARG_ENABLE(tulip,
- [ --enable-tulip enable Tulip driver])
-if test "x$enable_tulip" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TULIP=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS tulip.o"
-fi
-
-AC_ARG_ENABLE(via-rhine,
- [ --enable-via-rhine enable Rhine-I/II driver])
-if test "x$enable_via_rhine" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_VIA_RHINE=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS via_rhine.o"
-fi
-
-AC_ARG_ENABLE(w89c840,
- [ --enable-w89c840 enable Winbond W89c840, Compex RL100-ATX driver])
-if test "x$enable_w89c840" = xyes; then
- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_W89C840=1"
- NETBOOT_DRIVERS="$NETBOOT_DRIVERS w89c840.o"
-fi
-
-dnl Check if the netboot support is turned on.
-AM_CONDITIONAL(NETBOOT_SUPPORT, test "x$NET_CFLAGS" != x)
-if test "x$NET_CFLAGS" != x; then
- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_TFTP=1"
-fi
-
-dnl Extra options.
-AC_ARG_ENABLE(3c503-shmem,
- [ --enable-3c503-shmem use 3c503 shared memory mode])
-if test "x$enable_3c503_shmem" = xyes; then
- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_SHMEM=1"
-fi
-
-AC_ARG_ENABLE(3c503-aui,
- [ --enable-3c503-aui use AUI by default on 3c503 cards])
-if test "x$enable_3c503_aui" = xyes; then
- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_AUI=1"
-fi
-
-AC_ARG_ENABLE(compex-rl2000-fix,
- [ --enable-compex-rl2000-fix
- specify this if you have a Compex RL2000 PCI])
-if test "x$enable_compex_rl2000_fix" = xyes; then
- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCOMPEX_RL2000_FIX=1"
-fi
-
-AC_ARG_ENABLE(smc9000-scan,
- [ --enable-smc9000-scan=LIST
- probe for SMC9000 I/O addresses using LIST],
- [NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DSMC9000_SCAN=$enable_smc9000_scan"])
-
-AC_ARG_ENABLE(ne-scan,
- [ --enable-ne-scan=LIST probe for NE base address using LIST],
- [NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=$enable_ne_scan"],
- [NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=0x280,0x300,0x320,0x340"])
-
-AC_ARG_ENABLE(wd-default-mem,
- [ --enable-wd-default-mem=MEM
- set the default memory location for WD/SMC],
- [NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=$enable_wd_default_mem"],
- [NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=0xCC000"])
-
-AC_ARG_ENABLE(cs-scan,
- [ --enable-cs-scan=LIST probe for CS89x0 base address using LIST],
- [NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCS_SCAN=$enable_cs_scan"])
-
-dnl Diskless
-AC_ARG_ENABLE(diskless,
- [ --enable-diskless enable diskless support])
-AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes)
-
-dnl Hercules terminal
-AC_ARG_ENABLE(hercules,
- [ --disable-hercules disable hercules terminal support])
-AM_CONDITIONAL(HERCULES_SUPPORT, test "x$enable_hercules" != xno)
-
-dnl Serial terminal
-AC_ARG_ENABLE(serial,
- [ --disable-serial disable serial terminal support])
-AM_CONDITIONAL(SERIAL_SUPPORT, test "x$enable_serial" != xno)
-
-dnl Simulation of the slowness of a serial device.
-AC_ARG_ENABLE(serial-speed-simulation,
- [ --enable-serial-speed-simulation
- simulate the slowness of a serial device])
-AM_CONDITIONAL(SERIAL_SPEED_SIMULATION,
- test "x$enable_serial_speed_simulation" = xyes)
-
-# Sanity check.
-if test "x$enable_diskless" = xyes; then
- if test "x$NET_CFLAGS" = x; then
- AC_MSG_ERROR([You must enable at least one network driver])
- fi
-fi
-
-dnl Embed a menu string in GRUB itself.
-AC_ARG_ENABLE(preset-menu,
- [ --enable-preset-menu=FILE
- preset a menu file FILE in Stage 2])
-if test "x$enable_preset_menu" = x; then
- :
-else
- if test -r $enable_preset_menu; then
- grub_DEFINE_FILE(PRESET_MENU_STRING, [$enable_preset_menu],
- [Define if there is user specified preset menu string])
- else
- AC_MSG_ERROR([Cannot read the preset menu file $enable_preset_menu])
- fi
-fi
-
dnl Build the example Multiboot kernel.
AC_ARG_ENABLE(example-kernel,
[ --enable-example-kernel
build the example Multiboot kernel])
AM_CONDITIONAL(BUILD_EXAMPLE_KERNEL, test "x$enable_example_kernel" = xyes)
-dnl Automatic Linux mem= option.
-AC_ARG_ENABLE(auto-linux-mem-opt,
- [ --disable-auto-linux-mem-opt
- don't pass Linux mem= option automatically])
-if test "x$enable_auto_linux_mem_opt" = xno; then
- :
-else
- AC_DEFINE(AUTO_LINUX_MEM_OPT, 1, [Define if you don't want to pass the mem= option to Linux])
-fi
-
-dnl Now substitute the variables.
-AC_SUBST(FSYS_CFLAGS)
-AC_SUBST(NET_CFLAGS)
-AC_SUBST(NET_EXTRAFLAGS)
-AC_SUBST(NETBOOT_DRIVERS)
-
dnl Because recent automake complains about CCASFLAGS, set it here.
CCASFLAGS='$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)'
AC_SUBST(CCASFLAGS)
-
dnl Output.
-AC_CONFIG_FILES([Makefile stage1/Makefile stage2/Makefile \
- docs/Makefile lib/Makefile util/Makefile \
- grub/Makefile netboot/Makefile util/grub-image \
- util/grub-install util/grub-md5-crypt \
- util/grub-terminfo util/grub-set-default])
+AC_CONFIG_FILES([Makefile docs/Makefile])
AC_OUTPUT
diff -Nur multiboot/docs/Makefile.am multiboot.good/docs/Makefile.am
--- multiboot/docs/Makefile.am 2006-06-24 16:40:02.000000000 +0200
+++ multiboot.good/docs/Makefile.am 2008-02-08 22:56:34.000000000 +0100
@@ -1,8 +1,6 @@
-info_TEXINFOS = grub.texi multiboot.texi
-grub_TEXINFOS = internals.texi fdl.texi
+info_TEXINFOS = multiboot.texi
EXAMPLES = boot.S kernel.c multiboot.h
multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi
-man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8
HELP2MAN = help2man
SRC2TEXI = src2texi
noinst_SCRIPTS = $(HELP2MAN) $(SRC2TEXI)
@@ -35,31 +33,3 @@
%.S.texi: %.S $(srcdir)/$(SRC2TEXI)
$(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@
-
-if MAINTAINER_MODE
-$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN)
- $(PERL) $(srcdir)/$(HELP2MAN) --name="the grub shell" \
- --section=8 --output=$@ $<
-
-$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN)
- chmod 755 $<
- $(PERL) $(srcdir)/$(HELP2MAN) --name="install GRUB on your drive" \
- --section=8 --output=$@ $<
-
-$(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN)
- $(PERL) $(srcdir)/$(HELP2MAN) \
- --name="check the format of a Multiboot kernel" \
- --section=1 --output=$@ $<
-
-$(srcdir)/grub-md5-crypt.8: ../util/grub-md5-crypt $(srcdir)/$(HELP2MAN)
- chmod 755 $<
- $(PERL) $(srcdir)/$(HELP2MAN) \
- --name="Encrypt a password in MD5 format" \
- --section=8 --output=$@ $<
-
-$(srcdir)/grub-terminfo.8: ../util/grub-terminfo $(srcdir)/$(HELP2MAN)
- chmod 755 $<
- $(PERL) $(srcdir)/$(HELP2MAN) \
- --name="Generate a terminfo command from a terminfo name" \
- --section=8 --output=$@ $<
-endif
diff -Nur multiboot/Makefile.am multiboot.good/Makefile.am
--- multiboot/Makefile.am 2004-04-23 15:39:01.000000000 +0200
+++ multiboot.good/Makefile.am 2008-02-08 23:01:07.000000000 +0100
@@ -1,4 +1,3 @@
# Do not change this order if you don't know what you are doing.
AUTOMAKE_OPTIONS = 1.7 gnu
-SUBDIRS = netboot stage2 stage1 lib grub util docs
-EXTRA_DIST = BUGS MAINTENANCE
+SUBDIRS = docs
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-23 10:39 ` Robert Millan
@ 2009-08-24 11:35 ` Vladimir 'phcoder' Serbinenko
2009-08-24 12:05 ` Vladimir 'phcoder' Serbinenko
2009-10-31 12:11 ` Robert Millan
0 siblings, 2 replies; 14+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-24 11:35 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 2712 bytes --]
On Sun, Aug 23, 2009 at 12:39 PM, Robert Millan<rmh@aybabtu.com> wrote:
> On Thu, Aug 20, 2009 at 10:56:09PM +0200, Vladimir 'phcoder' Serbinenko wrote:
>> On Thu, Aug 20, 2009 at 6:28 PM, Robert Millan<rmh@aybabtu.com> wrote:
>> > On Wed, Aug 19, 2009 at 05:38:58PM +0200, Vladimir 'phcoder' Serbinenko wrote:
>> >> On Wed, Aug 19, 2009 at 5:34 PM, Robert Millan<rmh@aybabtu.com> wrote:
>> >> > On Wed, Aug 19, 2009 at 01:54:46PM +0200, Vladimir 'phcoder' Serbinenko wrote:
>> >> >> This is a dirty import of multiboot specification from grub1. It
>> >> >> doesn't compile it unless explicitly requested since we don't have
>> >> >> appropriate autoconf tests yet. The main goal is to leave no current
>> >> >> documentation in grub1 trunk. Everything in this patch is copy-pasted
>> >> >> from grub1
>> >> >
>> >> > Actually, my plan was to move this to a separate module. I even sent a patch,
>> >> > long ago.
>> >> It would be ok with me to do so.
>> >
>> > Yes. Would you like to review my patch?
>> >
>> +AC_INIT([Multiboot], [1], address@hidden)
>> Current version of multiboot spec is 0.69. If we want to increase
>> version we need to clarify few aspects first but I feel like its
>> discussion should be a separate thread.
>
> Agreed.
>
>> Patch on ML archive is garbled (address@hidden around every @). Can
>> you resend it?
>
> Here you are.
>
1) deleting files fails because of .svn directories
2) One of the hunks for configure.ac was rejected.
3) Is there any reason for keeping following line:
HELP2MAN = help2man
4) version is still wrong.
5) It looks like --with-binutils can be kept but not necessary to do
so since it's effect is the same as calling configure with
CFLAGS="-B<dir>"
6) INSTALL, NEWS and README are out of sync
7) AUTHORS seem empty. At least following author must be added:
* docs/multiboot.texi: New file. From Kunihiro Ishiguro.
8) COPYING contains GPLv2. fdl.texi isn't imported.
9) ChangeLog contains whole history of grub1, not just multiboot.
Attached python file cleans it up (output still contains some junk but
it's feasible to remove it by hand)
10) autogen.sh doesn't generate configure.
> --
> Robert Millan
>
> The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
> how) you may access your data; but nobody's threatening your freedom: we
> still allow you to remove your data and not access it at all."
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
>
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
[-- Attachment #2: convert.py --]
[-- Type: text/x-python, Size: 512 bytes --]
import re
with open ("ChangeLog", "r") as f:
with open ("ChangeLog.multiboot", "w") as fw:
entry = ""
for line in f:
if re.match ("(199|200)[0-9]", line) :
if re.search ("\* (docs/boot.S|docs/help2man|docs/kernel.c|docs/Makefile.am|docs/multiboot.h|docs/multiboot.texi|docs/src2texi|AUTHORS|autogen.sh|configure.ac|COPYING|INSTALL|Makefile.am|NEWS|README)", entry):
fw.write (entry)
entry = ""
entry = entry + line
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-24 11:35 ` Vladimir 'phcoder' Serbinenko
@ 2009-08-24 12:05 ` Vladimir 'phcoder' Serbinenko
2009-08-24 18:38 ` Isaac Dupree
2009-10-31 12:11 ` Robert Millan
1 sibling, 1 reply; 14+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-24 12:05 UTC (permalink / raw)
To: The development of GRUB 2
> 8) COPYING contains GPLv2. fdl.texi isn't imported.
I'm not a lawyer but following is my analysis
AFAICT only example kernel is under GPL (v2 to be precise) the rest is
either custom license, unclaimed copyright or non-copyrightable.
IMO multiboot specification should be FDL with cover text "Multiboot
specification"
example kernel should be under permissive license.
configure.ac in GRUB2 could be moved to GPLv3+ instead of permissive
license (now both GRUBs have this file under all-permissive license)
(in multiboot module if we put it under GPLv3+, license will be bigger
than covered file)
autogen.sh is small
AUTHORS, ChangeLog and NEWS (whatever remains of these files) are
probably uncopyrightable
INSTALL and README will be smaller once GRUB-specific parts are
ditched. I would put them under FDL for uniformity
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-24 12:05 ` Vladimir 'phcoder' Serbinenko
@ 2009-08-24 18:38 ` Isaac Dupree
2009-08-24 18:49 ` Vladimir 'phcoder' Serbinenko
2009-08-24 18:52 ` Vladimir 'phcoder' Serbinenko
0 siblings, 2 replies; 14+ messages in thread
From: Isaac Dupree @ 2009-08-24 18:38 UTC (permalink / raw)
To: The development of GRUB 2
Vladimir 'phcoder' Serbinenko wrote:
>> 8) COPYING contains GPLv2. fdl.texi isn't imported.
> I'm not a lawyer but following is my analysis
> AFAICT only example kernel is under GPL (v2 to be precise) the rest is
> either custom license, unclaimed copyright or non-copyrightable.
> IMO multiboot specification should be FDL with cover text "Multiboot
> specification"
It's better IIRC not to have any cover texts or invariant sections if we
have a choice. If we have any, then it doesn't fall within the Debian
Free Software Guidelines and Debian et al. will be annoyed and not
distribute it as much. (Or we could use GPL3 or CC-BY-SA for the
specification... or has the FSF produced any revisions of the FDL
recently? I forget)
-Isaac
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-24 18:38 ` Isaac Dupree
@ 2009-08-24 18:49 ` Vladimir 'phcoder' Serbinenko
2009-08-24 20:14 ` Isaac Dupree
2009-08-24 18:52 ` Vladimir 'phcoder' Serbinenko
1 sibling, 1 reply; 14+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-24 18:49 UTC (permalink / raw)
To: The development of GRUB 2
On Mon, Aug 24, 2009 at 8:38 PM, Isaac
Dupree<ml@isaac.cedarswampstudios.org> wrote:
> Vladimir 'phcoder' Serbinenko wrote:
>>>
>>> 8) COPYING contains GPLv2. fdl.texi isn't imported.
>>
>> I'm not a lawyer but following is my analysis
>> AFAICT only example kernel is under GPL (v2 to be precise) the rest is
>> either custom license, unclaimed copyright or non-copyrightable.
>> IMO multiboot specification should be FDL with cover text "Multiboot
>> specification"
>
> It's better IIRC not to have any cover texts or invariant sections if we
> have a choice.
I've checked and it revealed that I had false idea about cover texts.
ACtually the requirement I wanted to impose is that modified copies
can't have the title "Multiboot Specification". Sorry for using
incorrect idea.
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-24 18:49 ` Vladimir 'phcoder' Serbinenko
@ 2009-08-24 20:14 ` Isaac Dupree
0 siblings, 0 replies; 14+ messages in thread
From: Isaac Dupree @ 2009-08-24 20:14 UTC (permalink / raw)
To: The development of GRUB 2
Vladimir 'phcoder' Serbinenko wrote:
> On Mon, Aug 24, 2009 at 8:38 PM, Isaac
> Dupree<ml@isaac.cedarswampstudios.org> wrote:
>> Vladimir 'phcoder' Serbinenko wrote:
>>>> 8) COPYING contains GPLv2. fdl.texi isn't imported.
>>> I'm not a lawyer but following is my analysis
>>> AFAICT only example kernel is under GPL (v2 to be precise) the rest is
>>> either custom license, unclaimed copyright or non-copyrightable.
>>> IMO multiboot specification should be FDL with cover text "Multiboot
>>> specification"
>> It's better IIRC not to have any cover texts or invariant sections if we
>> have a choice.
> I've checked and it revealed that I had false idea about cover texts.
> ACtually the requirement I wanted to impose is that modified copies
> can't have the title "Multiboot Specification". Sorry for using
> incorrect idea.
quite right; we certainly don't want to *require* that modified texts
call themselves Multiboot Specification! Instead we'd like them not to
be called that. I'm not sure if copyright law is the right way to do
that; sometimes trademarks are; however here we have
FDL 1.3 requirement for modified versions:
"A. Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions (which
should, if there were any, be listed in the History section of the
Document). You may use the same title as a previous version if the
original publisher of that version gives permission. "
GPLv3:
"The work must carry prominent notices stating that you modified it, and
giving a relevant date."
and allows certain additional restrictions, especially
"c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or"
"e) Declining to grant rights under trademark law for use of some trade
names, trademarks, or service marks; or"
...which are used in Micropolis, based on SimCity code released as GPLv3
by EA who owns the SimCity trademark and guards it jealously
<http://code.google.com/p/micropolis/wiki/License>
I think the FDL version 1.3 requirement above is quite sufficient for
this document.
-Isaac
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-24 18:38 ` Isaac Dupree
2009-08-24 18:49 ` Vladimir 'phcoder' Serbinenko
@ 2009-08-24 18:52 ` Vladimir 'phcoder' Serbinenko
2009-08-24 18:57 ` Felix Zielcke
1 sibling, 1 reply; 14+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-24 18:52 UTC (permalink / raw)
To: The development of GRUB 2
> If we have any, then it doesn't fall within the Debian Free
> Software Guidelines and Debian et al. will be annoyed and not distribute it
> as much.
Actually this doesn't matter. GRUB is GNU project and invariant
sections and cover texts are completely ok. Additionally it's a coder
manual so it's not necessary that Debian distributes it at all. It
gives no advantage to end user and kernel developpers always will be
able to find it.
--
Regards
Vladimir 'phcoder' Serbinenko
Personal git repository: http://repo.or.cz/w/grub2/phcoder.git
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-24 18:52 ` Vladimir 'phcoder' Serbinenko
@ 2009-08-24 18:57 ` Felix Zielcke
0 siblings, 0 replies; 14+ messages in thread
From: Felix Zielcke @ 2009-08-24 18:57 UTC (permalink / raw)
To: The development of GRUB 2
Am Montag, den 24.08.2009, 20:52 +0200 schrieb Vladimir 'phcoder'
Serbinenko:
> > If we have any, then it doesn't fall within the Debian Free
> > Software Guidelines and Debian et al. will be annoyed and not distribute it
> > as much.
> Actually this doesn't matter. GRUB is GNU project and invariant
> sections and cover texts are completely ok. Additionally it's a coder
> manual so it's not necessary that Debian distributes it at all. It
> gives no advantage to end user and kernel developpers always will be
> able to find it.
>
We distribute multiboot-doc (as part of grub-legacy source package) in
Debian main.
--
Felix Zielcke
Proud Debian Maintainer
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] import multiboot1 specification in grub trunk
2009-08-24 11:35 ` Vladimir 'phcoder' Serbinenko
2009-08-24 12:05 ` Vladimir 'phcoder' Serbinenko
@ 2009-10-31 12:11 ` Robert Millan
1 sibling, 0 replies; 14+ messages in thread
From: Robert Millan @ 2009-10-31 12:11 UTC (permalink / raw)
To: The development of GRUB 2
On Mon, Aug 24, 2009 at 01:35:23PM +0200, Vladimir 'phcoder' Serbinenko wrote:
> 1) deleting files fails because of .svn directories
> 2) One of the hunks for configure.ac was rejected.
> 3) Is there any reason for keeping following line:
> HELP2MAN = help2man
> 4) version is still wrong.
> 5) It looks like --with-binutils can be kept but not necessary to do
> so since it's effect is the same as calling configure with
> CFLAGS="-B<dir>"
> 6) INSTALL, NEWS and README are out of sync
> 7) AUTHORS seem empty. At least following author must be added:
> * docs/multiboot.texi: New file. From Kunihiro Ishiguro.
> 8) COPYING contains GPLv2. fdl.texi isn't imported.
> 9) ChangeLog contains whole history of grub1, not just multiboot.
> Attached python file cleans it up (output still contains some junk but
> it's feasible to remove it by hand)
> 10) autogen.sh doesn't generate configure.
I imported GRUB Legacy into Bazaar and made a Multiboot branch, in
/trunk/multiboot, addressing most of the problems.
Pending: 3, 5, 6, first part of 8, and (feel free to) 9.
When the cleanup is finished, we can release 0.6.96 with unmodified text
(except for Felix' spelling fixes).
--
Robert Millan
The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
how) you may access your data; but nobody's threatening your freedom: we
still allow you to remove your data and not access it at all."
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2009-10-31 12:11 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-19 11:54 [PATCH] import multiboot1 specification in grub trunk Vladimir 'phcoder' Serbinenko
2009-08-19 15:34 ` Robert Millan
2009-08-19 15:38 ` Vladimir 'phcoder' Serbinenko
2009-08-20 16:28 ` Robert Millan
2009-08-20 20:56 ` Vladimir 'phcoder' Serbinenko
2009-08-23 10:39 ` Robert Millan
2009-08-24 11:35 ` Vladimir 'phcoder' Serbinenko
2009-08-24 12:05 ` Vladimir 'phcoder' Serbinenko
2009-08-24 18:38 ` Isaac Dupree
2009-08-24 18:49 ` Vladimir 'phcoder' Serbinenko
2009-08-24 20:14 ` Isaac Dupree
2009-08-24 18:52 ` Vladimir 'phcoder' Serbinenko
2009-08-24 18:57 ` Felix Zielcke
2009-10-31 12:11 ` 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.