Charles B. Haley
Dennis. M. Ritchie
This document discusses how to
assemble or compile various parts of the
UNIX system software.
This may be necessary because
a command or library is accidentally
deleted or otherwise
destroyed;
also, it may be desirable to install a modified
version of some command or library routine.
A few commands depend
to some degree on the current configuration
of the system;
thus in any new system modifications to some commands
are advisable.
Most of the likely modifications
relate to the standard disk devices contained
in the system.
For example, the df(1) (`disk free')
command has built into it the names of
the standardly present disk storage drives
(e.g. `/dev/rf0', `/dev/rp0').
Df(1) takes an argument to indicate which
disk to examine, but it is convenient
if its default argument is adjusted to
reflect the ordinarily present devices.
The companion document `Setting up UNIX'
discusses which commands are likely to require
changes.
このドキュメントは、
UNIXシステムソフトウェアの様々な部分を
組み立てるかコンパイルする方法について議論します。
コマンドか図書館が偶然に削除されるか
そうでなければ破壊されるので、これは必要かもしれません;
さらに、あるコマンドあるいはライブラリー・ルーチンの修正版を
インストールすることは望ましいかもしれません。
少数のコマンドが依存します。システムの現在の配置上のある程度に;
いくつかのコマンドへの任意の新システム修正でしたがって、望ましい。
ほとんどの適当な修正は、システムに含まれていた標準のディスク装置に
関係があります。
例えば、df(1) (`disk free')
コマンドは、それへ標準的に現在のディスク記憶ドライブの名前を。
(e.g. `/dev/rf0', `/dev/rp0').
Df(1)は、どのディスクを検討するべきであるか示すために議論をとります。
しかし、そのデフォルト議論が通常現在の装置を反映するために調節される場合、
それは便利です。相手ドキュメント「UNIXの上のセッティング」は、
どのコマンドが変更を要求するか議論します。
The
source files for commands and subroutines reside
in several subdirectories
of the directory /usr/src.
These subdirectories, and a general
description of their contents, are
そのコマンドとサブルーチンのためのソース・ファイルは、
ディレクトリー/usr/srcのいくつかのサブディレクトリに存在します。
これらのサブディレクトリおよびそれらの内容の一般的な記述はそうです。
The regeneration of most commands
is straightforward.
The `cmd' directory will contain either a source file
for the command or a subdirectory containing the set
of files that make up the command.
If it is a single file the command
ほとんどのコマンドの作成は簡単です。
`cmd'ディレクトリには
コマンドのソースファイルか、
コマンドを作成するファイルのセットがある
サブディレクトリがあります。
単一のファイルである場合、
suffices. (Cmd_name is the name of the command you
are playing with.)
The result of the cmake command will be an executable version.
If you type
というコマンドだけで十分です。
(Cmd_name とは対象となるコマンドの名前です)
cmake
コマンドを実行した結果、実行可能なバージョンができるでしょう。
the result
will be copied to /bin
(or perhaps /etc or other places if appropriate).
とタイプした場合、結果は
/bin
(あるいは /etc や他の場所などの適切な場所)
にコピーされるでしょう。
If the source files are in a subdirectory there will be a `makefile'
(see make(1)) to control the regeneration.
After changing to the proper directory (cd(1)) you type one of the following:
ソースファイルがサブディレクトリにある場合、
コマンドの作成をコントロールする
`makefile'
(make(1)を参照)
があるでしょう。
適切なディレクトリー
(cd(1))
に移動した後、
下記のうちのいずれかをタイプします:
Some of the makefiles have other options. Print (cat(1)) the ones you
are interested in to find out.
makefile
のうちのいくつかは他のオプションも持っています。
そのオプションを見つけ出すためには
(cat (1) で)
プリントしてください 。
The assembler consists of two executable files:
/bin/as and /lib/as2.
The first is the 0-th pass:
it reads the source program, converts it to
an intermediate form in a temporary file `/tmp/atm0?',
and estimates the final locations
of symbols.
It also makes two or three other temporary
files which contain the ordinary symbol table,
a table of temporary symbols (like 1:)
and possibly an overflow intermediate file.
The program /lib/as2
acts as an ordinary multiple pass assembler
with input taken from the files produced by /bin/as.
アセンブラーは2冊の実行可能なファイルから成ります:/bin/として、また/lib/as2。1番目は第0-のパスです:それはソース・プログラムを読みます、それをテンポラリファイル中の中間の形式に変換する「/tmp/atm0?「またシンボルの最終位置を評価します。さらに、それは、通常のシンボル・テーブル(一時的シンボル(1:)および恐らくオーバーフローの中間のファイルのような。プログラム/lib/as2は、生産されたファイルから得られた入力を備えた通常の複合のパス・アセンブラーの役割をします/bin/として)のテーブル)を含んでいる2つあるいは3つの他のテンポラリファイルを作ります。
The source files for /bin/as
are named `/usr/src/cmd/as/as1?.s'
(there are 9 of them);
/lib/as2 is produced
from the source files
`/usr/src/cmd/as/as2?.s';
they likewise are 9 in number.
Considerable care should be exercised
in replacing either component of the
assembler.
Remember that if the assembler is lost,
the only recourse is to replace it from some backup storage;
a broken assembler cannot assemble itself.
ソース・ファイル、のために/bin/指定されるとして「/usr/src/cmd//as1として?.'(それらのうちの9つがあります);/lib/as2が生産されます。ソース・ファイルから「/usr/src/cmd//as2として?.の;それらは、同様に数の中に9です。相当な注意はアセンブラーの一方のコンポーネントの交換に練習させられるべきです。アセンブラーが失われる場合ただ一つの頼みがあるバックアップ記憶装置からそれを交換することであることを覚えておいてください;故障したアセンブラーは集まることができません。
The C compiler consists of
seven routines:
`/bin/cc',
which calls the phases of the compiler proper,
the compiler control line expander `/lib/cpp',
the assembler (`as'), and the loader (`ld').
The phases of the C compiler are
`/lib/c0', which is the first phase of the compiler;
`/lib/c1', which is the second phase of the compiler;
and `/lib/c2', which is the optional
third phase optimizer.
The loss of the C compiler is as serious
as that of the assembler.
Cコンパイラーは7つのルーチンから成ります:「/ビン/cc」、どれが適切なコンパイラー、コンパイラー・コントロール・ライン・エキスパンダー「/解放/cpp」、アセンブラー(「として」)およびローダーの相を呼びますか。(「ld」)Cコンパイラーの相は「/解放/c0」(それはコンパイラーの第1段階である)です;「/解放/c1」(それはコンパイラーの第2段階である);また「/解放/c2。」(それはオプションの第3の過程オプティマイザーである)。Cコンパイラーの損失は、アセンブラーのそれと同じくらい重大です。
The source for /bin/cc
resides in `/usr/src/cmd/cc.c'.
Its loss alone (or that of c2) is not fatal.
If needed,
prog.c can be compiled by
/bin/ccのための出所「/usr/src/cmd/cc.c」の中に駐在します。そのロスは、単独で(あるいはc2のそれ)致命的ではありません。もし必要ならば、prog.cはそばにコンパイルすることができます。
The source for the compiler proper is in the
directory /usr/src/cmd/c.
The first phase (/lib/c0)
is generated from the files c00.c, ..., c05.c,
which must be compiled by the C compiler.
There is also c0.h, a header file
included
by the C programs of the first phase.
To make a new /lib/c0 use
適切なコンパイラーのための出所は、ディレクトリー/usr/src/cmd/cにあります。第1段階(/lib/c0)はファイルc00.cから生成されます、...c05.c(それはCコンパイラーによってコンパイルされなければならない)。さらにc0.h(含まれたヘッダーファイル)があります。C単位のは第1段階にプログラムします。新しい/lib/c0使用を行なうこと
Before installing the new c0, it is prudent to save the old one someplace.
新しいc0をインストールする前に、古いものをどこかへ保存することは思慮深い。
The second phase of C (/lib/c1)
is generated from the source files c10.c, ..., c13.c,
the include-file c1.h, and a set
of object-code tables combined into table.o.
To generate a new second phase use
C(/lib/c1)の第2段階はソース・ファイルc10.cから生成されます、...c13.c、include-ファイルc1.h、およびtable.oへ結合した1セットのオブジェクトコードテーブル。新しい第2段階使用の生成
It is likewise prudent to save c1 before
installing a new version.
In fact in general it is wise to save the
object files for the C compiler so that
if disaster strikes C can be reconstituted
without a working version of the compiler.
新バージョンをインストールする前にc1を保存することは同様に思慮深い。実際、災害が打つ場合、コンパイラーの働くバージョンなしでCを再構成することができるように、Cコンパイラー用にオブジェクト・ファイルを保存することは一般に賢明です。
In a similar manner,
the third phase of the C compiler
(/lib/c2)
is made up from the files
c20.c and c21.c together with c2.h.
Its loss is not critical since it is completely optional.
同様の方法、Cコンパイラーの第3の過程で(/lib/c2)c2.hと一緒にファイルc20.cおよびc21.cから上昇して作られます。それが完全にオプションであるので、そのロスは批判的ではありません。
The set of tables mentioned above
is generated from the file
table.s.
This `.s' file is not in fact assembler source;
it must be converted by use of the
cvopt
program, whose source and object are
located in the C directory.
Normally this is taken care of by make(1). You
might want to look at the makefile to see what it does.
上に言及されたテーブルのセットはファイルtable.sから生成されます。この`.sのファイルは事実アセンブラー出所中ではありません;cvoptの使用はそれを変換しなければなりません。プログラム。(その出所およびオブジェクトはCディレクトリーに位置する)通常は、これは、形(1)によって世話をされます。それが何を行うか確かめるようにメイクファイルを見たいと思うかもしれません。
The source and object programs for UNIX are kept in
four subdirectories of
/usr/sys.
In the subdirectory
h
there are several files ending in `.h';
these are header files which are
picked up (via `#include ...')
as required by each system module.
The subdirectory
dev
consists mostly of the device drivers
together with a few other things.
The subdirectory
sys
is the rest of the system.
There are files of the form LIBx in the directories
sys and dev. These are archives (ar(1)) which contain the
object versions of the routines in the directory.
UNIXのための出所とオブジェクトのプログラムは/usr/sysの4つのサブディレクトリの中で維持されます。サブディレクトリの中でhいくつかのファイルが`.hに終わっています」;これらは各システム・モジュールによって要求されるように拾い上げられる(`#include...'によって)ヘッダーファイルです。サブディレクトリdev他の少数のものと一緒にほとんどデバイス・ドライバから成ります。サブディレクトリsysシステムの残りです。ディレクトリーsysおよびdevに形式LIBxのファイルがあります。これらはディレクトリーにルーチンのオブジェクト・バージョンを含んでいるアーカイブ(ar(1))です。
Subdirectory
conf
contains the files which control
device configuration of the system.
L.s
specifies the
contents of the interrupt vectors;
c.c
contains the tables which relate device numbers
to handler routines.
A third file,
mch.s,
contains all the
machine-language code in the system.
A fourth file,
mch0.s,
is generated by mkconf(1) and contains
flags indicating what sort of tape drive is available
for taking crash dumps.
サブディレクトリconfシステムの装置配置をコントロールするファイルを含んでいます。L.。割り込みベクトルの内容を指定します;c.c取扱い人ルーチンに装置番号を関連づけるテーブルを含んでいます。3番めのファイルおよびmch.s、システムに機械語コードをすべて含んでいます。4番めのファイルおよびmch0.s、mkconf(1)によって生成され、テープ駆動のどの種類が衝突憂鬱をとることに利用可能か示すフラグを含んでいます。
There are two ways to recreate the system. Use
システムを休養させるために2つの方法があります。使用
if the libraries /usr/sys/dev/LIB2 and /usr/sys/sys/LIB1,
and also c.o and l.o,
are correct.
Use
場合、ライブラリー/usr/sys/dev/LIB2および/usr/sys/sys/LIB1、およびさらにc.oおよびl.oは正確です。使用
to recompile everything
and recreate the libraries from scratch.
This is needed, for example, when a header included
in several source files is changed.
See `Setting Up UNIX' for other information about configuration
and such.
すべてを再コンパイルし、図書館を休養させることために、ゼロから。例えば、いくつかのソース・ファイルに含まれたヘッダーが変更される場合、これは必要です。配置とそのようなものに関する他の情報に関しては、「UNIXの上のセッティング」を参照してください。
When the make is
done, the new system is present in the
current directory as `unix'.
It should be tested before destroying the currently
running `/unix', this is best done by doing something like
形がそうである場合終わって、新システムは「unix」としてカレント・ディレクトリの中にあります。それは、現在走る「/unix」を破壊する前にテストされるべきです。これは類似のものをすることにより最も行われます。
If the new system doesn't work, you can still boot `ounix'
and come up (see boot(8)).
When you have satisfied yourself that the new system works,
remove /ounix.
新システムが働かない場合、今までどおり「ounix」をけとばすことができ、近づいて来ることができる(ブーツ(8)を参照)。新システムが働くことを納得した場合、/ounixを削除してください。
To install a new device driver,
compile it and
put it into its library.
The best way to put it into
the library is to use the command
新しいデバイス・ドライバをインストールするためには、それをコンパイルして、その図書館の中にそれを入?黷トください。図書館の中にそれを入れる最良の方法はコマンドを使用することです。
where x is the routine you just compiled.
(All the device drivers distributed with
the system are already in the library.)
ここでxはちょうどコンパイルしたルーチンです。(システムで分配されたデバイス・ドライバはすべて、既に図書館であります。)
Next, the device's interrupt vector must be entered in l.s.
This is probably already done by the routine mkconf(1), but if the
device is esoteric or nonstandard you will have to massage
l.s by hand.
This involves placing a pointer to a callout routine
and the device's priority level in the vector.
Use some other device (like the console) as a guide.
Notice that the entries in l.s must be in order
as the assembler does not permit moving the
location counter `.' backwards.
The assembler also does not permit assignation of
an absolute number to `.', which is the
reason for the `. = ZERO+100' subterfuge.
If a constant smaller than 16(10) is added to the
priority level,
this number will be available as the first argument of the interrupt routine.
This stratagem is used when
several similar devices share the same interrupt routine
(as in dl11's).
次に、装置の割り込みベクトルをl.sに入力しなければなりません。これは、型通りのmkconf(1)によって恐らく既に行われます。しかし、装置が奥義か非標準の場合、手によってl.sにマッサージを施さなければならないでしょう。これはベクトルの中で、calloutルーチンおよび装置のプライオリティ・レベルにポインターを当てることを含んでいます。ガイドとして他のある装置(コンソールのような)を使用してください。アセンブラーが位置カウンターを移動させることを可能にしないのでl.sの中のエントリーが整っているに違いないことに気づく「'。後ろに。アセンブラーは、さらに絶対的な数の逢引を許しません、に「。」それは理由である、のために、その「。=ZERO+100'言い抜け。16(10)未満の定数がプライオリティ・?激xルに加えられる場合、この数は、割り込みルーチンの第1の議論のように利用可能でしょう。いくつかの同様の装置が同じ割り込みルーチン(dl11の中でのように)を共有する場合?Aこの策略が使用されます。
If you have to massage l.s, be sure to add the code
to actually transfer to the interrupt routine. Again use
the console as a guide. The apparent strangeness of this code
is due to running the kernel in separate I&D space.
The
call
routine
saves registers as required and prepares a C-style
call on the actual interrupt routine
named after the `jmp' instruction.
When the routine returns,
call
restores the registers and performs an
rti instruction.
As an aside, note that
external names in C programs have an
underscore (`_') prepended to them.
l.sにマッサージを施さなければならない場合は、現実に割り込みルーチンに転送するコードを必ず加えてください。再び、ガイドとしてコンソールを使用してください。このコードの明白な奇妙さは個別のI&の中の核の実行によります;Dスペース。その呼び出しルーチン求められるような登録を保存し、「jmp」指示にちなんで命名された実際の割り込みルーチン上のC-スタイル呼び出しを準備します。ルーチンが返る場合、呼んでください。登録を回復し、rti指示を実行します。として、1つの、わきに、Cプログラム中の外部名前がそれらに下線(`_')をprependedすることに注目します。
The second step which must be performed to add a
device unknown to mkconf is
to add it to the configuration table
/usr/sys/conf/c.c.
This file contains two subtables,
one for block-type devices, and one for character-type devices.
Block devices include disks, DECtape, and magtape.
All other devices are character devices.
A line in each of these tables gives all the information
the system needs to know about the device handler;
the ordinal position of the line in the table implies
its major device number, starting at 0.
mkconfに知られていない装置を加えるために実行されるに違いない第2のステップは、配置テーブル/usr/sys/conf/c.cにそれを加えることです。このファイルは2つのサブテーブル、ブロックタイプ装置用の一つおよび文字タ?Cプ装置用の1を含んでいます。ブロックデバイスはディスク、DECtapeおよびmagtapeを含んでいます。他のすべての装置は文字装置です。これらのテーブルの各々中のAラインは、システムが装置取扱い人に関して知る必要のある情報をすべて与えます;テーブル中のラインの順序の位置は0時にスタートして、その主な装置番号を意味します。
There are four subentries per line in the block device table,
which give its open routine, close routine, strategy routine, and
device table.
The open and close routines may be nonexistent,
in which case the name `nulldev' is given;
this routine merely returns.
The strategy routine is called to do any I/O,
and the device table contains status information for the device.
ブロックデバイス・テーブルの中に1行のライン当たり4つの下位記載(それらはその開いたルーチン、接近しているルーチン、戦略ルーチンおよび装置テーブルを与える)があります。開いて接近しているルーチンは架空かもしれません。名前「nulldev」が与えられます;このルーチンは単に返ります。戦略ルーチンはどんなI/Oも行うために呼ばれます。また、装置テーブルは、装置のためのステータス情報を含んでいます。
For character devices, each line in the table
specifies a routine for open,
close, read, and write, and one which sets and returns
device-specific status (used, for example, for stty and gtty
on typewriters).
If there is no open or close routine, `nulldev' may
be given; if there is no read, write, or status
routine, `nodev' may be given.
Nodev sets an error flag and returns.
文字装置については、テーブル中の各ラインがルーチンを指定します、のために、開き、閉じて、読み書きする、そして1、どのセット、また?葡uに特有のステータス(タイプライターのsttyおよびgttyのために、例えば使用された)を返します。開いているか接近しているルーチンがない場合、「nulldev」が与えられるかもしれません;読み取り、書き込みあるいはステータス・ルーチンがない場合、「nodev」が与えられるかもしれません。Nodevはエラー・フラグをセットし返ります。
The final step which must
be taken to install a device is to make a special file for it.
This is done by mknod(1), to which you must specify the
device class (block or character),
major device number (relative line in the configuration table)
and minor device number
(which is made available to the driver at appropriate times).
装置をインストールするために得られるに違いない最終ステップはそのために特別のファイルを作ることです。これはmknod(1)によって行われます。それに装置クラス(ブロックまたは文字)、主な装置番号(配置テーブル中の相対的なライン)および小さな装置番号(それは適切な時にドライバーに利用可能になる)を指定しなければなりません。
The documents
`Setting up Unix' and
`The Unix IO system'
may aid in comprehending these steps.
ドキュメント「Unixの上のセッティング」および「Unix IOシステム」はこれらのステップを理解することを援助するかもしれません。
The library /lib/libc.a is where most of the subroutines
described in sections 2 and 3 of the manual are kept.
This library
can be remade using the following commands:
/lib/libc.a
ライブラリーには
マニュアルのセクション2および3に記述された
ほとんどのサブルーチンが保管されています。
このライブラリは下記コマンドを使用して作成することができます:
If single routines need to be recompiled and replaced, use
単一のルーチンを再コンパイルし置き換える必要がある場合は、
次のコマンドを使用してください。
The above can also be used to put new items into the library.
See ar(1), lorder(1), and tsort(1).
また、上記はライブラリの中に
新しいアイテムを入れるためにも使用することができます。
ar(1)、lorder(1) および tsort(1) を参照してください。
The routines in /usr/src/cmd/libc/csu (C start up) are not in
libc.a. These are separately assembled and put into
/lib. The commands to do this are
/usr/src/cmd/libc/csu
の中のルーチン
(C のスタートアップルーチン)
は libc.a に存在しません。
これらは別々にアセンブルされ、
/lib
の中に入れられます。
これをするコマンドは次の通りです。
where x is the routine you want.
x は希望するルーチンです。
Likewise,
the directories containing the source for the other libraries
have files compall (that recompiles everything)
and mklib (that recreates the library).
同様に、他のライブラリのソースを含んでいるディレクトリーには
(すべてを再コンパイルする)
compall
および
(ライブラリを作り直す)
mklib
というファイルがあります。
There are several tunable parameters in the system. These set
the size of various tables and limits. They are found in the
file /usr/sys/h/param.h as manifests (`#define's).
Their values are rather generous in the system as distributed.
Our typical maximum number of users is about 20, but there are
many daemon processes.
システムにいくつかの調整可能なパラメーターがあります。これらは、様々なテーブルおよび範囲のサイズをセットします。明示する(`#defineの)ように、それらは、ファイル/usr/sys/h/param.hで見つかります。それらの値は分配されるようなシステムにやや寛大です。ユーザの私たちの典型的な最大の数は約20です。しかし、多くの悪魔プロセスがあります。
When any parameter is changed, it is prudent to recompile
the entire system, as discussed above.
A brief discussion of each follows:
どんなパラメーターも変更される場合、上に議論されるように、全システムを再コンパイルすることは思慮深い。各々の簡潔な議論は次のものに続きます: