From: corsini@hector.greco-prog.fr (Marc-Michel CORSINI)
Subject: FAQ part2 [repost ?]
Reply-To: linux@numero6.greco-prog.fr
Organization: The Internet
Date: Wed, 7 Oct 1992 18:00:49 GMT


Newsgroups: comp.os.linux,news.answers 
Subject: Linux Frequently Asked Questions 2/2 [monthly posted]


Archive-name: linux-faq/part2
Last-Modified: 92/09/05  15:35:30
Version: 1.10

*********************************************************
*							*
*   Answers to Frequently asked questions about Linux   *
*							*
*********************************************************

This post contains Part 2 of the Linux FAQ. It must be read *after* the
first part. It contains the following sections:

	VII.	MORE HINTS			(part2)
	VIII.	FEATURES			(part2)
	IX.	GCC MISC INFORMATION		(part2)
	X.	SCSI SPECIAL			(part2)
	XI.	X11, THE MAXIMUM and MORE	(part2)

===================================8<====>8============================


VII. MORE HINTS 
=============== 

This part try to keep track of the different information
that appeared in comp.os.linux and on the list since beginning of
March. I tried to update it for v0.97, so there might be some
mistakes. Moreover take care to use the correct library and include
stuff, and the ad-hoc gcc you use !!!


QUESTION: How can I backup my Hd under Linux ?

ANSWER: I know at least two ways. One possibility is tar and mtools,
another possibility is the diskbackup/diskrestore of Diamano Bolla
(digest37 vol. #2) which saves big hd to floppies using the
stdin/stdout. These utilities have been uploaded to the major sites in
file disksplit.tar.Z.
An example usage (Roger Binns) is:

tar cvf - bin dev usr etc .. | compress | diskbackup

and to restore:

diskrestore | uncompress | tar xvf -

BTW: Don't use the previous version (digest44 vol.#1) with 0.95a

QUESTION: Where is 'which' ?

ANSWER: It depends on the sh you are running:
in bash 	'type -path'
in tcsh		it's a builtin

for ash and rc you can try the following (untested by me) script from
Kevin Brown: 

#!/bin/sh
for i in `echo $PATH | sed 's/:/ /g'` ; do
  for j in ""$@" ; do
	if test -x "$i/$j" ; then
	   echo "$i/$j"
         fi
  done
done

QUESTION: How to use setterm: for the novice?

ANSWER:The setterm utility provides access to most of Virtual Consoles
(VCs) functionality.  You can set your screen up to blank at 10
minutes using:
	        setterm -blank 10

You can set colors, and clear the screen.  For a full list of commands,
just type "setterm" with no arguments.
        
There are a few tricks with the screen dumper can really make VCs go a 
long way.  Here are a few of the common ones that I use:

		setterm dump

Dumps the contents of the current VC to screen.dump (in the current dir).
					
		setterm dump 4
				
Dumps the contents of VC 4 to screen.dump
		
		setterm -file mydumpfile -dump 4

Dump the contents of VC 4 to the file mydumpfile

		setterm -file /dev/tty0 -dump 4

Dumps the contents of VC 4 to the current VC.
					
		setterm -file /dev/tty4 -dump

Dumps the contents of the current VC to VC 4.
		
		setterm -file /dev/ttys1 -dump
				
Dumps the contents of the current VC to the serial port.
Handy if you are logged on and want to paste a screen full without
having to resort to doing a file transfer.

		setterm -file mydumpfile -append 4
				
Appends to instead of overwriting the dump file.  Useful if you
have several screens you wish to concatenate.


QUESTION: I've tried clear/reset which exist on most of unix but it
doesn't work, have I missed something? 

ANSWER: setterm -clear or setterm -reset will solve your missing.  For
clear, you can also write a small script (which use the cl: part of
/etc/termcap wrt your TERM), or use bash where ctrl-l will do it for
you.


QUESTION: I know there are VC, but where is the setterm stuff?

ANSWER: It's in the current distribution (i.e. on the images), the
source can be found in virtcons.tar.Z at nic.


QUESTION: I know there are shared libraries; does there exist an easy
way to check an executable for sharing ? 

ANSWER: (Josh Yelon & HJ Lu) 
(J.Y.) An executable which shares a library is linked with an
(ordinary, non-shared) "stub" version of the library. One of the first
thing this stub does (when the executable is run) is to ask the kernel
to load the (big) "shared version" of the library (which is usually
named /lib/lib.XX.XX) The upshot of this is that in the code for the
stub (part of the executable), is the string "/lib/lib.XX.XX"; which
can be searched by using 'strings' or 'grep'.
(HJ. L.) if you have gcc2.11a or later the shared image is changed to
/lib/libxxxx_vyy_zzz. And you should better use nm to find
"__shared_lib" (nm failed on stripped executable). You can also write 
a function for "file", which can even check the version number ....

(Claude Morin) Finally, there exists at tsx-11 ldd.tar.Z If you follow
the instructions, you will be able to type "ldd <executable>" to List
the Dynamic Dependencies of the executables. In other words 'ldd'
prints the name of the shared libraries needed by the executable,
nothing appears for static one. Notice that 'ldd' does not work for
executables linked before the installation of ldd.

QUESTION: What is the rdev program provided in the images?

ANSWER: It's a program from Werner Almesberger of ETH. With no
argument it prints the first line of /etc/mtab. With one argument, a
boot-image, it prints the device configured as the root device, and
with two arguments, a boot image and a device, it sets the device as
default root in the specified image.


QUESTION: How to start Linux from drive B?

ANSWER: There is a DOS utility called boot_b.exe (look at DOS ftp).
Another simple way is to open the box and invert the cables.


QUESTION: The program boot_b works fine /but/ once the first disk is
read the system go back to the first drive, any hints?

ANSWER: Yes, change the bootimage in just the same way that you change
it to boot on the hard drive, execept that the major/minor pair is
different. All these information are in the file INSTALL-0.10.
Remember that if you use a sun or other endian machine, you will need
to reverse the byte order when you run the filter program (also in the
same file).


QUESTION: How can I get Linux to boot directly from the harddisk?

ANSWER: Right now, this can be done via the shoelace stuff or the
bootany package, or by the bootlin package from coutand@imag.imag.fr.
There is also the LILO stuff.
If you choose shoelace *please* do read the next Q/A (and also the
README provided with the shoelace stuff)


QUESTION: I use shoelace, but I want to change my root partition, what
is the process to get rid of it? 

ANSWER: With Norton utility you can put back a standard boot sector.
Another possibility is to restore the old boot sector (the one you
should have backup *before* installing shoelace).


QUESTION: Sometimes, when I want to remove a directory, I get an error
message, is it a (known) bug?

ANSWER: No, There is no bug at all, you probaly have another shell 
on another VC whose working directory is either the one you try to 
remove, either a subdirectory of it.


QUESTION: I'm looking for init, getty, login, passwd stuff, where 
can I find them? 

ANSWER: You should find it in shadow.tar.Z (only sources), at least 
at tsx in the usr.bin directory. Many people have reported some troubles 
with the *OLD* shadow-passwd (shadow-bin.tar.Z and shadow-src.tar.Z, so 
do not use them anymore); an alternative might be the mcc-interim
which contains standard passwd binary. There is also the Peter Orbaek's
admutil-1.?.tar.Z and poeigl-1.?.tar.Z which contains source for
shutdown, su, chsh, passwd and a system V init compatible. 


QUESTION: How can I setup a user account other than root ?

ANSWER: You can either use the adduser program, either do it manually.
In the later case, you have to:
a) edit /etc/passwd as root and add a line of the following format:
user:passwd:uid:gid:user name:home directory:login shell

user is the login name; uid is the numeric user id, it should be
unique; gid is the numeric group id, this number should correspond to
an entry in /etc/group. The passwd field should be left blank 'cause
it is stored in an encrypted form [to set this field just use the
passwd program].
example
faq::200:5:Marc-Michel:/home/faq:/bin/sh
b) Still as root, you shoud now create the home directory and set the
correct ownership.
mkdir /home/faq
chown faq /home/faq
chgrp 5 /home/faq

 
QUESTION: I've been trying to get Linux to run on my [3/4]86 box. It
can't even boot. Any suggestions?

ANSWER: The most common error/problem is writing the bootimage to a
low density disk. It fits, but the bootstrap code will only recognize
high density disk. So try to format explicitely disk as high density:
- for 3.5",  'format a: /n:18 /t:80 '
- for 5.25", 'format a: /n:15 /t:80 '


QUESTION: Does there exist games, languages (other than C), and
anything which make the system more friendly?

ANSWER: Yes, among other things there are rogue and yahtzee; TeX;
Prolog, Perl.. but in general, if you want some extra tool port it to
Linux this is also a good beta-testing exercice. 



QUESTION: Does emacs handle the arrows-key

ANSWER: Yes it does, one simple way is to put some elisp code in your
.emacs, this is an except of mine:


