1*8044SWilliam.Kucharski@Sun.COMThis is grub.info, produced by makeinfo version 4.0 from grub.texi. 2*8044SWilliam.Kucharski@Sun.COM 3*8044SWilliam.Kucharski@Sun.COMINFO-DIR-SECTION Kernel 4*8044SWilliam.Kucharski@Sun.COMSTART-INFO-DIR-ENTRY 5*8044SWilliam.Kucharski@Sun.COM* GRUB: (grub). The GRand Unified Bootloader 6*8044SWilliam.Kucharski@Sun.COM* grub-install: (grub)Invoking grub-install. Install GRUB on your drive 7*8044SWilliam.Kucharski@Sun.COM* grub-md5-crypt: (grub)Invoking grub-md5-crypt. Encrypt a password 8*8044SWilliam.Kucharski@Sun.COM in MD5 format 9*8044SWilliam.Kucharski@Sun.COM* grub-terminfo: (grub)Invoking grub-terminfo. Generate a terminfo 10*8044SWilliam.Kucharski@Sun.COM command from a 11*8044SWilliam.Kucharski@Sun.COM terminfo name 12*8044SWilliam.Kucharski@Sun.COM* grub-set-default: (grub)Invoking grub-set-default. Set a default boot 13*8044SWilliam.Kucharski@Sun.COM entry 14*8044SWilliam.Kucharski@Sun.COM* mbchk: (grub)Invoking mbchk. Check for the format of a Multiboot kernel 15*8044SWilliam.Kucharski@Sun.COMEND-INFO-DIR-ENTRY 16*8044SWilliam.Kucharski@Sun.COM 17*8044SWilliam.Kucharski@Sun.COM Copyright (C) 1999,2000,2001,2002,2004 Free Software Foundation, Inc. 18*8044SWilliam.Kucharski@Sun.COM 19*8044SWilliam.Kucharski@Sun.COM Permission is granted to make and distribute verbatim copies of this 20*8044SWilliam.Kucharski@Sun.COMmanual provided the copyright notice and this permission notice are 21*8044SWilliam.Kucharski@Sun.COMpreserved on all copies. 22*8044SWilliam.Kucharski@Sun.COM 23*8044SWilliam.Kucharski@Sun.COM Permission is granted to copy and distribute modified versions of 24*8044SWilliam.Kucharski@Sun.COMthis manual under the conditions for verbatim copying, provided also 25*8044SWilliam.Kucharski@Sun.COMthat the entire resulting derived work is distributed under the terms 26*8044SWilliam.Kucharski@Sun.COMof a permission notice identical to this one. 27*8044SWilliam.Kucharski@Sun.COM 28*8044SWilliam.Kucharski@Sun.COM Permission is granted to copy and distribute translations of this 29*8044SWilliam.Kucharski@Sun.COMmanual into another language, under the above conditions for modified 30*8044SWilliam.Kucharski@Sun.COMversions. 31*8044SWilliam.Kucharski@Sun.COM 32*8044SWilliam.Kucharski@Sun.COM 33*8044SWilliam.Kucharski@Sun.COMFile: grub.info, Node: Bootstrap tricks, Next: I/O ports detection, Prev: Command interface, Up: Internals 34*8044SWilliam.Kucharski@Sun.COM 35*8044SWilliam.Kucharski@Sun.COMThe bootstrap mechanism used in GRUB 36*8044SWilliam.Kucharski@Sun.COM==================================== 37*8044SWilliam.Kucharski@Sun.COM 38*8044SWilliam.Kucharski@Sun.COM The disk space can be used in a boot loader is very restricted 39*8044SWilliam.Kucharski@Sun.COMbecause a MBR (*note MBR::) is only 512 bytes but it also contains a 40*8044SWilliam.Kucharski@Sun.COMpartition table (*note Partition table::) and a BPB. So the question is 41*8044SWilliam.Kucharski@Sun.COMhow to make a boot loader code enough small to be fit in a MBR. 42*8044SWilliam.Kucharski@Sun.COM 43*8044SWilliam.Kucharski@Sun.COM However, GRUB is a very large program, so we break GRUB into 2 (or 3) 44*8044SWilliam.Kucharski@Sun.COMdistinct components, "Stage 1" and "Stage 2" (and optionally "Stage 45*8044SWilliam.Kucharski@Sun.COM1.5"). *Note Memory map::, for more information. 46*8044SWilliam.Kucharski@Sun.COM 47*8044SWilliam.Kucharski@Sun.COM We embed Stage 1 in a MBR or in the boot sector of a partition, and 48*8044SWilliam.Kucharski@Sun.COMplace Stage 2 in a filesystem. The optional Stage 1.5 can be installed 49*8044SWilliam.Kucharski@Sun.COMin a filesystem, in the "boot loader" area in a FFS or a ReiserFS, and 50*8044SWilliam.Kucharski@Sun.COMin the sectors right after a MBR, because Stage 1.5 is enough small and 51*8044SWilliam.Kucharski@Sun.COMthe sectors right after a MBR is normally an unused region. The size of 52*8044SWilliam.Kucharski@Sun.COMthis region is the number of sectors per head minus 1. 53*8044SWilliam.Kucharski@Sun.COM 54*8044SWilliam.Kucharski@Sun.COM Thus, all Stage1 must do is just load Stage2 or Stage1.5. But even if 55*8044SWilliam.Kucharski@Sun.COMStage 1 needs not to support the user interface or the filesystem 56*8044SWilliam.Kucharski@Sun.COMinterface, it is impossible to make Stage 1 less than 400 bytes, because 57*8044SWilliam.Kucharski@Sun.COMGRUB should support both the CHS mode and the LBA mode (*note Low-level 58*8044SWilliam.Kucharski@Sun.COMdisk I/O::). 59*8044SWilliam.Kucharski@Sun.COM 60*8044SWilliam.Kucharski@Sun.COM The solution used by GRUB is that Stage 1 loads only the first 61*8044SWilliam.Kucharski@Sun.COMsector of Stage 2 (or Stage 1.5) and Stage 2 itself loads the rest. The 62*8044SWilliam.Kucharski@Sun.COMflow of Stage 1 is: 63*8044SWilliam.Kucharski@Sun.COM 64*8044SWilliam.Kucharski@Sun.COM 1. Initialize the system briefly. 65*8044SWilliam.Kucharski@Sun.COM 66*8044SWilliam.Kucharski@Sun.COM 2. Detect the geometry and the accessing mode of the "loading drive". 67*8044SWilliam.Kucharski@Sun.COM 68*8044SWilliam.Kucharski@Sun.COM 3. Load the first sector of Stage 2. 69*8044SWilliam.Kucharski@Sun.COM 70*8044SWilliam.Kucharski@Sun.COM 4. Jump to the starting address of the Stage 2. 71*8044SWilliam.Kucharski@Sun.COM 72*8044SWilliam.Kucharski@Sun.COM The flow of Stage 2 (and Stage 1.5) is: 73*8044SWilliam.Kucharski@Sun.COM 74*8044SWilliam.Kucharski@Sun.COM 1. Load the rest of itself to the real starting address, that is, the 75*8044SWilliam.Kucharski@Sun.COM starting address plus 512 bytes. The block lists are stored in the 76*8044SWilliam.Kucharski@Sun.COM last part of the first sector. 77*8044SWilliam.Kucharski@Sun.COM 78*8044SWilliam.Kucharski@Sun.COM 2. Long jump to the real starting address. 79*8044SWilliam.Kucharski@Sun.COM 80*8044SWilliam.Kucharski@Sun.COM Note that Stage 2 (or Stage 1.5) does not probe the geometry or the 81*8044SWilliam.Kucharski@Sun.COMaccessing mode of the "loading drive", since Stage 1 has already probed 82*8044SWilliam.Kucharski@Sun.COMthem. 83*8044SWilliam.Kucharski@Sun.COM 84*8044SWilliam.Kucharski@Sun.COM 85*8044SWilliam.Kucharski@Sun.COMFile: grub.info, Node: I/O ports detection, Next: Memory detection, Prev: Bootstrap tricks, Up: Internals 86*8044SWilliam.Kucharski@Sun.COM 87*8044SWilliam.Kucharski@Sun.COMHow to probe I/O ports used by INT 13H 88*8044SWilliam.Kucharski@Sun.COM====================================== 89*8044SWilliam.Kucharski@Sun.COM 90*8044SWilliam.Kucharski@Sun.COM FIXME: I will write this chapter after implementing the new 91*8044SWilliam.Kucharski@Sun.COMtechnique. 92*8044SWilliam.Kucharski@Sun.COM 93*8044SWilliam.Kucharski@Sun.COM 94*8044SWilliam.Kucharski@Sun.COMFile: grub.info, Node: Memory detection, Next: Low-level disk I/O, Prev: I/O ports detection, Up: Internals 95*8044SWilliam.Kucharski@Sun.COM 96*8044SWilliam.Kucharski@Sun.COMHow to detect all installed RAM 97*8044SWilliam.Kucharski@Sun.COM=============================== 98*8044SWilliam.Kucharski@Sun.COM 99*8044SWilliam.Kucharski@Sun.COM FIXME: I doubt if Erich didn't write this chapter only himself 100*8044SWilliam.Kucharski@Sun.COMwholly, so I will rewrite this chapter. 101*8044SWilliam.Kucharski@Sun.COM 102*8044SWilliam.Kucharski@Sun.COM 103*8044SWilliam.Kucharski@Sun.COMFile: grub.info, Node: Low-level disk I/O, Next: MBR, Prev: Memory detection, Up: Internals 104*8044SWilliam.Kucharski@Sun.COM 105*8044SWilliam.Kucharski@Sun.COMINT 13H disk I/O interrupts 106*8044SWilliam.Kucharski@Sun.COM=========================== 107*8044SWilliam.Kucharski@Sun.COM 108*8044SWilliam.Kucharski@Sun.COM FIXME: I'm not sure where some part of the original chapter is 109*8044SWilliam.Kucharski@Sun.COMderived, so I will rewrite this chapter. 110*8044SWilliam.Kucharski@Sun.COM 111*8044SWilliam.Kucharski@Sun.COM 112*8044SWilliam.Kucharski@Sun.COMFile: grub.info, Node: MBR, Next: Partition table, Prev: Low-level disk I/O, Up: Internals 113*8044SWilliam.Kucharski@Sun.COM 114*8044SWilliam.Kucharski@Sun.COMThe structure of Master Boot Record 115*8044SWilliam.Kucharski@Sun.COM=================================== 116*8044SWilliam.Kucharski@Sun.COM 117*8044SWilliam.Kucharski@Sun.COM FIXME: Likewise. 118*8044SWilliam.Kucharski@Sun.COM 119*8044SWilliam.Kucharski@Sun.COM 120*8044SWilliam.Kucharski@Sun.COMFile: grub.info, Node: Partition table, Next: Submitting patches, Prev: MBR, Up: Internals 121*8044SWilliam.Kucharski@Sun.COM 122*8044SWilliam.Kucharski@Sun.COMThe format of partition tables 123*8044SWilliam.Kucharski@Sun.COM============================== 124*8044SWilliam.Kucharski@Sun.COM 125*8044SWilliam.Kucharski@Sun.COM FIXME: Probably the original chapter is derived from "How It Works", 126*8044SWilliam.Kucharski@Sun.COMso I will rewrite this chapter. 127*8044SWilliam.Kucharski@Sun.COM 128*8044SWilliam.Kucharski@Sun.COM 129*8044SWilliam.Kucharski@Sun.COMFile: grub.info, Node: Submitting patches, Prev: Partition table, Up: Internals 130*8044SWilliam.Kucharski@Sun.COM 131*8044SWilliam.Kucharski@Sun.COMWhere and how you should send patches 132*8044SWilliam.Kucharski@Sun.COM===================================== 133*8044SWilliam.Kucharski@Sun.COM 134*8044SWilliam.Kucharski@Sun.COM When you write patches for GRUB, please send them to the mailing list 135*8044SWilliam.Kucharski@Sun.COM<bug-grub@gnu.org>. Here is the list of items of which you should take 136*8044SWilliam.Kucharski@Sun.COMcare: 137*8044SWilliam.Kucharski@Sun.COM 138*8044SWilliam.Kucharski@Sun.COM * Please make your patch as small as possible. Generally, it is not 139*8044SWilliam.Kucharski@Sun.COM a good thing to make one big patch which changes many things. 140*8044SWilliam.Kucharski@Sun.COM Instead, segregate features and produce many patches. 141*8044SWilliam.Kucharski@Sun.COM 142*8044SWilliam.Kucharski@Sun.COM * Use as late code as possible, for the original code. The CVS 143*8044SWilliam.Kucharski@Sun.COM repository always has the current version (*note Obtaining and 144*8044SWilliam.Kucharski@Sun.COM Building GRUB::). 145*8044SWilliam.Kucharski@Sun.COM 146*8044SWilliam.Kucharski@Sun.COM * Write ChangeLog entries. *Note Change Logs: (standards)Change 147*8044SWilliam.Kucharski@Sun.COM Logs, if you don't know how to write ChangeLog. 148*8044SWilliam.Kucharski@Sun.COM 149*8044SWilliam.Kucharski@Sun.COM * Make patches in unified diff format. `diff -urN' is appropriate in 150*8044SWilliam.Kucharski@Sun.COM most cases. 151*8044SWilliam.Kucharski@Sun.COM 152*8044SWilliam.Kucharski@Sun.COM * Don't make patches reversely. Reverse patches are difficult to 153*8044SWilliam.Kucharski@Sun.COM read and use. 154*8044SWilliam.Kucharski@Sun.COM 155*8044SWilliam.Kucharski@Sun.COM * Be careful enough of the license term and the copyright. Because 156*8044SWilliam.Kucharski@Sun.COM GRUB is under GNU General Public License, you may not steal code 157*8044SWilliam.Kucharski@Sun.COM from software whose license is incompatible against GPL. And, if 158*8044SWilliam.Kucharski@Sun.COM you copy code written by others, you must not ignore their 159*8044SWilliam.Kucharski@Sun.COM copyrights. Feel free to ask GRUB maintainers, whenever you are 160*8044SWilliam.Kucharski@Sun.COM not sure what you should do. 161*8044SWilliam.Kucharski@Sun.COM 162*8044SWilliam.Kucharski@Sun.COM * If your patch is too large to send in e-mail, put it at somewhere 163*8044SWilliam.Kucharski@Sun.COM we can see. Usually, you shouldn't send e-mail over 20K. 164*8044SWilliam.Kucharski@Sun.COM 165*8044SWilliam.Kucharski@Sun.COM 166*8044SWilliam.Kucharski@Sun.COMFile: grub.info, Node: Index, Prev: Internals, Up: Top 167*8044SWilliam.Kucharski@Sun.COM 168*8044SWilliam.Kucharski@Sun.COMIndex 169*8044SWilliam.Kucharski@Sun.COM***** 170*8044SWilliam.Kucharski@Sun.COM 171*8044SWilliam.Kucharski@Sun.COM* Menu: 172*8044SWilliam.Kucharski@Sun.COM 173*8044SWilliam.Kucharski@Sun.COM* blocklist: blocklist. 174*8044SWilliam.Kucharski@Sun.COM* boot: boot. 175*8044SWilliam.Kucharski@Sun.COM* bootp: bootp. 176*8044SWilliam.Kucharski@Sun.COM* cat: cat. 177*8044SWilliam.Kucharski@Sun.COM* chainloader: chainloader. 178*8044SWilliam.Kucharski@Sun.COM* cmp: cmp. 179*8044SWilliam.Kucharski@Sun.COM* color: color. 180*8044SWilliam.Kucharski@Sun.COM* configfile: configfile. 181*8044SWilliam.Kucharski@Sun.COM* current_drive: Filesystem interface. 182*8044SWilliam.Kucharski@Sun.COM* current_partition: Filesystem interface. 183*8044SWilliam.Kucharski@Sun.COM* current_slice: Filesystem interface. 184*8044SWilliam.Kucharski@Sun.COM* debug: debug. 185*8044SWilliam.Kucharski@Sun.COM* default: default. 186*8044SWilliam.Kucharski@Sun.COM* device: device. 187*8044SWilliam.Kucharski@Sun.COM* devread: Filesystem interface. 188*8044SWilliam.Kucharski@Sun.COM* dhcp: dhcp. 189*8044SWilliam.Kucharski@Sun.COM* disk_read_func: Filesystem interface. 190*8044SWilliam.Kucharski@Sun.COM* displayapm: displayapm. 191*8044SWilliam.Kucharski@Sun.COM* displaymem: displaymem. 192*8044SWilliam.Kucharski@Sun.COM* embed: embed. 193*8044SWilliam.Kucharski@Sun.COM* fallback: fallback. 194*8044SWilliam.Kucharski@Sun.COM* filemax: Filesystem interface. 195*8044SWilliam.Kucharski@Sun.COM* filepos: Filesystem interface. 196*8044SWilliam.Kucharski@Sun.COM* find: find. 197*8044SWilliam.Kucharski@Sun.COM* fstest: fstest. 198*8044SWilliam.Kucharski@Sun.COM* FSYS_BUF: Filesystem interface. 199*8044SWilliam.Kucharski@Sun.COM* geometry: geometry. 200*8044SWilliam.Kucharski@Sun.COM* grub_read: Filesystem interface. 201*8044SWilliam.Kucharski@Sun.COM* halt: halt. 202*8044SWilliam.Kucharski@Sun.COM* help: help. 203*8044SWilliam.Kucharski@Sun.COM* hiddenmenu: hiddenmenu. 204*8044SWilliam.Kucharski@Sun.COM* hide: hide. 205*8044SWilliam.Kucharski@Sun.COM* ifconfig: ifconfig. 206*8044SWilliam.Kucharski@Sun.COM* impsprobe: impsprobe. 207*8044SWilliam.Kucharski@Sun.COM* initrd: initrd. 208*8044SWilliam.Kucharski@Sun.COM* install: install. 209*8044SWilliam.Kucharski@Sun.COM* ioprobe: ioprobe. 210*8044SWilliam.Kucharski@Sun.COM* kernel: kernel. 211*8044SWilliam.Kucharski@Sun.COM* lock: lock. 212*8044SWilliam.Kucharski@Sun.COM* makeactive: makeactive. 213*8044SWilliam.Kucharski@Sun.COM* map: map. 214*8044SWilliam.Kucharski@Sun.COM* md5crypt: md5crypt. 215*8044SWilliam.Kucharski@Sun.COM* module: module. 216*8044SWilliam.Kucharski@Sun.COM* modulenounzip: modulenounzip. 217*8044SWilliam.Kucharski@Sun.COM* pager: pager. 218*8044SWilliam.Kucharski@Sun.COM* part_length: Filesystem interface. 219*8044SWilliam.Kucharski@Sun.COM* part_start: Filesystem interface. 220*8044SWilliam.Kucharski@Sun.COM* partnew: partnew. 221*8044SWilliam.Kucharski@Sun.COM* parttype: parttype. 222*8044SWilliam.Kucharski@Sun.COM* password: password. 223*8044SWilliam.Kucharski@Sun.COM* pause: pause. 224*8044SWilliam.Kucharski@Sun.COM* print_a_completion: Filesystem interface. 225*8044SWilliam.Kucharski@Sun.COM* print_possibilities: Filesystem interface. 226*8044SWilliam.Kucharski@Sun.COM* quit: quit. 227*8044SWilliam.Kucharski@Sun.COM* rarp: rarp. 228*8044SWilliam.Kucharski@Sun.COM* read: read. 229*8044SWilliam.Kucharski@Sun.COM* reboot: reboot. 230*8044SWilliam.Kucharski@Sun.COM* root: root. 231*8044SWilliam.Kucharski@Sun.COM* rootnoverify: rootnoverify. 232*8044SWilliam.Kucharski@Sun.COM* saved_drive: Filesystem interface. 233*8044SWilliam.Kucharski@Sun.COM* saved_partition: Filesystem interface. 234*8044SWilliam.Kucharski@Sun.COM* savedefault: savedefault. 235*8044SWilliam.Kucharski@Sun.COM* serial: serial. 236*8044SWilliam.Kucharski@Sun.COM* setkey: setkey. 237*8044SWilliam.Kucharski@Sun.COM* setup: setup. 238*8044SWilliam.Kucharski@Sun.COM* terminal: terminal. 239*8044SWilliam.Kucharski@Sun.COM* terminfo: terminfo. 240*8044SWilliam.Kucharski@Sun.COM* testload: testload. 241*8044SWilliam.Kucharski@Sun.COM* testvbe: testvbe. 242*8044SWilliam.Kucharski@Sun.COM* tftpserver: tftpserver. 243*8044SWilliam.Kucharski@Sun.COM* timeout: timeout. 244*8044SWilliam.Kucharski@Sun.COM* title: title. 245*8044SWilliam.Kucharski@Sun.COM* unhide: unhide. 246*8044SWilliam.Kucharski@Sun.COM* uppermem: uppermem. 247*8044SWilliam.Kucharski@Sun.COM* vbeprobe: vbeprobe. 248*8044SWilliam.Kucharski@Sun.COM 249*8044SWilliam.Kucharski@Sun.COM 250