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