Last addition by Paul Winkler 07/22/2002
This document is specifically aimed at those interested in using 2.4.x with Andrew Morton's low-latency patch for audio purposes.
It's not really hard when you know what to do, but there's a lot of stuff to upgrade before you can compile and install the kernel if you are moving from linux 2.2.x. So if you are, don't forget to read the section on updating your system files.
We suggest scanning through this whole document to get an overview before you start mucking with the kernel. Everything described here requires kernel configuration, and it's easier to do it all in one go rather than rebuilding the kernel again for each feature you want. You should also read through the necessary upgrades to make sure you have all your software in order before you start configuring.
$ ls -l total 4 lrwxrwxrwx 1 root src 12 Jul 22 13:46 linux -> linux-2.2.16 drwxr-xr-x 14 root root 4096 Jul 21 22:59 linux-2.2.16
If that's the case, remove the link:
rm /usr/src/linuxOtherwise, if /usr/src/linux is a directory and not a symlink, rename it so the name includes the kernel version, e.g.:
mv /usr/src/linux /usr/src/linux-2.2.16
mv linux linux-2.4.x
ln -s /usr/src/linux-2.4.x /usr/src/linux
cd /usr/src/ patch -p0 < /dir/where/you/put/2.4.x-low-latency.patch
This should patch without any problems. However some people have found that this works better:
cd /usr/src/linux patch -p1 < /dir/where/you/put/2.4.x-low-latency.patchor
gzip -cd patchXX.gz | patch -p0YMMV
cp /usr/src/linux-2.2.x/.config /usr/src/linux
Options relevant to low-latency audio:
cat /proc/sys/kernel/lowlatencyshould yield "1" or 'on'. if not
echo 1 > /proc/sys/kernel/lowlatencyto turn it on.
Similarly, if you have a USB soundcard, and want to use the ALSA driver for it, be sure to disable "USB Audio support" (or set it as a module) in the USB section (not in the Sound Support section).
You'll then need to get ALSA sources from www.alsa-project.org and follow the installation directions. Be sure to get the 0.9.x series; ALSA 0.5.x is ancient and should be ignored, in spite of its "stable" status.
This is useful for anybody who runs buggy programs with high priority and root privileges... namely, just about anyone running high- performance audio on linux. It's especially important if you're running in a live performance or broadcast situation where you need to be able to recover from just about any catastrophe quickly.
There are a couple of choices of journaling filesystem available. I've tried reiserfs and ext3 with good success. Currently I'm using ext3 because it's a lot easier to set up, being backwards-compatible with ext2, which means you can convert an existing filesystem and later, if necessary, boot with a kernel that only recognizes ext2. So you don't need to be sure to always have an ext3-enabled boot floppy for emergencies.
During kernel configuration, go into the "File systems" section of the kernel configurator. Say Y to "Ext3 journalling file system support" and/or "Reiserfs support". While you're at it, turn on support for anything else you're likely to need: ISO 9660 for CD-ROMs, Microsoft Joliet CDROM extensions, DOS FAT fs, VFAT fs, anything else you like.
I usually say Y instead of M to all filesystems I want to support, because I want to be sure I can mount anything even if there's a problem with modules. It's happened...
I'll assume you're using ext3 like me. Next, you want to read this quick little howto, which tells you everything else you'll need to know about running with ext3:
http://www.symonds.net/~rajesh/howto/ext3/ext3-5.html Note that you DON'T need to patch your kernel if you have a recent 2.4.x Linux kernel source tree. Ext3 now comes standard, though it's still labelled "experimental."
Read /usr/src/linux/Documentation/ sysrq.txt for instructions; more importantly, PRINT IT since you won't be able to get at the file when you need it most!!!
If you forget to print it Alt-SysRq-q might help you (but probably not when you're running X). q is currently not a valid sysrq key so using it causes sysrq to print a usage message with a list of the available commands. The appropriate letter for each is given in uppercase. This is a simple "cheat sheet" I've used in the past when I can't find my printed copy of sysrq.txt. This may not work in the future if q becomes used by sysrq.
Here's a particularly useful sequence: Alt-Sysrq-k - kills all programs on current console Alt-Sysrq-e - Drops to a login terminal Alt-Sysrq-s - attempts to sync all mounted filesystems (wait a moment after this... if you have a working console, you should see an "OK" message when it's done) Alt-Sysrq-u - attempts to remount all filesystems read-only Alt-Sysrq-b - force immediate reboot without sync or unmountBy doing this, you can greatly reduce the chance of filesystem damage, and even avoid needing to fsck on reboot. I find that if the freeze happens while I'm in X, I'm usually unable to get the screen back, but I can do a safe reboot.
Note that some of the key combinations seem to work with one Alt key and not the other... but it's not consistent, I don't know why. Try both Alt keys.
You first need to enable SCSI emulation so that the system treats the IDE drive as if it were a SCSI drive.
During kernel configuration: First, go into "ATA/IDE/MFM/RLL support". In the subsection for "IDE, ATA and ATAPI Block devices", make sure to choose N for "Include IDE/ATAPI CDROM support". Then choose Y or M for "SCSI emulation support". Go back to the main menu, enter SCSI support, and be sure to say Y to "SCSI support", Y to "SCSI CD-ROM support", and Y to "SCSI generic support".
vi Makefile ... EXTRAVERSION = -ll-box1-0
make dep make clean make bzImageNext check to see that the compile succeeded. There is nothing more frustrating than removing the files below before you find out that there was a problem you didn't notice while compiling. Usually compile problems are because of missing module dependencies. Often the output will look normal but you will know for sure there was something missing from the config if you don't have a System.map. If you do then proceed below, if you don't then you need to hunt down the missing dep. Sometimes the location of the dependency changes between kernel versions. If you are using a 'pre' kernel you may even have to to patch a file by hand.
ls System.map (check to see that the compile succeeded) rm -f /boot/System.map cp System.map /boot/System.map rm -f /boot/bzImage cp arch/i386/boot/bzImage /boot/bzImage-2.4.x
image=/boot/bzImage-2.4.x label=linux-2.4.x read-only root=/dev/whatever_you_useIf you also want to use your cdwriter, or rip audio from a CD, there's one more thing to add in lilo.conf before you'll be able to use the drive:
append="hdX=scsi hdX=ide-scsi"... replacing X with the drive letter of your IDE cd drive, e.g. my CD drive is /dev/hdc.
(I'm not clear on which of those options is actually needed, I think it may have changed at some point. I have both options, which seems to be safe - the invalid one is ignored.)
If you already have an "append" line in lilo.conf, just add the text in quotes.
/sbin/liloAs always, running LILO is VERY important. You won't be able to boot the new kernel until you do so. This is especially important if you ever remove your old kernel!
none /dev/shm shm defaults 0 0And make the directory: mkdir /dev/shm
rm /dev/cdrom ln -s /dev/srN /dev/cdrom OR lns -s /dev/scdN /dev/cdrom(either one should work) Once again, replace N in these commands with the appropriate number. In my case, I have no real SCSI devices, so I choose /dev/sr0.
Now that you've got everything ready, try mounting a data CD to make sure that still works. Also try playing an audio cd. Next, try ripping and/or burning. Useful tools include cdrecord and cdparanoia. More information can be found in the CD-Writing HOWTO, which may be in your installed documentation, or check here: http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html
insmod -VSee below for the correct version number. Hopefully you won't have to, but if you do then you need to download the modutils package. Compile and install it now, or use your distribution's latest available package. Make sure your old modutils is gone!
cd /usr/src/linux make modules; make modules_install
depmod -aas root. If there's a problem, double-check your configuration for that module in /etc/modules.conf.
apt-get install kernel-package
make-kpkg clean make-kpkg kernel-imageor, if you want to time the kernel build so you'll know how long it takes if you need to do it again:
time sh -c "make-kpkg clean; make-kpkg kernel_image"
cd .. dpkg -i linux-2.4.x-ll-box1-0.debThe kernel package will take care of configuring and running LILO. It also handles the modules. For more information on the organization of kernel package management in Debian see the dpkg and make-kpkg man pages.
Current Minimal Requirements ============================ Upgrade to at *least* these software revisions before thinking you've encountered a bug! If you're unsure what version you're currently running, the suggested command should tell you. Again, keep in mind that this list assumes you are already functionally running a Linux 2.2 kernel. Also, not all tools are necessary on all systems; obviously, if you don't have any PCMCIA (PC Card) hardware, for example, you probably needn't concern yourself with pcmcia-cs. o Gnu C 2.95.3 # gcc --version o Gnu make 3.77 # make --version o binutils 184.108.40.206.25 # ld -v o util-linux 2.10o # fdformat --version o modutils 2.4.2 # insmod -V o e2fsprogs 1.25 # tune2fs o jfsutils 1.0.12 # fsck.jfs -V o reiserfsprogs 3.x.1b # reiserfsck 2>&1|grep reiserf sprogs o pcmcia-cs 3.1.21 # cardmgr -V o PPP 2.4.0 # pppd --version o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
Additional test commands that take advantage of your distribution packaging system:
gcc --version rpm -q egcs gcc dpkg -l gcc
ld -v rpm -q binutils dpkg -l binutilsNotes from Documentation/Changes: "If you can, upgrade to the latest 2.9.5 binutils release. Older releases such as 2.8, 2.8.xx, and the FSF's 2.9.1 should be avoided if at all possible. The later releases of 220.127.116.11.x (anything where x >= 22) can and do compile the kernel properly, but there are many benefits to upgrading to 2.9.5 if you're up to it."
Note: there is a problem with later 2.4.x kernels and recent binutils versions. This bit me with kernel 2.4.16 and binutils 18.104.22.168.12.3. Depending on the kernel configuration building the kernel fails with this error:
undefined reference to 'local symbols in discarded section .text.exit'There are several workarounds to be found in various mailing list archives. Using binutils version 22.214.171.124.10 instead of 126.96.36.199.12.3 worked for me.
chsh -v rpm -q util-linux dpkg -l util-linux
Note that you *can* compile util-linux yourself, but this is potentially dangerous - you MUST carefully read the MCONFIG file and make sure everything's right. I tried to compile it and didn't know what I was doing, and I made it impossible to log in to my system!! After some hairy battling with broken boot floppies, I managed to get my system working again. I have since used only prepackaged versions with no trouble.
insmod -V rpm -q modutils dpkg -l modutilsInstallation Notes: If you want to compile modutils, Wait until after you've compiled and booted your 2.4 kernel before you try to compile modutils! I was unable to compile modutils until after I'd booted 2.4; then it went fine. This means also that
/sbin/tune2fs --version rpm -q e2fsprogs dpkg -l e2fsprogs
pppd --version rpm -q ppp dpkg -l ppp
isdnctrl 2>&1|grep version