(define-key global-map "OB" 'next-line)
(define-key global-map "OA" 'previous-line)
(define-key global-map "OC" 'forward-char)
(define-key global-map "OD" 'backward-char)
(define-key global-map "OH" 'beginning-of-line)

The keycode (A, B etc..) was obtained by ^Q followed by the key


QUESTION: Whenever I use uemacs 3.1X on a symlink, the symlink does
not exist anymore, why?

ANSWER: (Tristram Mabbs) Since ue3.10, uemacs uses 'safe save' mode,
writing the file to a temporary and moving it OVER the original. In
the process, this deletes the original. To prevent this just add the
following in your emacs '.rc' file: set $ssave FALSE


QUESTION: Uemacs doesn't work anymore with 0.95a, whenever I want to
save a file; what can I do?

ANSWER: ^S and ^Q are used for flow control. One solution is ^X^W
followed by the	filename, or M-X save-file, try also ^XS it could work
for some version (not mine). Another possibility, 
if you have download the stty.tar.Z file, is to do stty -IXON 
before you first use uemacs (this can be included in your .profile).
And the last is to recompile the Peter Orbaek init-1.2 package.


QUESTION: I have an SVGA, but Linux detect an EGAc/EGAm; is it normal?

ANSWER: (Jim Winstead) This is correct actually. You have an EGA+ card
(SVGA) with a Color/Mono monitor. The only four possibilties are EGAc,
EGAm, *MDA and *CGA (according to the code in
kernel/chr_drv/console.c).
The true test, if Linux detects your video card, is if you press
<RETURN> at the "Press <RETURN> to see SVGA- ..." boot-time message.
If you have a SVGA  recognized card, it will ask you to choose a
screen size. If not detected, the default is 80x50 mode. 
BTW if you have no SVGA, press the <space> and you are in 80x25 mode.

If you have dowloaded the kernel, you can automatically skip this
query at boot-time if you set the SVGA_MODE variable in the main
Makefile before compiling a new bootimage. 


QUESTION: How can I change the keyboard repeat rate?

ANSWER: (Michael K Johnson) In boot/setup.S there are the lines:
! set the keyboard repeat rate to max
	mov	ax,#0x0305
	mov	bx,0x0000
	int	0x16

If you don't want to change the repeat rate at all, just comment out
these lines. If you want something in the middle, change the
	mov	bx,0x000
by	mov	bx,0x??yy
where ??yy is determined by (Ralf Brown's interrupt list)
bh= delay value (0x00 = 250ms to 0x03= 1000ms (one sec))
	this is the delay before the repeat is performed
bl= repeat rate (0x00 =30/sec to 0x1f=2/sec; 0x0c=10/sec [default])


QUESTION: I compiled fdformat.c and ran it on 1.44Mb and 1.2Mb, the
results are unreadable, any clue? 

ANSWER: (M. Pereckas) fdformat only low-level formats the disk. to use
the fdformatted disk with DOS filesystem, run mformat on the disk.
Mformat writes DOS filesystem information but is unable to low-format
:). In order to put a Linux filesystem on a (low)formatted disk you
have to mkfs it. 

QUESTION: Is it possible to disable the 3-fingers salute
(ctrl-alt-del) ?

ANSWER: Yes, in kernel/sys.c you can read the following:

/*
 * this indicates wether you can reboot with ctrl-alt-del: the deault is yes
 */
static int C_A_D = 1;

there is also a small utility written by Linus in digest242 vol#2


QUESTION: Could some one explain the information provided at boot-time?

ANSWER: (Jim Winstead Jr)
| serial port at 0x03f8 is a 16450 
| serial port at 0x02f8 is a 16450 (what's that the uart chip?)

Right, the last number should either be 8250, 16450, 16550, or 16550a,
and on the two 16550 models, it will report that FIFO's have been
disable (16550) or enabled (16550a).

| 8 virtual consoles (that's how many alt-F's I can get going?                 
|      but only F1-4 actually work)

You can get sessions running on Alt-F[1-8], but the 'standard'
/etc/inittab only runs getty/login on Alt-F[1-4].  You can start
sessions on the other consoles by using 'doshell' or adding lines to
/etc/inittab.

| 4 pty's (are these the consoles F1-4?)

No, those are 'pseudo' ttys, which programs like MGR use to simulate
tty connections.  That's probably a gross over-simplification, but it
gives you the general idea, I think.  :)

| p_init: lp1 exists (0) (is that the (l)ine (p)rinter?)

Right.


QUESTION: What is the meaning of files ended by .T.Z

ANSWER: The suffix Z is for compressed files (to uncompress them use
the command `uncompress file.Z`).
The suffix T indicates a "tar file" the usual suffix is tar but, the
14 chars filename limit of the Minix filesystem makes it cumbersome to
use .tar.Z (to untar a file ended by .T, use the command 
`tar options file.T` (see the man page for more details).

VIII. FEATURES 
==============

QUESTION: I've read that linux has virtual consoles, what must I do to
get them?

ANSWER: Yes there are, you can access them with the left <alt>-key
together with <Fn>-key. With the Linux Images distribution, 4 consoles
are available, getty runs on them.  

BTW: the serial ports are now /dev/ttys0, /dev/ttys1, /dev/ttys2 and
/dev/ttys3. tty0 is the general console. tty128- are reserved to pty's

QUESTION: When Linux boots, I get the following message "8 virtual
consoles"; how can I acess to the 5-8 vc's ?

ANSWER: If you want the getty to run on the 5-8, you should add the
corresponding entries in /etc/inittab. You can also just run sh on
them by using the doshell soft.
And then in either case, the ALT-F[5-8] will access the corresponding
vc.  

QUESTION: What kind of shell is /bin/sh ?

ANSWER: It's the Bourne Again Shell, bash-1.12.3 and 
compilation was straightforward, just "make" 
that's all or nearly. 
BTW There does exist different shells for Linux, these are:
ash, bash, rc, zsh and tcsh.


QUESTION: Does there exist a man page for **** ?

ANSWER: Download man.tar.Z from your favorite linux ftp site, there is
most of the fileutils man page -- either **** or g****, example there
is nothing on ld, but there is for gld :) --, check the whatis
database provided. The files in the cat1 dir are pre-formatted man
pages that the man program can use. Quite recently the man pages for
section 2 have been written (thanks Drew) and can be found, at least
at tsx-11 in /pub/linux/docs/man/man2.tar.Z 

BTW there is no roff,troff nor nroff for Linux. Cawf 2.0 works just
fine for simple man pages, and a partial ms support too. Quite
recently the port of groff has been done (due to gcc2.x port), you can
found it (at least on tsx-11) in pub/linux/binaries/usr.bin/groff.

Moreover Michael Johnson is the coordinator for man pages under Linux,
he is looking for volunteers, so contact linux-man-request@stolaf.edu.


QUESTION: What are the editors available in linux?

ANSWER: Right now there are uemacs-3.11, elvis-1.4 (1.5). 
And recently the port of emacs-18.58 has been done by Bernd Wiegmann
which corrects some pty's problems (that one can be found in
binaries/emacs-18.58 at tsx-11). Also the port of mg (micro gnu) has
been done and can be found at least at athos.rutgers.edu (128.6.4.4)
in pub/linux, mg is the binary and mg.tar.Z is the sources file. You
can also find a PD ed, and elvis has an ex mode. Finnally there are
joe, vile-3.11 and recently elle (Elle Looks Like Emacs).

QUESTION: Does there exist a printer package for Linux?

ANSWER: Once you have successfully recompiled the kernel v0.97, you
need  to create new devices in the /dev directory (see the major/minor
information). Printing, then, can be achieved by : 
cat filename > /dev/lp1


QUESTION: Does there exist a ps for Linux?

ANSWER: Yes, a very simple one is implemented by default, just press
the shift-scroll-lock key; ctrl-scrollock gives a kind of memory
status, and alt-scrollock gives registers information. There is also a
much more complete ps/memory package it's ps097p4.tar.Z. 


QUESTION: How do I make swapping work?

ANSWER: Quite simply, you need the swapon and the mkswap binaries.
Then you can choose between a swap partition or a swap file.
The mkswap is used to write the "swap signature", whilst the swapon
binary is to activate the swapping. 

First of all you need a partition :), I assume it's the second of your
first disk namely /dev/hda2, and it's 10MB big
A) swap partition:
you have to indicate it's a swap area, this is done via mkswap
(instead of mkfs) which needs the name of the partition and the size
in blocks (a block is 1Ko big); the optional -c flag is for bad block
checking. So for our example you should perform:
mkswap [-c] /dev/hda2 10000
Then you need to indicate that you want linux to use the swap area,
this is done via swapon. In general it is set in the /etc/rc file,
just put the following entry:
/bin/swapon /dev/hda2
It can also be achieved via the /etc/fstab file
B) swap file:
The process is quite close; you need a partition, and a swap file.
Assume that I prefer a swap area of 4MB (I want to keep some place in
/dev/hda2). I need first to "dd" the file.
dd if=/dev/hda2 of=/swap_file bs=1024 count=4096
bs stands for block size, and count is the number of blocks
then I have to put the "swap signature" on that file:
mkswap /swap_file 4096
At this point, you should 'sync', just to be sure the signature is
effective. And finally add an entry in the rc file:
/bin/swapon /swap_file


QUESTION: When I boot I get one of the following messages:
"Unable to find swap signature" or "Bad swap-space bitmap"

ANSWER: You probably forgot to make your swap-device, use the mkswap
command. 


QUESTION: How do I know if it is swapping?

ANSWER: You will notice it :)) First of all, Linux tells you at boot
time, "Adding swap: XXX pages of swap space", and if you start running
out of memory, you will notice that the disk will work overtime, and
things slow down. Generally a 2Meg RAM will make the system swap
constantly while running gcc, 4 Meg will swap occasionnaly when
optimizing big files (and having other things active, such as make).
Also, the command 'free' (from the ps package) reports total enabled
swap space and current swap use.


