|
|
1.1 root 1: This Boot code is different from the original boot code that came with
2: 386BSD in that it uses the BIOS to load the kernel and to provide all i/o
3: services. The advantage ofthis is that the same boot code exactly, can run
4: on any device that is supported by the BIOS. (That's most of them)
5: This is important for the 'generic scsi' project because it means we can
6: write drivers for new scsi adapters without having to develop an new
7: set of boot blocks for each.
8:
9: At this point you should read the first part of README.MACH... come back here
10: when you have done that:
11:
12: In normal operation, when co-existing with other operating systems, the
13: following operations occur:
14:
15: 1/ the BIOS loads the first block of the disk (called the Master Boot Record
16: or MBR) and if it has the correct magic numbers, jumps into it:
17:
18: 2/ The MBR code, looks at the Partition table that is embedded within it,
19: to detirmine which is the partition to boot from. If you are using the os-bs
20: bootblocks (highly recommended) then it will give you a menu to choose from.
21:
22: 3/ The MBR will load the first record of the selected partition and
23: if it has (the same) magic numbers, jumps into it. In 386bsd this is the
24: first stage boot, (or boot1) it is represented in /usr/mdec by
25: wdboot, asboot and sdboot. If the disk has been set up without DOS partitioning
26: then this block will be at block zero, and will have been loaded directly by
27: the BIOS.
28:
29: 4/ Boot1 will look at block0 (which might be itself if there are no DOS
30: partitions) and will find the 386bsd partition, and using the information
31: regarding the start position of that partition, will load the next 13 sectors
32: or so, to around 90000 (640k - 64k). and will jump into it at the appropriate
33: entry point. Since boot1 and boot2 were compiled together as one file
34: and then split later, boot1 knows the exact position within boot2 of the
35: entry point.
36:
37: Boot 1 also contains a compiled in DOS partition table
38: (in case it is at block 0), which contains a 386bsd partition starting
39: at 0. This ensures that the same code can work whether or not
40: boot1 is at block 0.
41:
42: 5/ Boot2 asks the user for a boot device, partition and filename, and then
43: loads the MBR of the selected device. This may or may not be the device
44: which was originally used to boot the first MBR. The partition table
45: of the new MBR is searched for a 386bsd partition, and if one is found,
46: that is then in turn searched for the disklabel. This could all be on the
47: second disk at this point, if the user selected it.
48:
49: 6/On finding the disklabel, boot2 can find the correct unix partition
50: within the 386bsd partition, and using cutdown filesystem code,
51: look for the file to boot (e.g. 386bsd).
52:
53: 7/ Boot2 loads this file starting at the location specified by the a.out header,
54: (see later) and leaps into it at the location specified in he header.
55:
56: if the file does not exist or cannot be loaded, boot2 goes back to step 5.
57:
58: 386bsd is now running and will hopefully start vm etc. and get to multi-user
59: mode.
60:
61: ##########################################################################
62: During all these steps, all i/o is performed using the BIOS. This has a number
63: of side effects:
64:
65: 1/ Since BIOS disk calls are specified in terms of cylinder,head and sector,
66: and the BIOS read the disk information from either the CMOS or from some other
67: location which is un-available to us, we must use the cyl,head,sec information
68: that is given in the MBR, rather than the start address in the MBR, because
69: we cannot guarentee that we can corectly calculate C,H,S from the start address.
70:
71: Therefore, the C,H,S information in the MBR must be as correct for this boot
72: to work as it would be for DOS to boot. For example, adaptec BIOS routines
73: assume a layout of 64 heads and 32 sectors giving 1MB per ficticious cylinder.
74: You must use these figures to calculate the correct values. Luckily, the DOS
75: fdisk program will do all this for you if you tell it to give you a DOS
76: partition, and you can change it to a 386BSD partition later. If you use
77: no DOS partitioning, then the compiled in table in Boot1 will do just fine.
78:
79: If you want to do it by hand remember that BIOS counts sectors starting at 1.
80: (cylinders and heads start at 0 (??))
81:
82: 2/ you cannot overwrite the bottom 4k of ram until you have finished ALL
83: bios calls, as BIOS uses this area as scratch memory.
84:
85: 3/ Since BIOS runs in REAL mode, and Boot2 runs in protected mode,
86: Boot 2 switches back to real mode just before each BIOS call and then
87: back to protected mode on each return. Touch this at your peril.!
88:
89: #########################################################################
90: In answering the prompt from Boot2:
91: you can,
92: 1/ leave it alone.. it will boot the indicated file from the first
93: partition of the first drive seen by the BIOS (C:)
94:
95: 2/ enter only "-s" to boot the default to single user mode
96:
97: 3/ enter only a filename (optionally with -s) to boot that kernel,
98:
99: 4/ enter a whole line of the form shown in the prompt. This allows you to
100: boot some other partition, possibly on the second drive, as root.
101:
102:
103: ##########################################################################
104: In the case you have two drives the same type (both scsi or bith IDE/ESDI),
105: wd(0,a)xxx
106: will boot xxx from drive 0, a partition.
107: wd(1,a)xxx
108: will boot xxx from drive 1, a partition.
109:
110: similarly for sd.
111:
112: if you have one wd drive and one scsi drive, then you MUST
113: use device 'hd'
114:
115: otherwise the following will happen:
116:
117: with wd0 and sd0, you specify sd1 or wd1 to indicate the 2nd drive.
118: it boots the kernel correctly, then tells the kernel to use sd1 as root.
119: you however may not have an sd1, and problems arise.
120:
121: hd is special in that the kernel is always told to use unit 0,
122: The correct TYPE of device will be specified too, so the kernel
123: will be told either sd0 or wd0.
124:
125: Whether sd or wd is specified to the kernel is read from the disklabel,
126: so ensure that all SCSI disks have type SCSI in their disklabel or the
127: boot code will assume they are ESDI or IDE. (Remember, because it is
128: working through the BIOS it has ho idea what kind of disk it is.
129:
130: ##########################################################################
131: Installing:
132: The makefile supplied has a target install which will create the
133: files wdboot,bootwd ,sdboot and bootsd in /usr/mdec.
134: BEWARE these will overwrite the existing wdboot and bootwd. (so back
135: them up)
136:
137: there are also targets wd and sd which wil only do one of them
138:
139: The commented out targets wd0 and sd0 are examples of how to
140: load the new bootblocks, however,make sure you change the
141: device type and label to suit your drive if you uncomment them.
142: (see 'man disklabel')
143:
144: If you already have made partitions using the old bootblocks
145: these should install painlessly.
146:
147: Before you do this ensure you have a booting floppy with correct
148: disktab and bootblock files on it so that if it doesn't work, you can
149: re-disklabel from the floppy.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.