-*- 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 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. * 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 (should be "netboot" with NUL-terminated). */ char identifier[14]; /* some pointers to callback functions. */ unsigned long init_func; unsigned long fini_func; unsigned long mount_func; unsinged long read_func; unsinged long dir_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 mount_func (const struct multiboot_info *mbi); grub_error_t dir_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 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.