
 [ NOTE! As of linux-0.97.pl5, the linux kernel include-files have
   finally been totally integrated with the normal headers.  That means
   no more "-nostdinc -I$(KERNELHDRS)" in the Makefiles etc, but it
   also means that you /have/ to have the correct /usr/include/linux
   and ../asm symlinks. See "Basic configuration 2" ]

	VERY QUICK AND DIRTY README
	    by Lars Wirzenius

This is the README for the Linux kernel sources.  It tells a few small
things about kernel configuration and other things that can perhaps be
useful if you want to compile the kernel from scratch.  It leaves out a
lot as well, probably because the person who wrote it doesn't understand
very much about operating systems.  Linus did his best to help, but all
problems this causes are my fault. 

In order to compile this version of the kernel you need GCC 2.2.2 or
newer.  Some makefile targets require special commands which may not be
available on all machines (see below).  Normal utilities like ls etc are
not explicitly listed, they are assumed to be available on all systems. 

Kernel sources are usually kept in /usr/src/linux.  If you have them
elsewhere, you will have to change path names in a few places. 
Filenames that aren't absolute are supposed to be relative to the
toplevel kernel source directory. 


* Basic configuration

1.  Edit Makefile: Check the definitions of macros ROOTDEV, KEYBOARD,
RAMDISK and SVGA_MODE before you run make.  They are explained in the
Makefile.

2.  Create the symlinks:

	ln -fs /usr/src/linux/include/linux /usr/include/linux 
	ln -fs /usr/src/linux/include/asm /usr/include/asm

This is required so that the linux sources will correctly find their
header files - it is also used by the normal user-level header files to
get some system-specific information.

[ Linus' note2: This is automatically done by the gcc-2.2.2d and newer
  installation script, so if you have the new compiler, you should
  already have these links ]

3.  Run "make config" in /usr/src/linux, and answer the questions that
the config script asks you.  It should hopefully set up most of the rest
of the flags for your system. 

4.  Run "make dep" to set up all the dependencies correctly.  The
default dependencies may not fit your system due to different compiler
versions or similar. 

* Running make

[ Linus' note3: if you have problems with make not working correctly,
  get a new copy of GNU make. The linux kernel makefiles are written
  for GNU make and will not work for anything else ]

Unless you know what you're doing, don't ever run the makefiles in
subdirectories by hand.  There is a bit of interaction between the
various makefiles, e.g. in the form of inherited macros and the like.

The following targets all apply for the makefile at the root of the
kernel source tree.

"make" or "make all" compiles everything.

"make Image" is like "make all", but it doesn't bump the number in
.version, which tells how many times this version has been compiled
(helps you differentiate between different configurations etc).

"make disk" is like "make Image", but it additionally writes out a copy
of the boot image to a floppy in your first floppy drive (/dev/fd0;
change the filename if you want a different floppy).  You need to have
a formatted, overwritable floppy in that drive when it is time to do the
copy.  This requires dd.

"make dep" updates all dependencies.  This requires sed.  It modifies
the makefiles directly (the end of them, starting at the ###Dependencies
-line at the end).  "make dep" is required after patching, or the kernel
may not compile cleanly. 

"make clean" will remove all object files and other files created by the
compilation.  This requires basename.

You may wish to redirect compiler error messages to a file so that you
can review them later and to ease problem fixing.  You can do this with
Bash with:

	make something 2>&1 | tee make.out

The tee part is so that you can check what is going on while the
compilation runs.  If you have GNU emacs and use M-x compile you don't
need this, of course.

		Lars Wirzenius
