blob: 9ccdd221b99a45ef69532bcc58e9beefd8a2ee13 [file] [log] [blame] [raw]
-*- Mode: Outline -*-
Before working on anything in this file, it's very important that you
make contact with the core GRUB developers. Things herein might be
slightly out of date or otherwise not easy to understand at first
glance. So write to <bug-grub@gnu.org> first.
Priorities:
Reported bugs generally have top priority.
Non-reported and non-encountered bugs (things we know don't work,
but don't really impede things) have lower priority.
Things in this file are ranked with one to three !; the more, the
higher priority.
* Port the script ``grub-install'' to FreeBSD, NetBSD and OpenBSD. At
least you will have to modify the function `convert' so that it can
translate a native device name into the corresponding GRUB drive
representation.
* Add configuration inclusion support by adding a command "include".
* Make symbolic links work for BSD FFS.
* Add indirect block support to the BSD FFS filesystem code, so files
larger than 16MB can be read.
* Fix-up FreeBSD, NetBSD (and OpenBSD ?) command-line boot
parameters.
* Support embedding a Stage 1.5 in the "bootloader" area of a FFS
partition.
* Support embedding a Stage 1.5 in the EXT2_BOOT_LOADER_INO of an ext2fs
partition, so that it won't be accidentally erased or modified by
the kernel.
* Complete the netboot support. !!!
This is the proposed interface between the netboot module and the core
system:
- The module contains a header like this:
struct netboot_module_header
{
/* The same as the Multiboot header, but has a different magic. */
struct multiboot_header mb_header;
/* The version number to avoid incompatibilities. */
unsigned short compat_version;
/* The identifier. */
unsigned short identifier;
/* some pointers to callback functions. */
unsigned long init_func;
unsigned long fini_func;
unsigned long open_func;
unsinged long read_func;
unsinged long seek_func;
unsinged long close_func;
/* The address of the message buffer. The module should not print
anything on the screen directly. */
unsinged long msg_addr;
/* The maximum size of the message buffer (perhaps should be less
than 80*24, because of the screen size). */
unsinged long msg_size;
}
- When the core system loads the module, check for the header
structure and store the image in the specified memory address (in
the ELF header or in MB_HEADER). If successful, call INIT_FUNC.
- INIT_FUNC should initialize the module and return the required
memory space. The prototype is:
grub_error_t init_func (const struct multiboot_info *mbi,
unsigned long *mem_start,
unsigned long *mem_end);
If the module does not need any extra memory space, then set
*MEM_START to _START and *MEM_END to _END. MBI->CMDLINE has the
command-line argument specified (probably netmask=... or something).
FIXME: Should the module return most of the information dynamically
from INIT_FUNC, instead of the module header?
- When the core system unloads the module, call FINI_FUNC to restore
the resources cleanly.
- The prototype of FINI_FUNC is:
grub_error_t fini_func (const struct multiboot_info *mbi);
- The rest of the callback functions are equivalent to the filesystem
callbacks. Their prototypes are:
grub_error_t open_func (const struct multiboot_info *mbi,
const char *filename);
grub_error_t read_func (const struct multiboot_info *mbi,
char *buffer, int len);
grub_error_t seek_func (const struct multiboot_info *mbi,
int offset);
grub_error_t close_func (const struct multiboot_info *mbi);
FIXME: How to add decompression support?
- The core system will print the string MSG_ADDR after each call is
finished.
- Each callback function will be run in the exactly same condition as
when a Multiboot kernel starts up, and it MUST restore the condition
before it returns (i.e. PIC or IDT).
* Add automatic configuration support.
* Add bunzip2 support.
* Define the module system.
* Add ISA PnP support.
* Fix the completion so that it works for BSD partitions as well. !
* Add BSD syntax support, using results of ioprobe to map drives. !
(0x1f0-0x1f7 = primary IDE, 0x170-0x176 = secondary,
0x1e8-0x1ef = tertiary, 0x168-0x16f = quaternary).
* Add more filesystems support (XFS, NTFS, etc.)
* Add remote console support (serial, parallel and net). !!
* Add RAID support.
? Add a partition naming syntax that means ``the first partition of
this type''. We need this for clean Hurd install floppies.
* Add a real scripting language, possibly retaining backward
compatibility so that old config files can be used.
* Add internationalization support, emulating gettext as much as is
feasible.
? Add command for modifying partition types.
* Add CDROM-chainloading support. It would be enough to support only
BIOSes which have bootable-CDROM support (so you may use the "Bootable
CDROM" BIOS calls). It is not trivial to support BIOSes without the
capability to boot CDROM.