% Linux Installation and Getting Started    -*- TeX -*-
% hardware.tex
% Copyright (c) 1992-1994 by Matt Welsh <mdw@sunsite.unc.edu>
%
% This file is freely redistributable, but you must preserve this copyright 
% notice on all copies, and it must be distributed only as part of "Linux 
% Installation and Getting Started". This file's use is covered by the 
% copyright for the entire document, in the file "copyright.tex".

\section{Hardware Requirements}
\namedlabel{sec-intro-hardware}{Hardware Requirements}

Now you must be convinced of how wonderful Linux is, and all of the great
things that it can do for you. However, before you rush out and install
the software, you need to be aware of the hardware requirements and 
limitations that Linux has. 
\index{hardware support|(}

Keep in mind that Linux was developed by its users. This means, for the
most part, that the hardware which is supported by Linux is only the
hardware which the users and developers actually have access to. As it turns
out, most of the popular hardware and peripherals for 80386/80486 systems
are supported (in fact, Linux supports more hardware than some
commercial implementations of UNIX). However, some of the more obscure and
esoteric devices aren't supported yet. As time goes on, a wider
range of hardware is supported, so if your favorite devices aren't
listed here, chances are that support for them is forthcoming.

Another drawback for hardware support under Linux is that many companies
have decided to keep the hardware interface proprietary. The upshot of this
is that volunteer Linux developers simply can't write drivers for those
devices (if they could, those drivers would be owned by the company that
owned the interface, which would violate the GPL). The companies that
maintain proprietary interfaces write their own drivers for operating systems
such as MS-DOS and Microsoft Windows; the end user (that's you) never
needs to know about the interface. Unfortunately, this does not allow Linux
developers to write drivers for those devices. 

There is very little that can be done about the situation. In some cases,
programmers have attempted to write hackish drivers based on assumptions
about the interface. In other cases, developers will work with the company
in question and attempt to obtain information about the device interface,
with varying degrees of success. 

In the following sections, we'll attempt to summarize the hardware 
requirements for Linux. The Linux {\em Hardware HOWTO\/} (see
Section~\ref{sec-intro-sources}) contains a more complete listing of 
hardware supported by Linux. 

{\bf Disclaimer:} a good deal of hardware
support for Linux is currently in the development stage. Some distributions
may or may not support these experimental features. This section primarily
lists hardware which has been supported for some time and is known to be
stable. When in doubt, consult the documentation for the distribution of
Linux you are using (see Section~\ref{sec-install-distrib} for 
more information on Linux distributions).

\subsection{Motherboard and CPU requirements}

\index{hardware support!motherboard}
\index{hardware support!CPU}
Linux currently supports systems with an Intel 80386, 80486, or 
Pentium CPU. This includes all variations on this CPU type, such as the 
386SX, 486SX, 486DX, and 486DX2. Non-Intel ``clones'', such as AMD and 
Cyrix processors, work with Linux as well.

If you have a 80386 or 80486SX, you may also wish to use a math coprocessor, 
although one isn't required (the Linux kernel can do FPU emulation if you do 
not have a math coprocessor). All standard FPU couplings are supported, such
as IIT, Cyrix FasMath, and Intel coprocessors.

The system motherboard must use ISA or EISA bus architecture. These terms 
define how the system interfaces with peripherals and other components on
the main bus. Most systems sold today are either ISA or EISA bus. IBM's 
MicroChannel (MCA) bus, found on machines such as the IBM PS/2, is not 
currently supported.

Systems which use a local bus architecture (for faster video and disk 
access) are supported as well. It is suggested that you have a standard
local bus architecture such as the VESA Local Bus (``VLB''). 


\subsection{Memory requirements}

\index{hardware support!memory}
Linux requires very little memory to run compared to other advanced 
operating systems. You should have at the very least 2 megabytes of RAM; 
however, it is strongly suggested that you have 4 megabytes. The more
memory you have, the faster the system will run. 

Linux can support the full
32-bit address range of the 386/486; in other words, it will utilize 
all of your RAM automatically.

Linux will run happily with only 4 megabytes of RAM, including all of
the bells and whistles such as X~Windows, Emacs, and so on. However, 
having more memory is almost as important as having a faster processor.
8 megabytes is more than enough for personal use; 16 megabytes or more
may be needed if you are expecting a heavy user load on the system.

Most Linux users allocate a portion of their hard drive as swap space,
which is used as virtual RAM. Even if you have a great deal of physical
RAM in your machine, you may wish to use swap space. While swap space is
no replacement for actual physical RAM, it can allow your system to run
larger applications by swapping out inactive portions of code to disk.
The amount of swap space that you should allocate depends on several
factors; we'll come back to this question in 
Section~\ref{sec-install-swap}.


\subsection{Hard drive controller requirements}

\index{hardware support!hard drive}
\index{hardware support!controller}
You do not need to have a hard drive to run Linux; you can run a 
minimal system completely from floppy. However, this is slow and very 
limited, and many users have access to hard drive storage anyway.
You must have an AT-standard (16-bit) controller. There is support in
the kernel for XT-standard (8 bit) controllers; however, most controllers
used today are AT-standard. Linux should support all MFM, RLL, and IDE 
controllers. Most, but not all, ESDI controllers are supported---only
those which do ST506 hardware emulation.

The general rule for non-SCSI hard drive and floppy controllers is that
if you can access the drive from MS-DOS or another operating system, you
should be able to access it from Linux. 

\index{hardware support!SCSI}
Linux also supports a number of popular SCSI drive controllers, although
support for SCSI is more limited because of the wide range of controller
interface standards. Supported SCSI controllers include the Adaptec 
AHA1542B, AHA1542C,
AHA1742A (BIOS version 1.34), AHA1522, AHA1740, AHA1740 (SCSI-2 controller, 
BIOS 1.34 in Enhanced mode); Future Domain 1680, TMC-850, TMC-950;
Seagate ST-02; UltraStor SCSI; Western Digital WD7000FASST. Clones which
are based on these cards should work as well.

\subsection{Hard drive space requirements}

\index{hardware support!drive space}
Of course, to install Linux, you'll need to have some amount of free
space on your hard drive. Linux will support multiple hard drives in
the same machine; you can allocate space for Linux across multiple drives
if necessary. 

The {\em amount\/} of hard drive space that you will require depends greatly
on your needs and the amount of software that you're installing. Linux
is relatively small as UNIX implementations go; you could run a 
complete system in 10 to 20 megabytes of space on your drive. However, if you
want to have room for expansion, and for larger packages such as X~Windows, 
you will need more space. If you plan to allow multiple users to use the
machine, you will need to allocate storage for their files. 

Also, unless you have a large amount of physical RAM (16 megabytes or more),
you will more than likely want to allocate swap space, to be used as virtual
RAM. We will discuss all of the details of installing and using swap space in
Section~\ref{sec-install-swap}.

Each distribution of Linux usually comes with some literature that should help 
you to gauge the precise amount of required storage depending on the amount 
of software you plan to install. You can run a minimal system with less than
20 megabytes; a complete system with all of the bells and whistles in 
80 megabytes or less; and a very large system with room for many users and
space for future expansion in the range of 100-150 megabytes. Again, these
figures are meant only as a ballpark approximation; you will have to look 
at your own needs and goals in order to determine your specific storage 
requirements.

\subsection{Monitor and video adapator requirements}

\index{hardware support!monitor}
\index{hardware support!video card}
Linux supports all standard Hercules, CGA, EGA, VGA, IBM monochrome, 
and Super VGA video cards 
and monitors for the default text-based interface. In general, if the 
video card and monitor coupling works under another operating system such
as MS-DOS, it should work fine with Linux. Original IBM CGA cards
suffer from ``snow'' under Linux, which is not pleasant to use.

Graphical environments such as the X~Window System have video hardware 
requirements of their own. Instead of listing these requirements here, we 
relegate the discussion to Section~\ref{sec-xwindows-reqs}. In short,
to run the X~Window System on your Linux machine, you will need one of
the video cards listed in that section.

\subsection{Miscellaneous hardware}
The above sections described the hardware which is required to run a Linux
system. However, most users have a number of ``optional'' devices such
as tape and CD-ROM storage, sound boards, and so on, and are interested in
whether or not this hardware is supported by Linux. Read on.

\subsubsection{Mice and other pointing devices}

\index{hardware support!mice}
For the most part, you will only be using a mouse under a graphical
environment such as the X~Window System. However, several Linux applications
not associated with a graphics environment do make use of the mouse. 

Linux supports all standard serial mice, including Logitech, MM series,
Mouseman, Microsoft (2-button) and Mouse Systems (3-button). Linux also 
supports Microsoft, Logitech, and ATIXL busmice. The PS/2 mouse 
interface is supported as well. 

All other pointing devices, such as trackballs, which emulate the above
mice, should work as well.

\subsubsection{CD-ROM storage}

\index{hardware support!SCSI}
\index{hardware support!CD-ROM}
Almost all CD-ROM drives use the SCSI interface. As long as you have a 
SCSI adaptor supported by Linux, then your CD-ROM drive should work. 
A number of CD-ROM drives have been verified to work under Linux, including
the NEC CDR-74, Sony CDU-541, and Texel DM-3024. The Sony internal CDU-31a
and the Mistsumi CD-ROM drives are supported by Linux as well.

Linux supports the standard ISO-9660 filesystem for CD-ROMs. 

\subsubsection{Tape drives}

\index{hardware support!tape drives}
There are several types of tape drives available on the market. Most of them
use the SCSI interface, all of which should be supported by Linux. Among the
verified SCSI tape drives are the Sankyo CP150SE; Tandberg 3600; Wangtek 
5525ES, 5150ES, and 5099EN with the PC36 adaptor. Other QIC-02 drives should
be supported as well.

Drivers are currently under development for various other tape devices, such
as Colorado drives which hang off of the floppy controller.

\subsubsection{Printers}

\index{hardware support!printers}
Linux supports the complete range of parallel printers. If you are able
to access your printer via the parallel port from MS-DOS or another operating
system, you should be able to access it from Linux as well. 
The Linux printing software consists of the UNIX standard {\tt lp} and
{\tt lpr} software.
This software also allows you to print remotely via the
network, if you have one available.

\subsubsection{Modems}

\index{hardware support!modems}
As with printer support, Linux supports the full range of serial modems, both
internal and external. There is a great deal of telecommunications software
available for Linux, including Kermit, {\tt pcomm}, {\tt minicom},
and Seyon. If your modem is accessible from another operating system
on the same machine, you should be able to access it from Linux with no
difficulty.

\subsection{Ethernet cards}

\index{hardware support!ethernet cards}
\index{networking!ethernet cards, supported}
Many popular Ethernet cards and LAN adaptors are supported by Linux.
These include:
\begin{itemize}
\item 3com 3c503, 3c503/16
\item Novell NE1000, NE2000
\item Western Digital WD8003, WD8013
\item Hewlett Packard HP27245, HP27247, HP27250
\item D-Link DE-600
\end{itemize}
The following clones are reported to work:
\begin{itemize}
\item LANNET LEC-45 
\item Alta Combo
\item Artisoft LANtastic AE-2
\item Asante Etherpak 2001/2003, 
\item D-Link Ethernet II
\item LTC E-NET/16 P/N 8300-200-002
\item Network Solutions HE-203, 
\item SVEC 4 Dimension Ethernet
\item 4-Dimension FD0490 EtherBoard 16
\end{itemize}
Clones which are compatible with any of the above cards should work as well.

\index{hardware support|)}