QUESTION: How is it possible to remove a swap file?

ANSWER: Simply perform a rm on that file, and remove the swapon of
your /etc/rc file.


QUESTION: How is it possible to remove a swap device?

ANSWER: mkfs the device, and remove the swapon of your /etc/rc file.

QUESTION: How much swap space do I need ?

ANSWER: Linux does not perform real swapping, it's rather paging (see
below for a more complete explanation). The swap area is *added* to
the memory and can be viewed as virtual memory, so choose the size you
need.

QUESTION: Could someone explain the swap process on Linux?, is it
swapping or paging ?

ANSWER: (Linus) Linux uses swap as /additional/ memory, one page of
the swap-space is used for the good-page bitmap and the swapspace
signature. 
In fact Linux does only paging, no swaping in the meaning "write out
one whole process to disk".
The reason it's called swapping is that Linux used paging for memory
management on a low level since the very beginning, but didn't page to
disk at all until 0.12. 

QUESTION: Is demand paging different from paging and How ?

ANSWER: (Linus) Demand-paging is really "demand loading of
executables" and is totally independent of the page-swapping
algorithms, although they have similarities. When Linux strts up a
process, no actual code space is loaded: I let the page exceptions
load in the executable as needed. Thus Linux demand-loads the code and
initialized data it needs.
Demand-loading has very good points: (a) it simplifies the exec system
call; (b) it means page sharing between that have excuted the same
file is easy to implement; (c) it cuts down on the amount of memory
required. When Linux runs out of real memory, it starts to lock for
pages it can swap out, but if it notices that the page is clean, it
just forgets about it, and demand-loads it when it's needed again.
Thta means that swap-file isn't needed as much, especially when
running big binaries such as gcc, where the code-pages can be
demand-loaded as you wish.

Point (c) means that even without any swap space, you can usually run
slightly larger programs that your memory setup would actually permit.
I've noticed this while running X and doing a kernel compilation +
something else wshen I've forgotten to turn on swapping: free reports
0 page available but things still work, although performance is
slightly down... 

QUESTION: Is there any way to tell how much swap space you are using
or have left? 

ANSWER: The free program provided with the ps package handles this.

QUESTION: What are the major/minor number of /dev/swap since it's
needed by free ?

ANSWER: None, /dev/swap is a link to your swap area (file or
partition). To make a link, use the ln command.
 
QUESTION: I have a 2Megs box, but "free" reports only 1Meg why?

ANSWER: (Linus:) "free" doesn't concern with the memory the kernel has
allocated for itself. In other words what you see is the *user* memory
available. The kernel has taken the low 1Meg for it's use (~250Ko for
it and the rest for buffer cache and kernel data structures); for big
memory machine it could be even 2Megs.

QUESTION: What tape drives work with Linux ?

ANSWER: (24 sept. P. Riipinen)
- There is a working QIC-02 device driver for Linux, supporting (at
  least) Everex/Wangtek cards.
- There are additional patches for the QIC-02 to support Archive
  SC402/499R. You can find them in /pub/linux/alpha/qic-02 at tsx-11
  There are some bugs in the driver but you can backup.
- Newer drivers are all SCSI, so check the SCSI section in this FAQ.

QUESTION: Is there only the %$#@ keyboard ?

ANSWER: There are Dannish, Finnish, French, German, Uk, US and DVORAK 
keyboards. Set it in the main Makefile of the kernel sources, then  
(re)compile the kernel again. Make sure the files in kernel/chr_drv
directory are recompiled.   


QUESTION: (special FINNISH/US) I booteed up with the new image and
everything work except that some keyboard keys produce wrong
characters. Does anyone know what is happening?

ANSWER: Since 0.95a images are US product (and so are US-keyboard
oriented), BUT linux sources are FINNISH product, and so the default
keyboard is set to be FINNISH. The solution is in the previous Q/A.


QUESTION: Does there exist shared libs ?

ANSWER: (H.J. Lu, hlu@eecs.wsu.edu, 09/01/92)

The shared library under Linux started at 0.12. Peter MacDonald
collaborating with Linus made the first generation of shared library,
which is the base of the current classic shared library.

The kernel support of shared library under Linux is system call

extern int uselib (const char *__filename);

which loads an executable image with fixed entry point into memory,
just like the ordinary executables.

In crt0.s, a function which can find out if and which shared images
are needed and loads them is invoked before `main ()' is called if
necessary. David Engel and I developed a way to tell the loader which
shared images have to be loaded, utilizing the similar technique used
in global constructor in g++ 2.x with the help from GNU binary
utilities.

In the classic Linux shared library, we build a big executable image 
for several libraries and make sure no external variables outside of
the participating libraries are referenced. Then we can get the
absolute addresses of all the global variables defined in the
libraries used to build that executable image. After that, we make a
stub library for each participating library which just has the
absolute addresses of all the global variable in it.

For each shared image, there must be one and only one file, usually
called, __shared.o, which defines a global variable containing
version, name and entry point of the shared image, and a dummy global
data. Among those libraries used to build the shared image, there must
be one library which will always be referenced whenever any other
library is referenced. We put `__shared.o' into the stub library for
that library and add a declaration for the dummy global data defined
in `__shared.o' which will make sure `__shared.o' will always be linked
in when any participating libraries are linked.

In gcc 2.2.2d, jump table, developed by David Engel, was introduced in 
the shared library. At the beginning of each shared image, there is
a table in which every library function has a fixed entry address and
the instruction at that address is a jump which will lead to the
real library function. So we can change the library function without
changing the corresponding entry address of the jump table. For the
global data we put them at the beginning of data section of the shared
image. We have to separate them from text code and link them in fixed
order. It is very hard to maintain the same addresses for the global
data when library is changed. After the global data are set up properly
and some spaces are left for possible future changes (that is a very
tough procedure.), it isn't too difficult to maintain.

In the current implementation, only libc.a, libcurses.a, libdbm.a,
libtermcap.a and libm.a are built with jump table. The global data in
X11 libraries are too complicated to make jump table such that their
addresses won't change when there is a change in X11 libraries. It's
not apparent yet that the benefits gained from a jump table version of
the X libraries would offset the effort required to set it up and
maintain it unless we get some cooperation from X Consortium, which
is very unlikely. But they are linked with jump table version of
libc.a and libm.a. That means they don't have to be relinked when
there is a modification in libc.a or libm.a.


QUESTION: Does Linux work for SCSI drives?

ANSWER: Yes since v0.96. At headrest.colorado.edu in /pub/scsi, you
will find the last SCSI alpha/beta version and also a special SCSI
FAQ, read it, it  contains the latter information than the one provided
in the SCSI section. You should, also, contact the linux-scsi list or
directly drew@cs.colorado.edu  


QUESTION: Linux is supposed to work with ESDI drive. However I have
trouble with my Magtron MT-4115E (Joincom controler), any clue?

ANSWER: (Linus) Some harddisk don't like linux (even though they
should). Maybe not a bug but a deficiency.
(Mika) I had to remove the printk "unexpected hd interrupt" statement
in hd.c because I was getting so many of those messages. Be warned
that if there is any read error the system just hangs, even the
ctrl-alt-del won't work. You should be able to use your ESDI drives if
you could live with those nuisances.

QUESTION: How does one go about applying a patch to Linux ?

ANSWER: (Drew Eckhardt) In the unix world most of distribution are in
source form. This includes the operating system. To apply a patch, you
apply it with the 'patch' program to the affected sources. The patch
program takes as input the differences between the old and the new
version. After patching you need to recompile the sources.

Assume I want to apply a patch enclosed in the file XXX. First of all
I will look at the top of XXX, where the file affected is identified.
This may have aleading path attached to it. Either cd out to the
"root" of the patch, ie if I see
linux/kernel/blk_drv/blk.h

I would cd into /usr/src 
(assuming it's the place where I can find linux/kernel...) 
and then patch as follows
patch -p0 < whatever_place/XXX

or, you can specify a number of path components to strip from the
path. If I am in the blk_drv directory patching would be
patch -p3 < whatever_place/XXX


QUESTION: There are a lot of patches available (fd patch, lp patch
login patch ...) can I be fairly confident the subsequent patches will
work?

ANSWER: This is not true yet for the current version; but it will be
so I kept it :) 
No you can't, patching is a real beta tester art :)).  People are not
working on the same patched release, so you have to check if the
patches you already applied works on the same kernel part, if not,
/great/, just apply them. If yes, check if there is an order, patch
creator knows that, and (should) try to warn patch user (in other
words: beta tester) otherwise you should edit the patch files (and
possibly make a brief note to others on this list/newsgroup or even a
cdiff) before applying them, another solution is to keep cool and wait
for the next version of Linux where, in general, the modifications
have been done but this behavior is /not/ Linux helpful.


QUESTION: I got the patches on some ftp sites, and applied them to the
kernel and tried to compile. It didn't !!. Are the patches buggy?

