Subject: A FAQ is coming...
Date: Thu, 19 Dec 91 07:29:21 +0100
From: blum@cip-s01.informatik.rwth-aachen.de (Robert Blum)
To: linux-activists@joker.cs.hut.fi

Hi Linuxers!

Following is a FAQ-compilation (most credits to Linus) for Linux.
Mail me, if you like it, and mail me, if you dislike it or have
any ideas on changing this.

Thanks in advance,
  Robert Blum


QUESTION: What is linux?

ANSWER: Linux is a small unix for 386-AT computers, that has the added
advantage of being free. It is still in beta-testing, but is slowly
getting useful even for somewhat real developement.


QUESTION: Does it run on my computer?

ANSWER: Linux has been written on a clone-386, with IDE drives and a VGA
screen. It should work on most similar setups. The harddisk should be
AT-standard (ie not SCSI, ESDI), and the system must be ISA. Otherwise
the requirements seem relatively small: a 386 (SX, DX or any 486). The
current version (0.10) needs a colour screen adapter, but this is not
the case with the next version.

It needs at least 2M to run, and 4M is definitely a plus. It can happily
use up to 16M (and more if you change some things).


QUESTION: Will linux run on a PC or 286-AT? If not, why?

ANSWER: Linux uses the 386 chip protected mode functions extensively,
and is a true 32-bit operating system. Thus x86 chips, x<3, will simply
not run it.


QUESTION: Does linux do paging? Can I have virtual memory on my small
machine?

ANSWER: Linux does use the 386 paging unit, but currently only for
memory management. No use of disks as expansion RAM. This is one of the
things that will be implemented sometime in the (far?) future. Linux
also uses the paging unit to share pages between several processes after
a fork: thus it needs less memory. However, almost all the user programs
available for linux are GNU software, which want gobs and gobs of
memory. This is the reason at least 4M is recommended: GNU cc (gcc)
simply won't run in less.


QUESTION: Can I have tasks spanning the full 4GB of addressable 386
memory? No more 64kB limits like in coherent or standard minix?

ANSWER: Linux does limit the task-size, but at a much more reasonable
64MB (MEGA-byte, not kilos), so bigger programs are no problem.


QUESTION: Does the bigger program sizes mean I can run X?

ANSWER: X is not ported to linux, and though I hope it will be some day,
I cannot guarantee it. It's big, and wants a lot from the system.


QUESTION: Where can I get linux? Is there a mailserver?

ANSWER: Linux can be gotten by anonymous ftp from 
	nic.funet.fi (128.214.6.100):
		directory /pub/OS/Linux
	Tupac-Amaru.Informatik.RWTH-Aachen.DE (137.226.112.31):
		directory /pub/msdos/replace
	tsx-11.mit.edu (18.172.1.2):
		directory /pub/linux
	ftp.eecs.umich.edu (141.212.99.7):
		directory linux
You might want to check out which of these is the most up-to-date.

If you don't have ftp-capability, you are in trouble. You might try
mailing "mailserver@nic.funet.fi" with "help" in the body of the mail.


QUESTION: Is there a newsgroup or mailing-list about linux? Where can I
get my questions answered? How about bug-reports?

ANSWER:  There is a mailing list set up at the address
'Linux-activists@niksula.hut.fi'.  To join, mail a request to
'Linux-activists-request@niksula.hut.fi'. DO NOT mail "I want to
[un]subscribe" to the mailing-list, use the request-address.

Questions and bug-reports can be sent either to the mailing-list or to
"torvalds@kruuna.helsinki.fi", depending on which you find more
appropriate.


QUESTION: I got the minix-demo, but it won't boot. Linux boots from
floppy. What's wrong?

ANSWER: You probably wrote the minix demo to a 1.44M disk, which (for
some unfathomable reason) doesn't work. The minix demo wants a 720kB or
1.2M disk.


QUESTION:  The minix-demo boots all right, but doesn't seem to recognize
my second harddisk. What's up?

ANSWER: The minix-demo does support a second harddisk, but there are no
special files made for it, and the minix demo doesn't include the
"mknod" command. Mount the linux root-floppy, and use the devices on
that.


QUESTION: How can I be sure I won't be writing over anything important?
I have to use DOS in on my machine, and I don't want to lose any files.

ANSWER: Back up everything. Just in case. Then, write some easily
recognizable pattern to the partition you have reserved for linux, using
some DOS tool. You can then use "cat /dev/hdX" under minix to examine
which of the partitions you used.


QUESTION: Minix mkfs doesn't accept the size I give the device, although
I double-checked with fdisk, and it's correct.

ANSWER: Be sure you give the size in BLOCKS, ie 1024 bytes, not sectors.
Also, make doubly certain that you have the correct partition.


QUESTION: I used the minix mkfs to make a filesystem on /dev/hd3 after
having checked that this was indeed the partition I had reserved. Minix
mounts the new partition ok, but linux doesn't. What gives?

