190 lines
7.5 KiB
Plaintext
190 lines
7.5 KiB
Plaintext
|
WARNING: Do not use 'mc' to extract the tar file!
|
||
|
All mc versions before 4.0.14 cannot extract symbolic links correctly.
|
||
|
|
||
|
Linux is the most self incompatible OS I know. If you have any problem,
|
||
|
first carefully read this file.
|
||
|
|
||
|
Linux includes the gnu make program by default but it is called 'make' on linux.
|
||
|
You will definitely need the shell script Gmake.linux to use gmake
|
||
|
on a linux system.
|
||
|
|
||
|
Install it as /usr/bin/Gmake with:
|
||
|
|
||
|
cp Gmake.linux /usr/bin/Gmake
|
||
|
|
||
|
Then compile the system by calling:
|
||
|
|
||
|
/usr/bin/Gmake
|
||
|
or ./Gmake.linux
|
||
|
|
||
|
NOTE for all Linux 2.5.x versions and all Linux versions before 2.6.8:
|
||
|
|
||
|
Linux did ship with defective kernel include files starting
|
||
|
with 2.5.x. These defective kernel include files did prevent
|
||
|
compilation. If you have problems compiling software and see
|
||
|
error messages related to include/scsi/scsi.h & include/scsi/sg.h
|
||
|
either upgrade to Linux-2.6.8 or newer or remove /usr/src/linux
|
||
|
|
||
|
NOTE for all Linux versions using libc.so.6:
|
||
|
|
||
|
Libc.so.6 is definitely a big problem in binary compatibility.
|
||
|
First you should note that Linux is not a OS but only a kernel.
|
||
|
|
||
|
Creating a OS from kernel, libraries and applications is done
|
||
|
by various companies that create "Linux distributions". It seems
|
||
|
that these companies (e.g. SuSE and Red Hat) are fighting wars
|
||
|
against each other.
|
||
|
|
||
|
There is no guarantee that a binary that has been compiled
|
||
|
on one Linux distribution will run correctly on a different
|
||
|
release of the same vendor or on a distribution from a different
|
||
|
vendor. You cannot copy binaries between different Linux
|
||
|
versions, always compile the sources by yourself.
|
||
|
|
||
|
We should consider that the name libc.so.6 is burned out for
|
||
|
these incompatibility reasons. But stop: Don't be too fast.
|
||
|
The dynamic linker on Linux does not work correctly. It has
|
||
|
been derived from the SunOS 4.x linker (which worked correctly)
|
||
|
but the Linux version does not even warn if it could not
|
||
|
find a library with the right major version number. Until
|
||
|
this is fixed it makes no sense to switch to libc.so.7
|
||
|
|
||
|
See below for more information.
|
||
|
|
||
|
|
||
|
NOTES for S.u.S.E distributions: If the "make" run aborts with strange messages,
|
||
|
then you need to unset an environment variable called PROMPT_COMMAND
|
||
|
It contains illegal values for a make file system.
|
||
|
|
||
|
I M P O R T A N T
|
||
|
|
||
|
please carefully read all notes:
|
||
|
|
||
|
Newer Linux kernels (from 2.3.51) moved SVSv shared memory into a filesystem.
|
||
|
If you get messages with error code EINVAL related to shared memory, you
|
||
|
most likely installed a newer kernel on an old system that does not mount
|
||
|
the new shared memory filesystem.
|
||
|
For information on this filesystem please read README.linux-shm
|
||
|
|
||
|
If you have any problems to access a device on the SCSI bus, check your
|
||
|
/dev/sg devices first. Your system should either only have /dev/sga...
|
||
|
or /dev/sg0... The newer Linux kernel use /dev/sg0... so the actual
|
||
|
SCSI transport code checks for /dev/sg0... first. Many Linux installations
|
||
|
have too few /dev/sg* device nodes. This is because of the funny device
|
||
|
mapping. It may be possible that one SCSI device eats up 8 /dev/sg* entries.
|
||
|
I recommend to have at least 20 /dev/sg* device nodes.
|
||
|
|
||
|
In any case: first read the man page for hints how to specify the device.
|
||
|
If nothing helps, first run e.g. cdrecord -scanbus. If this does not find
|
||
|
your device, the problem is in your kernel or system installation.
|
||
|
If scanning the bus finds the device, you are using the wrong device name.
|
||
|
If nothing help try to call e.g. strace cdrecord
|
||
|
|
||
|
Linux ATAPI hints:
|
||
|
|
||
|
Read README.ATAPI to learn how to use ATAPI drives with the SCSI transport
|
||
|
library.
|
||
|
|
||
|
Linux SCSI hints:
|
||
|
|
||
|
If you want to use the user SCSI library on a target that is connected
|
||
|
to a SCSI hostadapter which is not the first, you need to apply a patch
|
||
|
to your Linux kernel code. This patch is located in the file
|
||
|
|
||
|
Linux.scsi-patch
|
||
|
|
||
|
Please chdir to /usr/src, call
|
||
|
patch < Linux.scsi-patch
|
||
|
and re-compile and re-install your kernel.
|
||
|
|
||
|
Linux kernels past 2.0.30 will probably already have this patch included.
|
||
|
|
||
|
I recommend to use Linux 2.0.35 or later or Linux 2.1.115 or later.
|
||
|
These versions of Linux will include ATAPI support in a way needed by cdrecord.
|
||
|
Linux 2.1.115 or newer will in addition support the Parallel Port / ATAPI
|
||
|
adapters found in some CD-R or CD-RW drives.
|
||
|
|
||
|
IMPORTANT:
|
||
|
|
||
|
- Linux driver design oddities ******************************************
|
||
|
Although cdrecord supports to use dev=/dev/sgc, it is not recommended
|
||
|
and it is unsupported.
|
||
|
|
||
|
The /dev/sg* device mapping in Linux is not stable! Using dev=/dev/sgc
|
||
|
in a shell script may fail after a reboot because the device you want
|
||
|
to talk to has moved to /dev/sgd. For the proper and OS independent
|
||
|
dev=<bus>,<tgt>,<lun> syntax read the man page of cdrecord.
|
||
|
|
||
|
- Linux Kernel bug ******************************************************
|
||
|
In some architectures (at least on sparc / alpha / ppc) kernels prior
|
||
|
to 2.0.32 are not usable because the call to mlockall() kills cdrecord.
|
||
|
|
||
|
- You configured you kernel the wrong way *******************************
|
||
|
If you get a message like:
|
||
|
|
||
|
cdrecord: Function not implemented. shmget failed
|
||
|
|
||
|
You need to look for three possible reasons:
|
||
|
|
||
|
- You are using a Linux Kernel 2.3.51 or newer.
|
||
|
Read README.linux-shm
|
||
|
|
||
|
- You removed SVSv IPC from your kernel. You need to enable it again.
|
||
|
Run a Linux kernel config and recompile with SYSv IPC.
|
||
|
|
||
|
- The allowed amount of shared memory in the kernel is
|
||
|
not sufficient. See next main point for a solution:
|
||
|
|
||
|
- Linux kernel oddities *************************************************
|
||
|
You may need to edit /usr/src/linux/include/asm*/shmparam.h to allow at least
|
||
|
4 MB of shared memory for your architecture by modifying SHMMAX
|
||
|
and re-compile/re-install Linux !
|
||
|
(note that Linux for Intel by default allows 16 MB)
|
||
|
|
||
|
Do this by e.g. changing the #define for SHMMAX to:
|
||
|
|
||
|
#define SHMMAX 0x1000000 /* max shared seg size (bytes) */
|
||
|
|
||
|
This will allow 16 MB for shared memory.
|
||
|
|
||
|
- Linux kernel memory management ****************************************
|
||
|
If you get the message: "Cannot allocate memory. Cannot send SCSI cmd via ioctl"
|
||
|
Your kernel/include files are inconsistent.
|
||
|
|
||
|
This seems to be the case with most actual Linux kernels!!!!!!
|
||
|
|
||
|
Make sure, that the include file /usr/src/linux/include/scsi/sg.h
|
||
|
reflects the actual kernel. Usually, the files /usr/include/scsi/sg.h
|
||
|
and /usr/src/linux/include/scsi/sg.h should be identical.
|
||
|
|
||
|
**** Never change the content of /usr/src/linux/include/scsi/sg.h without
|
||
|
properly recompiling the kernel. Cdrecord depends on the fact that
|
||
|
the value of the define SG_BIG_BUFF uses the same value as the actual
|
||
|
kernel. Use cdrecord -scanbus -debug to get the value of SG_BIG_BUFF
|
||
|
with cdrecord has been compiled. An output of:
|
||
|
|
||
|
scsi_getbuf: 32768 bytes
|
||
|
|
||
|
indicates that cdrecord has been compiled with 32k SG_BIG_BUF
|
||
|
|
||
|
The Linux 'sg' driver is the worst driver design, I've ever seen.
|
||
|
|
||
|
- Linux Binary incompatibility *****************************************
|
||
|
If any of the options that take a equal sign ('=') in the middle does
|
||
|
not work correctly (e.g. dev= or if=) you are using a binary that
|
||
|
does not work correctly on your current OS distribution.
|
||
|
|
||
|
If dev=0,0,0 does not work but -dev=0,0,0 works you found this
|
||
|
incompatibility. This problem is caused by an incompatibility
|
||
|
in ctype.h and it seems that there are other compatibility problems
|
||
|
e.g. with reading /etc/default/cdrecord.
|
||
|
|
||
|
You cannot copy binaries between different Linux versions,
|
||
|
always compile the sources by yourself.
|
||
|
|
||
|
If a hint from a user is correct then even a RPM binary built for
|
||
|
RH-6.2 did not work on RH-6.2 because of these binary incompatibilities.
|
||
|
|
||
|
|
||
|
Joerg
|