ANSWER: Before remake, just do a make clean in the directories
involved by the patches. This will force a rebuild of the .o and .a
files. 
If you have a RCS running on your source tree, did you checked a
patched version of the files changed before /any/ CO either by you or
make

Finally, make sure the patches succeded. Normally, failed patches on a
file FILE will leave a FILE# file. Moreover you will get a "chunk
failed" message. It is possible to capture the output while patching,
with the following:

	patch -p0 < patchfile | 2>&1 patch.result | more


QUESTION: What is VFS?

ANSWER: (Ted) Linux 0.96 already has Virtual FileSystem, which means
that it acts as a filesystem switch. It makes it easy for someone to
design another filesystem format and include it in the Linux kernel
along with the standard minix filesystem format. So it /enables/
someone to design a robust filesystem which would have some nice
properties (no 14 chars file name limitation, nor 64Meg limit), and
could be included in the kernel in such a way that both the Minix and
the new one could be mounted at the same time. This solves the
uncompability problem; since the root disk could still use the Minix
filesystem, while the hardisk could be using the new one.



QUESTION: What's about Bus Mice ?

ANSWER: (Nathan I. Laredo) Since the Linux v0.96c-pl2 the kernel does
support LOGITECH and BUS MICE 
If you are unsure that you have a bus mouse or not, check to see if
your mouse card has a selection for a sample rate switchable between
30Hz and 60Hz (or possibly 25/50Hz), if it does not, then it is NOT a
true  bus mouse (InPort mice for example will not work with this
driver). 
To create a bus mouse device:
mknod /dev/mouse c 10 0


QUESTION: What's about TeX ?

ANSWER: The primary site for Linux TeX is 129.78.66.1, this is 
P. Williams' site in Australia. The stuff at tsx-11 was posted by 
T. Dunbar  who does support/maintain the dvilj stuff.


QUESTION: What's about LILO ?

ANSWER: (Werner Almesberger)
LILO  -  Generic Boot Loader for Linux ("LInux LOader") 

This is an ALPHA test release of a new boot loader. Be sure to have
some means to boot your system from a different media if you install
LILO on your hard disk.

Features
--------

- does not depend on the file system. (Tested with Minix, EXT FS and MS-DOS
  FS.)
- can be used to boot from floppies and from hard disks.
- can replace the master boot record.
- can boot non-Linux systems (MS-DOS, DR DOS, OS/2, ...) and unstripped
  kernels.
- supports up to 16 different boot images that can be selected at boot
  time. Root and swap disk/partition can be set independently for each
  image.
- boot sector, file map and boot images can be all on different disks or
  partitions.


Restrictions and known problems
-------------------------------

- SCSI disks are not fully supported yet. (Still waiting for some kernel
  changes.)
- booting other operating systems doesn't seem to work everywhere. If
  everything but booting a non-Linux OS from LILO works on your system,
  you should boot LILO by BOOTACTV and select the alternate OS with the
  latter as a temporary work-around.
- booting non-Linux systems from the second hard disk ("D:") is not yet
  supported.

Please send all bug reports to almesber@nessie.cs.id.ethz.ch


QUESTION: What's about MGR ?

ANSWER: (General Information grabbed from various sources)
There is a MGR channel available , contact the request adress with
help in the body: linux-activists-request@niksula.hut.fi 
The stuff can be found at banjo in pub/Linux/MGR
In brief:

MGR provides:
	- multiple overlapping windows
	- multiple fonts
	- text and graphics in each windows
	- a simple popup menu package
	- a client/server model 'a la' X
	- independance from any peculiar networking technology

MGR consist of a server process and some clients. Each client has his
own window, and can create subwindows. Clients communicate with the
server via a bidirectionnal channel. A C library is provided.

When a new window starts, it is as a terminal emulator running the
shell; for more information you can grab the mgr-man.out from
bellcore.com 


QUESTION: I have successfully compiled MGR, but when I try to run the
program I get "can't find mouse" or "already in use", any clue?

ANSWER: try the following "mgr -m /dev/ttys1" if the mouse is on
the serial 1. Another possibility is to link /dev/mouse with
/dev/ttys1 (assuming your mouse is on serial 1). Or if it's a bus
mouse, "mknod /dev/mouse c 10 0" once.

QUESTION: Any tips for MGR?

ANSWER: Well, I have tried it on my 386Sx Ega/Vga; the screen is Ok
but the Logitech mouse I have is not well recognized.

BTW check the major/minor number for pty's; they should be character
device with 4 as major and 128 and bigger as minor:
ptyp0 c 4 128
ptyp1 c 4 129
...
ttyp0 c 4 192
ttyp1 c 4 193

QUESTION: What's about X11 ?

ANSWER: See the section devoted to X11 in this FAQ.


IX. GCC MISC INFORMATION
========================

The official release of GCC for Linux is 2.2.2d, information for the
previous versions (1.37, 1.40) can be found in FAQ of July 92.

I think this section is needed, 'cause a) gcc is the compiler under
Linux, and b) the gcc-2.x is still evolving, and many information change
constantly. 
To conclude this short introduction (in fact the conclusion will be
longer than the introduction :), the most recent release of gcc-2.2.2d
can be found at tsx-11 in /pub/linux/GCC, and also at
fgb1.fgb.mw.tu-muenchen.de under /pub/linux/GCC, and one of the
"specialist" is Hongjiu Lu (hlu@eecs.wsu.edu). There is a special 
channel for GCC, feel free to contact the linux-activists list.
The Information provided in this section which envolved GCC2.xx
are extracted from the FAQ GCC, written by Hongjiu, provided
with the current distribution of gcc /READ IT/
Finally whenever you report a bug please give the version of gcc, the
version of your kernel, otherwise NO ONE can help you.


QUESTION: I don't know how to install gcc stuff, is there special
places?

ANSWER: gcc-2.xx is splitted in 3 main files 2.xxdb.tar.Z,
2.xxlib.tar.Z and 2.xxmisc.tar.Z, some utilities (binutils.tar.Z) and
shared libraries are also provided. To install them do the following:

First of all, backup the old compiler. YOU MUST BE SURE THERE IS NO
OTHER C COMPILER INSTALLED ON YOUR SYSTEM. What is meant by compiler
is all the stuff: binaries, header files, libraries and crt0.o. I
assume that whateverplace contains the 2.xxfiles you have downloaded.

cd /usr
tar xvpzf whateverplace/2.xxmisc.tar.Z

read the FAQ, and README in /usr/install/gcc2. 


QUESTION: What are the contents of them?

ANSWER: 2.xxdb.tar.Z contains cpp, libg.a and libc_p.a. 2.xxlib.tar.Z
contains cc1 and cc1plus. 2.xxmisc.tar.Z contains gcc 2.xx drivers,
header files, libraries, manual pages and installation instructions.
Another file, XXXXinc.tar.Z, where XXXX is the current version number
of Linux kernel, has all the header files to replace the header files 
from kernel. YOU MUST INSTALL IT. Please read README for details.

(gcc.2.2.2d 08/15/92)
1. 2.2.2ddb.tar.Z (libg.a, libc_p.a and jump stable stuffs)
   You just have to install jump/lib*.so.* by hand.
