kernel NFS - Fix another deadlock in the readdirplus code
[dragonfly.git] / usr.sbin / config / SMM.doc / 3.t
blobe0b62348eec5ece257b76d86ef6f18cf1e9da85a
1 .\" Copyright (c) 1983, 1993
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. All advertising materials mentioning features or use of this software
13 .\"    must display the following acknowledgement:
14 .\"     This product includes software developed by the University of
15 .\"     California, Berkeley and its contributors.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\"     @(#)3.t 8.1 (Berkeley) 6/8/93
33 .\"
34 .\".ds RH "System Building Process
35 .ne 2i
36 .NH
37 SYSTEM BUILDING PROCESS
38 .PP
39 In this section we consider the steps necessary to build a bootable system
40 image.  We assume the system source is located in the ``/sys'' directory
41 and that, initially, the system is being configured from source code.
42 .PP
43 Under normal circumstances there are 5 steps in building a system.
44 .IP 1) 3
45 Create a configuration file for the system.
46 .IP 2) 3
47 Make a directory for the system to be constructed in.
48 .IP 3) 3
49 Run
50 .I config
51 on the configuration file to generate the files required
52 to compile and load the system image.
53 .IP 4)
54 Construct the source code interdependency rules for the
55 configured system with
56 .I make depend
57 using
58 .IR make (1).
59 .IP 5)
60 Compile and load the system with 
61 .IR make .
62 .PP
63 Steps 1 and 2 are usually done only once.  When a system configuration
64 changes it usually suffices to just run
65 .I config
66 on the modified configuration file, rebuild the source code dependencies,
67 and remake the system.  Sometimes,
68 however, configuration dependencies may not be noticed in which case
69 it is necessary to clean out the relocatable object files saved
70 in the system's directory; this will be discussed later.
71 .NH 2
72 Creating a configuration file
73 .PP
74 Configuration files normally reside in the directory ``/sys/conf''.
75 A configuration file is most easily constructed by copying an
76 existing configuration file and modifying it.  The 4.4BSD distribution
77 contains a number of configuration files for machines at Berkeley;
78 one may be suitable or, in worst case, a copy
79 of the generic configuration file may be edited.
80 .PP
81 The configuration file must have the same name as the directory in
82 which the configured system is to be built.  
83 Further,
84 .I config
85 assumes this directory is located in the parent directory of
86 the directory in which it
87 is run.  For example, the generic
88 system has a configuration file ``/sys/conf/GENERIC'' and an accompanying
89 directory named ``/sys/GENERIC''.
90 Although it is not required that the system sources and configuration
91 files reside in ``/sys,'' the configuration and compilation procedure
92 depends on the relative locations of directories within that hierarchy,
93 as most of the system code and the files created by
94 .I config
95 use pathnames of the form ``../''.
96 If the system files are not located in ``/sys,''
97 it is desirable to make a symbolic link there for use in installation
98 of other parts of the system that share files with the kernel.
99 .PP
100 When building the configuration file, be sure to include the items
101 described in section 2.  In particular, the machine type,
102 cpu type, timezone, system identifier, maximum users, and root device
103 must be specified.  The specification of the hardware present may take
104 a bit of work; particularly if your hardware is configured at non-standard
105 places (e.g. device registers located at funny places or devices not
106 supported by the system).  Section 4 of this document
107 gives a detailed description of the configuration file syntax,
108 section 5 explains some sample configuration files, and
109 section 6 discusses how to add new devices to
110 the system.  If the devices to be configured are not already
111 described in one of the existing configuration files you should check
112 the manual pages in section 4 of the UNIX Programmers Manual.  For each
113 supported device, the manual page synopsis entry gives a
114 sample configuration line.
116 Once the configuration file is complete, run it through
117 .I config
118 and look for any errors.  Never try and use a system which
119 .I config
120 has complained about; the results are unpredictable.
121 For the most part,
122 .IR config 's
123 error diagnostics are self explanatory.  It may be the case that
124 the line numbers given with the error messages are off by one.
126 A successful run of
127 .I config
128 on your configuration file will generate a number of files in
129 the configuration directory.  These files are:
130 .IP \(bu 3
131 A file to be used by \fImake\fP\|(1)
132 in compiling and loading the system,
133 .IR Makefile .
134 .IP \(bu 3
135 One file for each possible system image for this machine,
136 .IR swapxxx.c ,
137 where
138 .I xxx
139 is the name of the system image,
140 which describes where swapping, the root file system, and other
141 miscellaneous system devices are located.
142 .IP \(bu 3
143 A collection of header files, one per possible device the
144 system supports, which define the hardware configured.
145 .IP \(bu 3
146 A file containing the I/O configuration tables used by the system
147 during its 
148 .I autoconfiguration
149 phase,
150 .IR ioconf.c .
151 .IP \(bu 3
152 An assembly language file of interrupt vectors which
153 connect interrupts from the machine's external buses to the main
154 system path for handling interrupts,
155 and a file that contains counters and names for the interrupt vectors.
157 Unless you have reason to doubt 
158 .IR config ,
159 or are curious how the system's autoconfiguration scheme
160 works, you should never have to look at any of these files.
161 .NH 2
162 Constructing source code dependencies
164 When 
165 .I config
166 is done generating the files needed to compile and link your system it
167 will terminate with a message of the form ``Don't forget to run make depend''.
168 This is a reminder that you should change over to the configuration
169 directory for the system just configured and type ``make depend''
170 to build the rules used by 
171 .I make
172 to recognize interdependencies in the system source code.
173 This will insure that any changes to a piece of the system
174 source code will result in the proper modules being recompiled
175 the next time
176 .I make
177 is run.
179 This step is particularly important if your site makes changes
180 to the system include files.  The rules generated specify which source code
181 files are dependent on which include files.  Without these rules,
182 .I make
183 will not recognize when it must rebuild modules
184 due to the modification of a system header file.
185 The dependency rules are generated by a pass of the C preprocessor
186 and reflect the global system options.
187 This step must be repeated when the configuration file is changed
189 .I config
190 is used to regenerate the system makefile.
191 .NH 2
192 Building the system
194 The makefile constructed by
195 .I config
196 should allow a new system to be rebuilt by simply typing ``make image-name''.
197 For example, if you have named your bootable system image ``kernel'',
198 then ``make kernel''
199 will generate a bootable image named ``kernel''.  Alternate system image names
200 are used when the root file system location and/or swapping configuration
201 is done in more than one way.  The makefile which
202 .I config
203 creates has entry points for each system image defined in
204 the configuration file.
205 Thus, if you have configured ``kernel'' to be a system with the root file
206 system on an ``hp'' device and ``hkkernel'' to be a system with the root
207 file system on an ``hk'' device, then ``make kernel hkkernel'' will generate
208 binary images for each.
209 As the system will generally use the disk from which it is loaded
210 as the root filesystem, separate system images are only required
211 to support different swap configurations.
213 Note that the name of a bootable image is different from the system
214 identifier.  All bootable images are configured for the same system;
215 only the information about the root file system and paging devices differ.
216 (This is described in more detail in section 4.)
218 The last step in the system building process is to rearrange certain commonly
219 used symbols in the symbol table of the system image;  the makefile
220 generated by 
221 .I config
222 does this automatically for you.
223 This is advantageous for programs such as
224 \fInetstat\fP\|(1) and \fIvmstat\fP\|(1),
225 which run much faster when the symbols they need are located at
226 the front of the symbol table.  
227 Remember also that many programs expect
228 the currently executing system to be named ``/kernel''.  If you install
229 a new system and name it something other than ``/kernel'', many programs
230 are likely to give strange results.
231 .NH 2
232 Sharing object modules
234 If you have many systems which are all built on a single machine
235 there are at least two approaches to saving time in building system
236 images.  The best way is to have a single system image which is run on
237 all machines.  This is attractive since it minimizes disk space used
238 and time required to rebuild systems after making changes.  However,
239 it is often the case that one or more systems will require a separately
240 configured system image.  This may be due to limited memory (building
241 a system with many unused device drivers can be expensive), or to
242 configuration requirements (one machine may be a development machine
243 where disk quotas are not needed, while another is a production machine
244 where they are), etc.  In these cases it is possible
245 for common systems to share relocatable object modules which are not
246 configuration dependent; most of the modules in the directory ``/sys/sys''
247 are of this sort.
249 To share object modules, a generic system should be built.  Then, for
250 each system configure the system as before, but before recompiling and
251 linking the system, type ``make links'' in the system compilation directory.
252 This will cause the system
253 to be searched for source modules which are safe to share between systems
254 and generate symbolic links in the current directory to the appropriate
255 object modules in the directory ``../GENERIC''.  A shell script,
256 ``makelinks'' is generated with this request and may be checked for
257 correctness.  The file ``/sys/conf/defines'' contains a list of symbols
258 which we believe are safe to ignore when checking the source code
259 for modules which may be shared.  Note that this list includes the definitions
260 used to conditionally compile in the virtual memory tracing facilities, and
261 the trace point support used only rarely (even at Berkeley). 
262 It may be necessary
263 to modify this file to reflect local needs.  Note further that
264 interdependencies which are not directly visible
265 in the source code are not caught.  This means that if you place
266 per-system dependencies in an include file, they will not be recognized
267 and the shared code may be selected in an unexpected fashion.
268 .NH 2
269 Building profiled systems
271 It is simple to configure a system which will automatically
272 collect profiling information as it operates.  The profiling data
273 may be collected with \fIkgmon\fP\|(8) and processed with
274 \fIgprof\fP\|(1)
275 to obtain information regarding the system's operation.  Profiled
276 systems maintain histograms of the program counter as well as the
277 number of invocations of each routine.  The \fIgprof\fP
278 command will also generate a dynamic call graph of the executing
279 system and propagate time spent in each routine along the arcs
280 of the call graph (consult the \fIgprof\fP documentation for elaboration).
281 The program counter sampling can be driven by the system clock, or
282 if you have an alternate real time clock, this can be used.  The 
283 latter is highly recommended, as use of the system clock will result
284 in statistical anomalies, and time spent in the clock routine will
285 not be accurately attributed.
287 To configure a profiled system, the
288 .B \-p
289 option should be supplied to \fIconfig\fP.
290 A profiled system is about 5-10% larger in its text space due to
291 the calls to count the subroutine invocations.  When the system
292 executes, the profiling data is stored in a buffer which is 1.2
293 times the size of the text space.  The overhead for running a
294 profiled system varies; under normal load we see anywhere from 5-25%
295 of the system time spent in the profiling code.
297 Note that systems configured for profiling should not be shared as
298 described above unless all the other shared systems are also to be
299 profiled.