ANSWER: In some cases partitions are numbered differently under minix
and linux. This seems to correlate to the FDISK version you have used.
/dev/hd3 under minix may be /dev/hd2 under linux etc.

There are a few rules about this: /dev/hd0 and /dev/hd5 are always the
same under linux and minix.  DO NOT USE THEM, they are the whole raw
disk, not partitions. Also if a partition is on drive 1 under minix (ie
/dev/hd1-4), it is drive 1 under linux as well.


QUESTION: I mounted the linux filesystem, and copied the files from the
root-disk to the harddisk. Now I cannot find them any more, and
somethimes linux dies with a "panic: trying to free unused inode".

ANSWER: You have probably forgot to sync before rebooting. Linux, like
all unices, use a "buffer cache" to speed up reads and writes to disk.
On a machine that has enough memory, this buffer-cache is 1.5MB, and if
you forget to sync before exiting, it may not be fully written out to
disk. Re-mkfs and re-install (or try to use the preliminary fsck, but
remeber that although fsck tries to correct the faults it finds, it may
fail.)


QUESTION: the mtools package on the root-disk won't work. I get an
ENOENT error message for all devices.

ANSWER: mtools needs to be told which device to look for. Use 'ln' or
'mknod' to create a sepcial file called "/dev/dosX", where X is A, B or
C. This file should point to the device you want to read.


QUESTION:  Turbo (Microsoft) Assembler won't compile the Linux boot code.
In fact, some of the opcodes in these files look completely unfamiliar.  Why?

ANSWER:  The Linux boot codes are written in Bruce Evans' minix assembler,
which has the same opcodes as the original minix assembler.  There are a few
differences between these and normal DOS assemblers:

 - No segments - everything is in the same segment (at least in the
   bootsectors and setup, as they don't use the .data segments)

 - mov[b|w|l] are shorter versions of mov ax,[byte|word|long] ptr [XXX].
   This is how unix assemblers normally give the size (byte, word or long).
   Gas has similar constructs.

 - There is no "jmp short", the opcodes are "j" for a short jump and
   "jmp" for a long one.

 - "jmpi" is a jump with a segment:offset pair. I don't know how this is
   written in DOS assembly.


QUESTION:  While running du I get "Kernel panic: free_inode: bit already 
cleared".  Also, du produces a ENOENT error for all the files in certain
of my directories.  What's going on?

ANSWER:  These are both consistent with a bad file-system. That's relatively 
easy to produce by not syncing before rebooting, as linux usually has 1.5MB
of buffer space held in memory (unless you have <=4M RAM, in which case
the buffers are only about 0.5MB). Also linux doesn't do anything
special about the bit-map blocks, and as they are used often, those are
the thing most likely to be in memory. If you reboot, and they haven't
been written to disk ...

I'm afraid that as long as there is no fsck for linux there is no way to
correct the matter (unless you have minix and can run minix fsck), and
the only thing to do is to reinstall the filesystem from scratch (ie do
a mkfs from the minix demodisk and reboot from the original
linux-floppy).

A sync is done only every 30 seconds normally (standard unix practice),
so do one by hand (some people think you should do 3 syncs after each
other, but that's superstition), or by logging out from the
startup-shell, which automatically syncs the system. Unmounting a
filesystem also syncs it (but of course you can never unmount root).

Another (sad) possibility is that you have bad blocks on your disk. Not
very probable, as they would have to be in the inode-tables, just a
couple of blocks in size. Again there aren't programs available to read
a disk for bad sectors and put them in some kind of "bad-sector-file".
On IDE drives this is no problem (bad sectors are automatically mapped
away).


QUESTION:  What is the "em" binary?

ANSWER:  Em is micro-EMacs (probably version 3.10).

QUESTION: I seem to be unable to compile anythong with gcc. Why?

ANSWER: If you have only 2 MB RAM, gcc will die silently without compiling
	anything. You must have at least 4 MB to do compilations  


QUESTION:  I'm using a program that uses signal handlers which are installed
using sigaction() with the SA_NOMASK, and they get a general protection
error right after the signal handler tries to return.  What's going
wrong? 

ANSWER:  You are using a libc.a that has an out-of-date signal.o and
sig_restore.o file, and they don't know how to deal with SA_NOMASK.
(The one in gccbin.tar.Z is out-of-date.)  You can obtain the newer
signal.c from the unistd.tar.Z file, but don't use the associated
sig_restore.c from there; the FTP sites should have a separate
sig_restore.c which is up to date.  While you're at it, you should also
get an updated crt0.c file as well, and install your new crt0.o and
libc.a in /usr/lib.

(This answer will likely change in the near future, since there are
plans to change the format of the signal trampoline code yet again....
but for now, this should be an accurate description of how things stand
now.) 


QUESTION: gcc complains about not finding crt0.o and the system include files
What am i doing wrong ?

ANSWER: The include files normal place is in /usr/include. libc.a and *.a 
should be in /usr/lib