NOTE: You only need to do these steps if your kernel doesn't have USB support! This information is only valid for the official 2.2 and 2.4 kernels from kernel.org. This information is NOT valid for 2.5/2.6 kernels.


Installing the kernel source:

NOTE: If you need help with any of these steps, refer to the Linux Kernel HOWTO at http://www.redhat.com/mirrors/LDP/HOWTO/Kernel-HOWTO.html . If you don't know how to use the command line, refer to section 10 of http://www.redhat.com/support/manuals/RHL-7.1-Manual/getting-started-guide/

If you don't have kernel source installed on your system:
  1. Use the links on the download page to get the 2.2 or 2.4 kernel that is compatible with your system.
  2. Follow the steps at http://www.redhat.com/mirrors/LDP/HOWTO/Kernel-HOWTO-4.html to unpack your kernel. Stop when you get to the section on kernel configuration.
  3. Unless you know what configuration options to choose, I recommend you do the following:
    1. Get a kernel from your distributor (RedHat, SuSe, etc...) and install it (make sure to move the kernel source you unpacked in the previous step to a safe location so it doesn't get overwritten. It doesn't matter if it is older than the kernel you are installing, as long as both are 2.2 or both are 2.4)
    2. These kernels usually come with some default configurations. RedHat puts them in the /usr/src/linux/configs/ directory. Copy the one that is most appropriate for your system to /usr/src/<name of new kernel>/.config (notice the '.' -- that means that it is a "hidden" file).
    3. Get rid of the kernel source from your distributor and rename your new kernel back to /usr/src/linux .
    4. Some distributions have the kernel header files in /usr/include set up wrong. Make sure that /usr/include/linux is a symbolic link pointing to /usr/src/linux/include/linux and /usr/include/linux is a symbolic link pointing to /usr/src/linux/include/asm. If these are directories instead of symbolic links, delete them and use the " ln -s" command to create the symbolic links. For example, " ln -s /usr/src/linux/include/linux /usr/include/linux ".
    5. cd to /usr/src/linux, and run "make oldconfig " . This will update the config file to match your current kernel version, prompting you for new options.


Configuring and building the kernel:
NOTE: For more information on the following steps, read the Linux-USB Guide, at http://www.linux-usb.org/USB-guide/book1.html

  1. From /usr/src/linux, run either "make menuconfig " for a text-mode configuration program, or "make xconfig " for a graphical configuration program.
  2. Enable Video4Linux support. In 2.2 kernels, it is "Character Devices->Video For Linux->Video For Linux", and in 2.4/2.5 kernels it is "Multimedia Devices->Video For Linux ". You can set this to "M" (module) or "Y" (built into kernel).
  3. If you have a 2.4/2.5 kernel, enable "Multimedia Devices->Video For Linux->Video For Linux->V4L information in proc filesystem "
  4. USB Configuration:
    1. Enter the "USB support" menu and enable "Support For USB " (Y or M)
    2. Enable "Preliminary USB device filesystem"
    3. DISABLE "Enforce USB bandwidth allocation". NOTE: This option will be disabled by default and will not be visible if you have CONFIG_EXPERIMENTAL disabled (it's the very first option in the kernel configuration).
    4. Enable a USB controller driver (UHCI, UHCI Alternate, or OHCI). " lspci -vv" should tell you whether you have UHCI or OHCI (hint: Intel controllers are UHCI). Either UHCI driver should work, but I recommend that you use UHCI instead of UHCI Alternate. If you don't know which to choose, set all three to "M".
    5. Set "USB OV511 Camera support" to "M".
  5. Rebuild the kernel (this will be slightly different for non-Intel systems):
    1. make dep
    2. make clean
    3. make bzImage
    4. make modules
    5. make modules_install
  6. Copy arch/i386/boot/bzImage to your /boot directory. Give it a unique name like "vmlinux-2.4.4-usb", and be sure you don't overwrite your existing kernel!!
  7. If you boot from anything other than IDE, you will probably have to create a new initial ramdisk (initrd) image:
mkinitrd /boot/initrd-2.4.4.img 2.4.4
  1. Set up your bootloader:
If you use LILO as your bootloader:
Edit your /etc/lilo.conf file. This contains sections that start with an "image = " line. Do not change them unless you know what you are doing. Instead, copy one of those sections to the bottom of the file, and change the filename in the "image" line to that of your kernel file. Change the "label" line to whatever you want (e.g. "linux-2.4-usb"). This is the name that you will type at the LILO prompt to boot your kernel. The "root" line tells where your root filesystem is stored. Make sure it is the same as with your other kernels. Here is an example from my /etc/lilo.conf :
        image=/boot/vmlinuz-2.4
                label=linux-2.4
                read-only
                root=/dev/sda5
Save the file, and run the "lilo" command. You can safely ignore most warnings.
If you use GRUB as your bootloader (this is the RedHat 7.2 default):
Edit /etc/grub.conf, and copy your current boot selection (the section beginning with "title" and all of the indented lines afterward). Edit the new selection so that the "kernel" and "initrd" (if necessary) lines refer to your new kernel files. You do not need to run any commands afterward.
  1. Add the following line to your /etc/fstab file:   none /proc/bus/usb usbdevfs defaults 0 0   
  2. Reboot with the new kernel. If it works, you can set it to be the default in lilo.conf (don't forget to run lilo again afterward!), or in grub.conf.