add directory Linux-0.98
This commit is contained in:
174
Linux-0.98/sources/sbin/cdrom/README.CDROM-98pl6
Normal file
174
Linux-0.98/sources/sbin/cdrom/README.CDROM-98pl6
Normal file
@@ -0,0 +1,174 @@
|
||||
|
||||
CDROM support for linux.
|
||||
|
||||
Starting with the 0.98.6 kernel, the isofs filesystem is now
|
||||
part of the official distribution. The filesystem is not compiled
|
||||
into the kernel by default, however. In order to use it, you
|
||||
will need to edit the file include/linux/config.h, and go down towards
|
||||
the bottom, and look for a line like:
|
||||
|
||||
#undef ISO9660_FS
|
||||
|
||||
change this to:
|
||||
|
||||
#define ISO9660_FS
|
||||
|
||||
and then build the kernel in the usual fashion, and you should be all
|
||||
set. You must have a CDROM drive, a SCSI adapter and a ISO9660 format
|
||||
disc before this will be of any use to you.
|
||||
|
||||
Once you have booted the system, you will need to add a device
|
||||
with major=11, minor=0 for the first cdrom drive, minor=1 for the
|
||||
second and so forth. You can use a command something like:
|
||||
|
||||
mknod -m 500 /dev/cdrom b 11 0
|
||||
|
||||
To mount a disc, use a command something like:
|
||||
|
||||
mount -t iso9660 /dev/cdrom /mnt
|
||||
|
||||
There are mount options which can disable filename mapping,
|
||||
and control the conversion of text files. The options are:
|
||||
|
||||
map=[on,off,normal]
|
||||
conv=[auto,binary,text,mtext]
|
||||
norock
|
||||
cruft
|
||||
|
||||
The defaults are effectively map=on,conv=auto,rock,nocruft.
|
||||
The effect that these options have is described later on in this document.
|
||||
|
||||
Support for Rock Ridge extensions is present in the filesystem.
|
||||
This means:
|
||||
|
||||
* Longer filenames (My implementation limits it to 256 chars).
|
||||
* Mixed case filenames, Normal unix syntax availible.
|
||||
* Files have correct modes, number of links, and uid/gid
|
||||
* Separate times for atime, mtime, and ctime.
|
||||
* Symbolic links.
|
||||
* Block and Character devices.
|
||||
* Deep directories (Untested).
|
||||
|
||||
KNOWN PROBLEMS:
|
||||
|
||||
None.
|
||||
|
||||
********************************************
|
||||
|
||||
Some general comments are in order:
|
||||
|
||||
On some drives, there is a feature where the drive can be
|
||||
locked under software control to essentially deactivate the eject
|
||||
button. The scsi cdrom code activates this feature on drives so
|
||||
equipt, so you may be unable to remove the disc while it is mounted.
|
||||
The eject button will be re-enabled once the disc is dismounted.
|
||||
|
||||
A single element cache was added that sits between the readdir
|
||||
function and the lookup function. Many programs that traverse the
|
||||
directory tree (i.e. ls) also need to know the inode number and find
|
||||
information about the file from the inode table. For the CDROM this
|
||||
is kind of silly, since all of the information is in one place, but we
|
||||
have to make it look kind of like unix. Thus the readdir function
|
||||
returns a name, and then we do a stat, given that name and have to
|
||||
search the same directory again for the file that we just extracted in
|
||||
readdir. On the Andrew toolkit disc, there is one directory that
|
||||
contains about 700 files and is nearly 80kb long - doing an ls -l in
|
||||
that directory takes several minutes, because each lookup has to
|
||||
search the directory. Since it turns out that we often call lookup
|
||||
just after we read the directory, I added a one element cache to save
|
||||
enough information so as to eliminate the need to search the directory
|
||||
again.
|
||||
|
||||
The CDROM has a sector size of 2048 bytes, but the buffer
|
||||
cache has buffer sizes of 1024 bytes. The SCSI high level driver for
|
||||
the cdrom must perform buffering of all of the I/O in order to satisfy
|
||||
the request. At some point in the near future support will be present
|
||||
in the kernel for buffers in the buffer cache which are != 1024 bytes,
|
||||
at which time this code will be removed.
|
||||
|
||||
Both the ISO 9660 filesystem and the High Sierra are
|
||||
supported. The High Sierra format is just an earlier version of
|
||||
ISO9660, but there are minor differences between the two. Sometimes
|
||||
people use the two names interchangably, but nearly all newer discs
|
||||
are the ISO9660 format.
|
||||
|
||||
The inode numbers for files are essentially just the byte
|
||||
offset of the beginning of the directory record from the start of the
|
||||
disc. A disc can only hold about 660 MB, so the inode numbers will
|
||||
be somewhere between about 60K and 660M. Any tool that performs
|
||||
a stat() on the CDROM obviously needs to be recompiled if it was
|
||||
compiled before 32 bit inode support was in the kernel.
|
||||
|
||||
A number of ioctl functions have been provided, some of which
|
||||
are only of use when trying to play an audio disc. An attempt has
|
||||
been made to make the ioctls compatible with the ioctls on a Sun, but
|
||||
we have been unable to get any of the audio functions to work. My
|
||||
NEC drive and David's Sony reject all of these commands, and we currently
|
||||
believe that both of these drives implement the audio functions using
|
||||
vendor-specific command codes rather than the universal ones specified
|
||||
in the SCSI-II specifications.
|
||||
|
||||
Text files on a CDROM can have several types of line
|
||||
terminators. Lines can be terminated by LF, CRLF, or a CR. The
|
||||
filesystem scans the first 1024 bytes of the file, searching for out
|
||||
of band characters (i.e. > 0x80 or some control characters), and if it
|
||||
finds these it assumes the the file is a binary format. If there are
|
||||
no out of band characters the filesystem will assume that the file is
|
||||
a text file (keeping track of whether the lines are terminated by a
|
||||
CR, CRLF, or LF), and automatically converts the line terminators to a
|
||||
LF, which is the unix standard. In the case of CRLF termination, the
|
||||
CR is converted to a ' '. The heuristic can be explicitly overridden
|
||||
with the conv= mount option, which tells the filesystem that *all* files
|
||||
on the volume are the specified type.
|
||||
|
||||
Rock Ridge extensions can be inhibited with the "norock" mount
|
||||
option. This could be of use if you have scripts that work with the
|
||||
non-Rock Ridge filenames, or if you encounter a bug in the filesystem
|
||||
which really screws you up.
|
||||
|
||||
|
||||
***************************************
|
||||
***************************************
|
||||
|
||||
The remaining comments *only* apply to discs *without* the Rock Ridge
|
||||
extensions:
|
||||
|
||||
The find command does not work without the -noleaf switch.
|
||||
The reason for this is that the number of links for each directory file
|
||||
is not easily obtainable, so it is set to 2. The default behavior for
|
||||
the find program is to look for (i_links-2) subdirectories in each
|
||||
directory, and it then assumes that the rest are regular files. The
|
||||
-noleaf switch disables this optimization.
|
||||
|
||||
The filesystem currently has the execute permission set for
|
||||
any non-directory file that does not have a period in its name. This
|
||||
is a crude assumption for now, but it kind of works. There is not an
|
||||
easy way of telling whether a file should be executable or not.
|
||||
Theoretically it is possible to read the file itself and check for a
|
||||
magic number, but this would considerably degrade performance.
|
||||
|
||||
The filesystem does not support block or character devices,
|
||||
fifos, or symbolic links. Also, the setuid bit is never set for any
|
||||
program. The main reason for this is that there is no information in
|
||||
the directory entry itself which could be used to indicate these
|
||||
special types of files.
|
||||
|
||||
Filenames under ISO9660 are normally all upper case on the
|
||||
disc but the filesystem maps these to all lower case. The filenames
|
||||
on the disc also have a version number (like VMS) which appears at the
|
||||
end of the filename, and is separated from the rest of the filename by
|
||||
a ';' character. The filesystem strips the version numbers from the
|
||||
filename if the version number is 1, and replaces the ';' by a '.' if
|
||||
the version number is >1. The mount option map=off will disable all
|
||||
of the name mapping, and when this is in effect, all filenames will be
|
||||
in upper case, and the semicolons and version numbers will always appear.
|
||||
|
||||
Discs that are mastered by Profit Publishing, Tuscon AZ have
|
||||
been known to have a defective file length field. For some reason the
|
||||
top byte contains junk for all I can tell, and this confuses the
|
||||
iso9660 filesystem. If you run into trouble with discs from Profit, use the
|
||||
"cruft" mount option, which will cause the filesystem to mask off the top
|
||||
byte of the file length.
|
||||
|
||||
eric@tantalus.nrl.navy.mil
|
||||
|
||||
Reference in New Issue
Block a user