3. 2.2.2dg1.tar.Z (libg.a compiled with -g1 to get a smaller libg.a)
4. 2.2.2dfix4.tar.Z (<time.h>, <limits.h>,  <unistd.h>, libc.a and
   shared/*.a)
5. shlib-2.2.2d.tar.Z (build the stub libs for the shared libs.)
6. libc-2.2.2dfix4.tar.Z. It has the following files:

    ./posix/sysconf.c

You need to delete by hand libinet.a in
	/usr/lib/gcc-lib/i386-linux/2.2.2d



QUESTION: I seem to be unable to compile anything 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

BTW Since swapping is possible, I have heard that compilation works 
with only 2Meg and a lot disk traffic :) Isn't it great?


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. lib*.a and
*.o should be in /usr/lib or /usr/local/lib


QUESTION: I tried to port a /new/ version of gnu stuff. But in the
linking phase, gcc complains about the missing libg.a. 


ANSWER: Yes this is well known for compiler version earlier than
2.2.2, throw away the flag -g that's all, anyway libg.a is /only/ for
debugging purpose. 


QUESTION: How to compile programs which may be debugged with gdb?

ANSWER: There are different ways to handle this problem. If
you have the gcc2.2.2 or later it's simple, use the -g flag. Otherwise
there are different possibilities:
1) As there is no libg.a, you should throw away the -g flag in link
phase, this means that the compilation must be done in two steps
example: instead of "gcc -g monprog.c -o monprog", use the following
"gcc -g -c monprog.c" and then "gcc -o monprog monprog.o"
Alas this method is not that good if you are using Makefile.
2) The other way is to create an empty libg.a as follows (Peter
Macdonald trick):
- create libfake.c containing libgfake() {}
- compile it with: gcc -c libfake.c
- create the libg.a with: ar r libg.a libfake.o
2bis) The more tricky Humberto method:
cd /usr/lib
ranlib libg.a

then gcc -g monprog.c -o monprog will produce a debuggable monprog


QUESTION: When compiling some code, cc1 complains about some insn
code, what's that? 

ANSWER: An insn is an internal representation that gcc uses when
compiling. The main part of gcc is to take ordinary c (or c++) code,
and compile it, while ding optimizations in insn part, which is
soft/hard independant. Then another part which is hard/Os dependant
takes the insns and translate it in assembly language. The fix is only
to turn off the optimization flag (-O). 


QUESTION: While compiling some stuff, I'm getting the following 
error message:
Undefined symbol ___addsf3 referenced from text segment
as well as ___mulsf3 and __cmpsf2. 
These symbols are not in the program or in it's header files.

ANSWER: These are math helper functions, and you can usually compile
these programs to use the kernel floating point routines by adding
'-m80387' to the compiler switches. If the program does any wierd 
fp math (exp(), sin()) it'll die when you run it though.



QUESTION What's about gcc2.x ?

ANSWER: It has been ported to linux, it is (pretty) stable and works. 
The files are 2.xxlib.tar.Z and 2.xxmisc.tar.Z Uncompress and untar
2.xxmisc, read the FAQ enclosed and play with it.  You can find these
files at tsx-11 in binaries/compilers/gcc-2.x. One of the most recent
version is on tsx-11 and fgb1.	
The shlib.tar.Z enables you to create shared libraries, read the
README file included
The 096inc.tar.Z contains the header files from the kernel


QUESTION: What can gcc-2.x do for me, that gcc-1.40 cannot?

ANSWER: Shared libraries: small programs shrink by an average factor
of 2~3, larger program by 50K. It also compiles C++, and so replace
both gcc-1.xx and g++1.xx. And also:
- ANSI and BSD 4.4 compatible stdio
- iostream for g++

QUESTION: I can't run g++ due to the lack of "expr"; where can I find
it ?

ANSWER: In the shellutils-1.6.tar.Z (or whatever is the last release)
on prep.ai.mit.edu 

QUESTION: I have grabbed the new gcc2.xx, but I can't use it whenever 
I compile (even hello world program) I get "parse error before ('s";
any clue ?

ANSWER: Yes, it's caused by bad compress/tar binaries, use the one 
provided at tsx-11 in linux/binaries/usr.bin

QUESTION: Is there a bug in how g++ and gcc handle include files?
'cause I can't get them to find files in the g++-include directory.

ANSWER: Did you run "fixfiles"? The file permission in g++-include is
640 and should be 444.


QUESTION: I've seen on my ftp-server that there are different
***fix*.tar.Z files in the GCC directory, do I need them? 

ANSWER: If you got a very early copy of gcc 2.2.2, please get
2.2.2fix1.tar.Z and 2.2.2fix2.tar.Z, and libc-linux.fix.tar.Z for the
C lib sources, and new shlib-2.2.2.tar.Z if you want. If you got gcc
2.2.2 after you saw **fix*.tar.Z, you are fine. 

QUESTION: Is stdio ANSI compatible?

ANSWER: Yes, please test it.

QUESTION: Is g++ in 2.xx?

ANSWER: Yes.

QUESTION: How do I use gcc?

ANSWER: Read manual page, gcc.ps or gcc.man in /usr/install/gcc2.

QUESTION: What options can I use for gcc?

ANSWER: Read manual page, gcc.ps or gcc.man. Also -static tells gcc
to use the static libraries, -nojump forces gcc to use the classic
shared libraries. The default is the jump table version of shared
libraries. The shared libraries for X are linked with the jump table
version of shared C library.

QUESTION: Where is the source code of the new libc.a?

ANSWER: The same place you find this file. It is called 
lib-src-yy.xx.TZ.

QUESTION: Why does g++ complain, even die?

ANSWER: You need "expr", which is in GNU shell utilities 1.6, echo (?)
and sed.

QUESTION: How do I generate code for 486?

ANSWER: Add -m486 to CFLAGS.

QUESTION: I heard malloc (0) wouldn't work with Linux, what should I
do?

ANSWER: include <stdlib.h> and don't define NO_FIX_MALLOC.

QUESTION: Why does gcc say "xxxxx..h not found"?

ANSWER: see QUESTION: What are the contents of them?

QUESTION: I really followed every step in the documentation, but when
I do "make", why does it say "don't how to make xxxxxx"?

ANSWER: The dependency in Makefile is dated, you need to make a new
one. Please get some guide on make and read Makefile. For the kernel
sources, please do

cd src/linux
make dep

QUESTION: How do I compile programs under Linux?

ANSWER: The Linux C library is trying to be ANSI/POSIX compliant. It
is also very compatible with SYSV and BSD. The C library is loaded
with SYSV and BSD functions. There are three exceptions:

1. signal in Linux is POSIX.
2. tty in Linux is POSIX.
3. time functions are POSIX, plus a few BSD and SYSV extensions.
4. setjmp/longjmp functions are POSIX. But you can use -D__FAVOR_BSD
   to make it BSD or use sigsigjmp/siglongjmp.

When you compile a program under Linux, your best bet is include all
the appropriate header files and use -Wall. All the usable functions
and global variables are declared in the corresponding header files.
YOU SHOULD NOT DEFINE ANY functions or global variables OF THE LINUX C
LIBRARY IN YOUR CODE IF YOU WANT TO USE THE SHARED LIBRARIES.

After saying all those, you now should know you can compile a program
with -D_POSIX_SOURCE or -D_GNU_SOURCE (read <features.h> for details).
With a few modifications you can even use -DSYSV, -DUSG or -DBSD. Some
codes need to define -DSTDC_HEADERS for ANSI C compiler like gcc here.

To use malloc () and calloc () safely under Linux, please include

<stdlib.h> and don't define NO_FIX_MALLOC.

BTW, gcc -traditional should work with gcc 2.2.2d or above.

Please also read ChangeLog for the latest enhencement.

Please read the header files for details. Maybe you should get a book
on POSIX. Any suggestion of the book list?


QUESTION: How can I write codes suitable for building shared library ?

ANSWER: (H.J. Lu, hlu@eecs.wsu.edu, 09/01/92)
There are some guidelines for writing codes suitable for building the
shared library with jump table.

1. Never, ever allow library users to access global data directly.
   Always, always make them go through access functions.  That way,
   you are free to change the internal implementation, but can
   easily provide backward compatibility by simply replacing the
   access functions.

2. If you do have to define some global data for library users to
   access, put them into a separate file. Never mix them with other
   library code. Also make sure the relative locations of the global
   data will not change very often. One solution is leave some spaces
   for them to grow.

X. SCSI SPECIAL
===============

This section was written by Drew Eckhardt, the last update of the
information enclosed  was  03 Sep 92 12:31:27 +0200.


QUESTION: What SCSI hosts are supported?

ANSWER: The Adaptec 154x, Adaptec 174x in "standard" mode, Future
Domain 16x0,  Seagate ST0x, Ultrastor 14F, and Western Digital
7000FASST  are supported.  Various Adaptec clones from Bustek 
and Future Domain are known to work, in both ISA and EISA flavors.

Some patches for Future Domain TMC 950 boards were posted to the net.
These will be incorporated into the "Standard" SCSI release RSN.

QUESTION: Which disks ?

ANSWER: Anything that works with your host adapter electronically, and
is new enough to support a December 1985 draft of SCSI-I.  

Sysquest removable drives are known to work.  However, DO NOT remove a
mounted cartridge.  This will trash your filesystem. 

Extended partitions also work, with 11 Extended partitions per disk 
allowed in combination with the four real partitions and whole disk
sub device.

Disks up to two terabytes in size will work, since the sd drier
switches to 10 byte reads when necessary.

QUESTION: What about SCSI tapes ? 

ANSWER: Tapes will be supported after the new interface is inplace on
the SCSI driver stack.  The new interface will allow transfer between
USER and KERNEL memory, which is what is needed for character devices
(like tapes), without using the generic SCSI ioctl call.

Some one is working on a SCSI tape driver that works with the 
old interface.

QUESTION: What about CD ROMS?

ANSWER: There is a beta version of SCSI CD-ROM code floating arround,
with support for ISO-9660.

QUESTION: How do I get SCSI information?

ANSWER: Subscribe to the SCSI channel of the linux-activists mailing list.
mail linux-activists@joker.cs.hut.fi 
And put in the header.
       X-MN-Admin: join SCSI

QUESTION :  I can't make a filesystem on /dev/hd*

ANSWER : /dev/hd* aren't your SCSI disks.  /dev/sd* are. 
See below for approproate major / minor numbers if they 
do not exist on your root diskette.

QUESTION: How do I partition the disk?

ANSWER: Use pfdisk or the DOS partitioning program of your choice.

The problem with partitioning SCSI disks and Linux is that Linux talks
directly to the SCSI interface.  Each disk is viewed as the SCSI host
sees it : N blocks, numbered from 0 to N-1, all error free.  There is
no portable way to get disk geometry.  

However, DOS doesn't like things like this, it demmands that BIOS
present it with a normal Cylinder / Head / Sector coordinates.  So,
BIOS does, and it comes up with some fabrication that fits what DOS
wants to see.  You don't want to disagree with what BIOS thinks when
you write the partition table. 

Moral : if you partition under Linux, and use a disk with DOS too, you
MUST know the geometry according to the BIOS. 

If you partition under Linux, as long as you have the starting 
sector number of a partition, and the length in sectors,
Linux will be happy.


QUESTION: The stock {f,pf}disk programs don't work.

ANSWER: Yes.  The device names /dev/hd* are hard coded into these 
programs, and they don't see /dev/sd*.

If you want, YOU can change the /dev/hd* devices to be links to or
other entries for the SCSI devices.  

Also, pfdisk should be callable with a device name.

Hopefully, some one will change the partitioning programs to respect
the SCSI devices. 

QUESTION: Where is the latest version maintained?

ANSWER: headrest.woz.colorado.edu:/pub/linux

Right now, the newest publically released code is in .97.

Join the list before you grab anything.


QUESTION: What are the major / minor numbers for SCSI drives?

ANSWER: Right now, it is theoretically possible to have 21 SCSI
devices in the system.  With SCSI- MFM / ESDI / SMD bridges this can
be even more drives, as each id may have several drives on it each set
up as a LUN of that id.  Needless to say, if we have allowed for 16
partitions per SCSI drive, we're pushing the limits on minor numbers.
Therefore, a yucky dynamic numbering scheme is used.

block device major 8 is used for SCSI drives. I personally like
/dev/sd[n][p], where n is the drive number, and p partition letter -
but this is entirely personal preference.
        
Minors are assigned in increments of 16 to SCSI disks as they are
found, scaning from host 0, ID 0 to host n, ID 7, excluding the host
ID.  Most hosts use ID 7 for themselves.

A minor where minor mod 16 = 0 is the whole drive, where minor mod 16
is between 1 and 4, that partition, extended partitions dynamically
assigned from 5 to 15 inclusive.  Note that the gendisk.c module
prints partition tables on initialization - you should be able to see
them there.

Example : I have four SCSI disks, set up as follows 
        Seagate ST02, ID=0
        Seagate ST02, ID = 5
        Ultrastor 14, ID = 0
        Adaptec 1542, ID = 0

The first disk on the seagate at ID 0 will become minors 0-15
inclusive, the second at ID5 16-31 inclusive, the disk on the
Ultrastor 32-47, on the Adaptec 48-63.


QUESTION: I can't use more than X SCSI disks.

ANSWER:  Change MAX_SD in sd.h, MAX_SCSI_DEVICE in scsi.h, and
recompile the kernel. 

QUESTION: How do I reduce kernel bloat and eliminate the drivers I
don't want?

ANSWER: Simply #undef CONFIG_DISTRIBUTION in include/linux/config.h,
and define the macros for the SCSI hosts you want enabled.

QUESTION: I get SCSI timeouts.

ANSWER: Make sure your board has interrupts enabled correctly.

QUESTION: The seagate driver doesn't work.

ANSWER: There are two possibilities
1) Is the board jumpered for IRQ5 ? 

The factory settings are
for MSLOSS, and have interrupts disabled.  Interrupts are controlled
by the W3 (ST01) or JP3 (ST02) jumper, which should have pins FG 
shorted.  See your manual.

2) Cached machines will not have problems IF the Seagate's address
space (typically C8000 - CAFFFF) is not marked "non cacheable."
This applies to the i486 internal cache as well as i386/i486 
external caches.

This can be set in the XCMOS of most machines.  If you can't disable
cache for the Seagate's area (16K in size, starting at the base
address), then you must disable the cache entirely, otherwise
it won't work.

QUESTION: The Adaptec driver doesn't work.

ANSWER: The Adaptec BIOS does some initialization that affects 
the driver.  If the BIOS was disabled, it may fail on your system.

QUESTION: What about bugs?

ANSWER: It works on MY hardware.  It works on Tommy Thorn's Adaptec
system, Dave Gentzel's Ultrastor, Thomas Wuensche's WD7000, Rick
Faith's Future Domain, and quite a few other systems.

Bugs that are there will mostly be very hardware specific, and nasty
to track down.  SCSI should be basically error free - consequently,
the error code has not been heavily tested, and there are known bugs
in it. 

If you have found a bug, please mail it to the mailing list with
specifics of your hardware.  Other people may have the same problem, a
solution, etc.

If you provide a patch, in context diff form, the bug will be fixed 
Immediately.  If you can provide me with a procedure that reproduces
the bug on *MY* system, the bug will be fixed "soon."  Your chances 
of getting it fixed increase exponentially with the amount of 
information provided.  If I can't reproduce it, and your 
description gives me no idea as to where in the code to  look,
it won't get fixed by me.

QUESTION: What are the known bugs?

ANSWER: The error routines are imperfect, meaning they trap errors but 
don't retry correctly.  This can cause READ CAPACITY
to fail in sd_init.

Many of the drivers cannot abort a command that is in progress - if 
something goes haywire, all drives off that controller will hang.
 
One user has problems with the seagate driver going "Kablooey", or 
reseting the system.  Kablooey is defined as the screen
disentigrating into multi-colored random garbage.

Another user could never get the seagate driver to work period.

QUESTION: I get a message saying READ CAPACITY FAILED. What does this
mean? 

ANSWER: One of two things.  First thing is that there is a bug in the
midlevel error handling code.  When an error condition is returned,
things aren't retried.  Some SCSI disks get unhappy at the sight of
the initialization routines, and will return an error condition for
the first "real" command that they run.  INQUIRE doesn't count, since
that will allways return successfully, irregardless of pending error
conditions, unless your drive is Kaput.

You could also have a flakey disk, but this is unlikely.

The latest version of the SCSI drivers is kludged to retry the
READ_CAPACITY, even though the midlevel driver claims to have retried
it, and you should no longer get this message.  

Upgrade.

QUESTION: Why does the system "hang" when SCSI disk access occurs.

ANSWER: Older Linux distributions (pre .97)  used  earlier versions
of the SCSI drivers, where the drivers were not interrupt driven
(easier debugging, or so we thought).  Since the drivers did not return
from the device driver strategy routine, until the SCSI command
completed, no other tasks were scheduled, and ineteractive performance
was abysmall. 

Upgrade.

QUESTION: Why can't I swap to a SCSI disk?, Why can't I mount a SCSI
disk as root? 

ANSWER: This was due do a race condition that has since been fixed (I
think). 

It only manifested itself in drivers using the command() interface
(see bellow), but this interface isn't used very much as it was there
mostly for develeopment.

Upgrade.


QUESTION: What future developments are planned?

ANSWER: The following changes will occur (listed from highest to
lowest priority) : 

        - The new interface is almost done.  Right now, our biggest 
		problem is reading one block / revolution, 
		yielding a ~60K/s transfer rate on unbuffered 
		drives.  Buffered disks have seen up to 300k/s.

		- support for scatter / gather is there.  This 
		  means that all read (and readaheads) will be 
		  handled via one command.  With the current 
	          two block readahead, you will see 3X the
		  transfer rate on unbuffered drives from this 
		  alone.

		- support for raw devices is there.

		- support for file system block sizes != 1K will
		  be added.  With a 4K file system, you will see 
 		  4X the performance on unbuffered drives.

		- SCSI commands are issued as linked commands
		  wherever possible, eliminating the arbitration / 
		  selection / message out phases needed to start 
		  a command "from scratch".

 		- One outstanding command per LUN is supported,
	          vastly improving performance in multi-disk systems.

 		- The probe code is completely new.  The low level
		  drivers get a chance to attach(), and will be 
		  able to do synch negotiation at this time.  

		- I have the mode page specs, and am looking at 
		  doing "appropriate things" w.r.t. cache enable,
		  buffer control, etc.  It seems that some drives
		  power up, and keep the buffer off until told otherwise
		  in software.
	
        - Support for LUN != 0 will be added

        - Support for block size, where 1024 % blocksize == 0
                will be added.

        - Support for tapes will be added
        

QUESTION: WHEN?

ANSWER: I'm working on it, but other things like "real" work have been
getting in the way.  

XI. X11 THE MAXIMUM and MORE
============================
XI.A. X386 GENERAL INFORMATION
XI.B. HARDWARE REQUIREMENTS: Supported Video cards.
XI.C. LINUX DISTRIBUTION: Files required, Current version.
XI.D. LEARNING/USING X: Pointers to X documentation.
XI.E. DEBUGGING STARTUP PROBLEMS: Checklist, Screen restoration, Hanging.
XI.F. XCONFIG: Video mode settings and common errors in Xconfig.
XI.G. X-APPLICATIONS: Compiling X programs.
XI.H. BUGS

This entire document will need revision when xfree86-1.1 is released.
However some of the information is useful for bringing up any 
version of X386/XFree86.




XI.A. X386 GENERAL INFORMATION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

QUESTION: What is the X11 release supported by Linux?

ANSWER: It's the X11R5 (X386 1.2) 
It will soon be XFree86 as of the next public release  which
should be available by the middle of Oct. It will be announced
on comp.os.linux.


QUESTION: What is X386?

ANSWER: X386 is the port of the X11 server to System V/386 that was
done by Thomas Roell (roell@informatik.tu-muenchen.de).  It supports a
wide variety of VGA boards.  X386 1.2 is included in MIT's X11R5
distribution.

The Linux X386 port was based on the stock distribution from X11R5,
from MIT and was done by Orest Zborowski (obz@sisd.kodak.com).

It has since moved to becoming part of the standard xfree86 distribution.


QUESTION: Where can I get X386 1.2 (X11R5)?

ANSWER: The X386 1.2 sources are available at any site that
distributes the X11R5 source (too numerous to list here, but includes
export.lcs.mit.edu)


QUESTION: Any tips on compiling X11R5?

ANSWER:
-  Dont do it.
-  XFree86 will be distributed with a link kit so you can optionally
	include what you like in the server.
-  You will need lots of disk space (around 150Meg for the MIT core). 
-  Look at mit/server/ddx/x386/README and follow any instructions for
	your particular platform. 
-  Contact the X11 channel at linux-activists




XI.B  HARDWARE REQUIREMENTS:
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Approx: at least 4 megs of ram + swap ...slooooww. 10 Meg disk for X.
Another 6-10 meg of disk for GCC if you want to compile X11 programs.

QUESTION: What VGA boards are supported?

ANSWER: 
	et3000, et4000, gvga, pvga1a, wd890c00, tvga8900, ati ver. 5 or 6,
        8514/A, generic vga: 800x600 mono (Xmono), 640x480x16 (Xega).

Standard x11v1.1 or xfree86 server:
	ET3000 		(for ex. GENOA 5300/5400)
        ET4000 		(Tricom, STB PWR Graph, Sigma Legend, etc.)
        GVGA 		(Genoa 6400)
        PVGA1A 		(Paradise VGA Professional) ... see BUGS.
        WD90C00 	(Paradise VGA 1024)

supported by xfree86:
	TVGA8900 	TRIDENT 8900 support is in xfree86	

	ATI		ATI VGA WONDER XL and most ATI VGA WONDER PLUS 
			cards (chip version 5 or 6). 
			Courtesy Rik Faith (faith@cs.unc.edu)
ATI Notes: An example Xconfig file is available from ftp.cs.unc.edu:
/pub/faith/linux/x386. Please note that:
1) clock.exe does *NOT* work with ATI cards.  
2) The ATI Wonder driver in xFree86 is known only to work with 
   chip version 5 and 6 cards.  This is most ATI VGA Wonder PLUS cards 
   and all ATI VGA Wonder XL cards (although sporadic problems have been
   reported even with these very recent cards). The driver will tell 
   you which ATI chip version you have, as will the ati.test program, 
   which is part of the source code. 
   An old source distribution is available from ftp.cs.unc.edu.

MONO    Any vga card should be able to use 800x600 mono.
	Use the Xmono server and the vga2 section of Xconfig.

Also available as ALPHA test versions (join the X11 channel):
(The standard x386/xfree86 server will not handle the following cards)

8514	ATI graphics ULTRA, ATI graphics Vantage 
	(should work with any VESA standard 8514/A register compatible card?)  
	tsx-11 pub/linux/packages/X11/X8514/  (Xlinux.8514.T.Z x.8514.src.T.Z)
	courtesy Kevin Martin (martin@cs.unc.edu).

Xega	Generic ega/vga compatible server.
	This requires a microsoft mouse at /dev/mouse for now
	and it does not use Xconfig so use environment variables
	to define the font path etc.
	A link kit is available at tsx-11 (you need gcc2.2.2).
	in pub/linux/ALPHA/Xega/X386.ega.T.Z
	courtesy Marc Hoffman (marc.hoffman@analog.com).

The Xega and X8514 servers are compiled with the gcc-2.2.2 libs and will be 
upgraded soon. They should however work with progrmas/fonts in new X11
releases as long as you ensure you have the shared images needed by
the server in /lib.

WARNING: Do not try to bring up an Xserver that does not support your 
hardware. I dont know of cases where damage has resulted but you're taking 
chances if you push your monitor beyond its specs.


QUESTION: What Mouses are supported?
	
ANSWER: Logitech, Microsoft, MouseSystems .... compatibles ...
	Busmouses supported by linux: microsoft, Logitech.
	
	Kernel patches for ATI XL with inport busmouse (may work with 
	other inport busmice) available from Bob Harris (rth@sparta.com). 
	



XI.C. LINUX DISTRIBUTION
~~~~~~~~~~~~~~~~~~~~~~~~

QUESTION: What is the current version?

ANSWER:	The newest public Linux release is x11v1.1. It was compiled
with gcc-2.2.2 for linux and is available for example at
tsx-11 in pub/linux/packages/X11/x11v1.1/

xfree86-1.1 will be the next public linux release and should
become available by mid-October. 

If you must have a beta X server today and cannot wait you
can join the X11 channel and get xfree86-1.0Ya


QUESTION: What Files do I need to download?

ANSWER: For Xega see the notes in the previous section.
For x11v1.1: 
There are README files in the distribution directory.
The standard distribution has (version names and .Tar.Z omitted)
If you are on a slow modem connection your best bet is to wait
for the next public release for linux (by mid Oct).

 xbase 	:  enough to bring up X(****).
 xextra :  useful (necessary?) X utilities.
 x75dpi	:  pretty fonts (some X apps complain if they are missing)
 xprog	:  X include files and shared libraries that allow
 	   you to compile X programs. To do this you need a
 	   working gcc-2.2.2 (you can get by with a higher version
 	   You'll need 2.2.2 libraries. Read the GCC FAQ).

**** You need The shared images libc.2.2.2 and libm.2.2.2 in /lib
x11v1.1 is compiled with gcc-2.2.2 so all the X11 shared libraries
and shared images depend on the gcc-2.2.2 libraries.
I will try to get them under the X hierarchy on tsx-11.



QUESTION: Where do the X11 files go? What are they?

ANSWER: x11v1.1 uses the directories /usr/bin/X11 for programs
and /usr/lib/X11 for support files.
The support files include default/example Xconfig, xinitrc, twmrc
which you should copy to your HOME directory (as Xconfig, .xinitrc
and .twmrc) and edit them to define your hardware and X11 setup.
There is a subdirectory etc/ in the support directory, and /doc that 
should contain some documentation and termcap entries for xterm and 
additions to ~/.profile to add X11 to your path.




XI.D.  LEARNING/USING X
~~~~~~~~~~~~~~~~~~~~~~~

QUESTION:

ANSWER: Try man X386; man Xserver; man xterm; man twm; man xinit
on any unix machine.  The man pages on xterm and twm will reflect
behaviour on Linux systems quite accurately. The others will give you
some bearing though not every option will work.  These man pages are
part of xbase in the linux distribution.
	

QUESTION: What docs are available besides man pages?
	
ANSWER: The FAQ in comp.windows.x11 is extensive and has a
bibliography. The FAQ in comp.unix.sysv386 has more X386 specific
info. There is also the Xt-FAQ. You should find these soon under
the X11 hierarchy on tsx-11 in the directory doc.





XI.E. DEBUGGING STARTUP PROBLEMS:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

QUESTION: How do I start up X?

ANSWER: Type 'startx' at the shell prompt.
Before doing this you should :
1) copy the file Xconfig from the X11 support directory to your 
	HOME directory (/usr/root?).
2) Edit Xconfig and set the video data for you card and monitor. 
   Use the clocks appropriate for your card and the modes appropriate 
   for your monitor for those clock values. To determine what values are
   appropriate read the Xconfig section. 
3) Set the mouse device in Xconfig correctly.
4) Ensure that there is a termcap entry for xterm in /etc/termcap
   (One is available in the subdir /usr/lib/X11/etc or /doc).
5) Ensure that the X11 binaries are in the path example:
   add the line PATH=${PATH}:/usr/bin/X11 to ~/.profile or
   look at bash.ad in /doc.
Now type startx.


QUESTION: I cannot type in my xterm 

ANSWER: /dev/console must have major=4, minor=0
	rm -f /dev/console; ln /dev/console /dev/tty0


QUESTION: What are some of the common omissions and errors?

ANSWER: (Peter)
1) Add /usr/bin/X11 to your path.

2) Add the xterm termcap entry to /etc/termcap.

3) ln -s X386 X in /usr/bin/X11/ directory.
   ln -s Xmono X (if you want to use the mono server).

4) Run X as root first. This avoids some trivial problems.

5) If you change the font path entry .... X386 is finicky about
   the syntax. 

6) Make sure your mouse entry in Xconfig points to a legitimate serial 
   device  ... usually something like:  microsoft "/dev/ttys1"
   serial devices have major #4 minor 64,65 ...
   ls -l in /dev will show you the major and minor entries.

7) Need read/write/exec access to /tmp directory 

8) Use startx 2> x.err to log your error messages. If the server sticks 
   and you have to reboot you'll probably loose this stuff... see notes
   on `hanging' below.

9) See Xconfig problems and the device list below.

10) Have you read the X386 man page?


QUESTION: Why does X not restore the text mode?

ANSWER:	Restoration of text mode does not work on many ET3000's.  If
X does not restore your display properly maybe you want to get
vgalib to do the restoration.
 

QUESTION: My server "hangs" Why?

ANSWER: (Peter) Quite often it isn't a hang. If the server grabs the
screen(and enters graphics mode) and then dies, it may return you to
bash *without* restoring the screen. In other words, just because you
see no output, don't assume it's running/hanging.  The way to test
this is to see if you can use a bash command to spin your disk. eg.:
sync; ls -l /usr/bin/X11.

Also - I *suspect* that (at least for me), you can kill the
server if you include the servernum option in the Xconfig

You can kill the server when you want to by typing ctrl-alt-backspace. 
Then a couple of ctrl-C 's in case your stuck in xinit.

The two line message
 		X386 version .....
 		(protocol Version ....
is returned from the X386 programme itself, so if you get
this (or if the screen blanks) X must be starting.


QUESTION: When I try to use the X11 v1.x I got "Cannot connect to
server" or "process does not exist", any clue ?

ANSWER: The cause might be wrong fontpath variable setup in your
Xconfig; uncomment and set the correct fontpath variable.


QUESTION: Why cant I run more than 4 xterms?
	  How can I have more than 4 pty's ?

ANSWER: set the number in the header include/linux/tty.h and 
recompile the kernel. Also make nodes :
	mknod /dev/ptypxx 4  minor  (where minor = 128 + xx)
	mknod /dev/ttypxx 4  minor  (minor = 192 + xx)
	This is for before linux-0.97pl6.... for later versions
	you only need to make the nodes.
	

QUESTION: I have trouble with my logitech Pilot mouse and X under
Linux, any clue ? 

ANSWER: (Thomas Roell?) There are TWO line of Logitech mice out there.
One is the programmable and uses MouseSystems protocol at startup.
X386 reprogramms them to use another protocol. If you specify
'Logitech' in the Xconfig, X386 assumes a mouse like C7 or S9 (notC7-M).
The second line is the MicroSoft compatible. Currently all newer
Logitech mice follows this practice, like the MouseMan. In that case
you have to say 'MicroSoft' or 'MouseMan'. 


QUESTION: How does X11 start up?

ANSWER: The startup involves the server (/usr/bin/X11/X), and some
programs like startx and xinit.

Typing startx runs the script  /usr/bin/X11/startx. Look through 
startx. For explanation of the server arguments try man Xserver.
startx does little other than gather arguments and then call xinit.

xinit **calls** X (X is linked to X386). xinit therefore continues to
run, and quite often you will receive error messages from xinit rather
than X itself. If you get the message "giving up", it means X has died
(quite probably it died immediately) and xinit has been unable to start
x applications. xinit processes the startup script xinitrc.


QUESTION: How can I see what startx passes to xinit, and xinit to X?

ANSWER:  Add the line:  set -x      near the top of startx.

To see what xinit passes to X, try: (Peter)

	rm /usr/bin/X11/X
 - yes, if you have set it up correctly, X should only be a link 
 so it's safe to remove it.

 then create a shell script called /usr/bin/X11/X containing:
	#/bin/sh
	echo $*
 and run startx. You should see something like:
	X :0
 which is all xinit passes to X. If you don't see the :0, you may not
 have your DISPLAY=":0" set correctly. THEN RESTORE X!! :
	rm /usr/bin/X11/X
	ln -s /usr/bin/X11/X386 /usr/bin/X11/X


QUESTION: What devices does X depend on:

ANSWER: check your device numbers with ls -l /dev. You should have:

5 0 tty
4 0 tty0
4 0 console
4 1 tty1 (etc)
1 1 mem

4 128 ptyp0 		pseudo ttys used by xterm/emacs etc 
4 129 ptyp1 (etc)	to talk to unix programs.
4 192 ttyp0
4 193 ttyp1 (etc)

4 64 ttys1 		one of these is the mouse 
4 65 ttys2		or you have a busmouse.
10 x mouse 		busmouse x = 0 => logitech 1 => ps/2 2 => microsoft.
/tmp/.X11-unix/X0       socket used by X apps to talk to the server.
			this is created by X386.




XI.F. Xconfig: Xconfig and Video mode settings.
~~~~~~~~~~~~
QUESTION: What do the mode names mean?

ANSWER: The mode names like "640x480" are used to match entries in 
the modes line with the modeDB entry which actually defines the mode. 
You can toggle between modes in the modes line  with ctrl-alt-numericplus. 
If you're experimenting with 640x480 you can define 
      modes "640x480a" "641x480b" "642x480c"
with corresponding entries under ModeDB so you can toggle between 
these three modes. Try man X386.

QUESTION: How do I compute the numbers for the video modes?

ANSWER: See if there is an entry that matches your chip/monitor in
vga.dbase (aka X386modeDB). Use the clock entries for your chip
and the mode entry for that clock appropriate for your monitor.
If you cant find a mode entry for a particular clock 'needed_clock'
but can find a mode entry (for your monitor) for a nearby clock value
'found_clock', scale all numbers in the modeDB entry by 
(needed_clock/found_clock). man X386 and Read video.tutorial for
more info.  These files are in the linux X distribution.


QUESTION: How can I determine the clocks on the video chip?
	Where can I find clock.exe or clock.pas ?

ANSWER: You can get X to tell you what it finds by commenting the
clocks entry in the vga section. Use 'startx 2> x.err' to log the output.
If X starts up this file gets the clocks only after you exit.

The clocks entry in Xconfig serves as an index. example: 
clocks 1 2 
ModeDB
1 640x480 .....
2 800x600 .....
means the first clock on the chip will be used for the 640x480 mode
and so on. Usually on uses the MHz value for the clock for convenience
instead of 1 2  you probably have 25 28 ... etc.

clock.exe is a dos program that reports the clocks on ET3000/ET4000
boards It was included in digest#150 Vol2, clock.pas was in digest#156
Vol2. (also tsx-11 pub/linux/INSTALL/dos_util).
usage is ( C> is the dos prompt ) :
'C>clock ET3000'  or  'C>clock ET4000' depending on the chip you have.
Note 'clock et3000' will not work .... it is case sensitive.


QUESTION: What are common problems with Xconfig?
 
ANSWER:If X isn't firing at all, or even if it clears the screen and
crashes (see below) you almost certainly have a fault in Xconfig.

1. Note that the server X interprets Xconfig. (not xinit)

2. If you have a fault in Xconfig it is possible to crash or hang the
server without getting an error message.

3. leave the two paths at the top of Xconfig commented out when testing.

4. test with only one graphics mode included - one you are most sure of.

5. If you make a mistake in the mouse section, you will (I understand)
get an error message, so if you don't get some mouse error, try
elsewhere first. (eg "No such file or directory" indicates you have a
fault in the "/dev/ttyxx" line, or /dev/ttyxx doesn't exist.

6. *NB* X looks in your home directory first to find an Xconfig. make
certain it's using the one you've been working on!

7. you need double quotes (") around your chipset and modes: eg
	chipset "et4000"
	Modes   "640x480" "640x481" "800x600"
and around the /dev/ttyxx eg.:
	microsoft "/dev/ttys1"

8. Check your VGA section and modeDB first.

9. ensure ModeDB clock speeds match the VGA section. Comment out any
unused lines in MODEDB.

eg  clocks  25 36 00 00 00 00 00 00 

then you *must* have (and only have) lines under modeDB corresponding
to speeds 25 and 36. If you have one with (say) 62 uncommented out in
the modeDB section in place of the 36 line, you will cause the server to
die immediately with no error message.

10. a syntax error (such as an unrecognised word) in Xconfig will cause
a death with no warning.

11. videoram must equal the amount of display ram on your chip.


QUESTION: What do I use in my Xconfig file to use the bus mouse?
Logitech doesn't work.

ANSWER: (Nathan I. Laredo)
Here are the mouse lines from my Xconfig:

BusMouse   "/dev/mouse"

You may add a sample rate if you want, but chances are, unless the model
number on your mouse matches mine: PC-93-9MD it probably will cause your
machine to lock up, as I've gotten several reports saying that.

According to the X386 documentation, non-logitech mice do not support
a sample rate.





XI.G X-APPLICATIONS: Compiling X Programs.
~~~~~~~~~~~~~~~~~~

QUESTION: Does anyone know where I can find the libobz.a library ?

ANSWER: This library contained the socket stuff, when X386 V0.1 was
released. Meanwhile it has found it's way into the kernel, so
remove -lobz from the link step in the Makefile.


QUESTION: I get _setjmp undefined when linking xv.

ANSWER: You are trying to link a program compiled with gcc-2.2.2
and setjmp has changed sice then. Recompile xv from the source
using gcc2.2.2d7.


QUESTION: How do I compile an X application that has an Imakefile?

ANSWER:
	Type xmkmf to generate the Makefile.
	Type make.


QUESTION: gcc complains the X libraries are not found or links static.

ANSWER: Check out the -nojump -static options of GCC ... read the GCC FAQ.
	You can tell gcc what directories to search with -L.




XI.H BUGS:
~~~~~~~~~
Cant compile Xaw programs without -static in versions x11v1.1 or older.
There is a glitch with the Xaw shared libs ... I haven't seen
this in a while anyway its fixed in newer releases.

Color problems with Xega .... fixed in latest version on tsx-11.

from chuck@coplex.com (Chuck Sites)
It is possible to run X386 on a Paradise VGA Plus. The X386.0 doc file
has a small misprint.  The Chipset is not pvga. It's pvga1.   Anyway,
under the line in /usr/X386/lib/X11/Xconfig VGA256, add, `chipset "pvga1"`.
You will need a 512k board.  There seems to be a problem with 800x600 mode
that causes pixels to be misplaced in the center 1/3 of the screen. 640x480
works fine.  Anybody out there might have a fix for that?


Sources for X11_FAQ: 
Steve Kotsopoulos, Peter Hawkins, John Morris, M. Corsini, K. Balasubramanian.
Direct comments, questions, complaints to krishna at:
balasub@cis.ohio-state.edu


	   ===================8<==========>8================


Newsgroups: comp.os.linux