How to Enable Silicon Image 3114 sATA Chipset Support on Linux

First of all, HUGE special thanks to Spike (spike@spykes.net) for logging in to my computer to figure out what I'd been doing wrong for a whole week!

This tutorial should be quite broad, and ought to work for most any x86 host running a reasonably new Linux distribution version. These directions are aimed specifically at people who are *not* putting their operating system on a sATA drive, but rather on a pATA drive which Linux already sees. My specific configuration: SiI3114 chipset (four sATA controllers) on a DFI Ultra Infinity motherboard with two Maxtor 250gb sATA drives plugged in and an older Western Digital 40gb boot drive. Running Redhat 9.0.

Instructions include kernel recompile which will require a little knowledge or research or poking. Most or all people comfortable enough to install Linux will get through this. At time of writing, 2.6.3 is the latest stable kernel release, and 2.6.4-rc2 is also available and used for this tutorial. This was selected because changelogs indicated that the included siimage.c driver file was modified for this version. You therefor will not need any separate sATA drivers. Among the incompadability bugs between Redhat 9.0 and 2.6.x kernel is the inability to load kernel modules. If you don't know what that is, don't worry. All this will probably be automatic in the stable release of Fedora Core2.

  1. Install Linux onto the boot drive (remember, not sATA) as you normally would. Make sure to include the "Development Tools" packages during installation. You'll need the included binaries. I'm assuming you're going to use the grub bootloader. Once it's up, you could up2date all your packages just to be on the safe side. I don't know whether or not this will effect the stability of your kernel upgrade.
  2. Download linux-2.6.3.tar.gz (~42.9 mb) and patch-2.6.4-rc2.bz2 (~2.1mb) from kernel.org, and create a directory such as /usr/src/kernel in which they can be compiled.
  3. Move linux-2.6.3.tar.gz into your newly created directory and unpackage it with gzip -dc linux-2.6.3.tar.gz | tar xvf -
  4. Move patch-2.6.4-rc2.bz2 into the linux-2.6.3/ directory created by the previous command, and unzip it with bzip2 -d patch-2.6.4-rc2.bz2
  5. Apply the newly created patch-2.6.4-rc2 patch file with patch -p1 < patch-2.6.4-rc2
  6. To configure the kernel, run make menuconfig. This is where the procedure becomes hardware-specific. You'll need to play around with the configuration a bit before you get enough of your hardware working, but the defaults are a good place to start. Defaults, that is, with a couple necessary changes to enabled support for your 3114 chipset....
  7. Under Code maturity level options, only the first of three options sould be marked yes with an asterix [*]. That is to say, do Prompt for development and/or incomplete code/drivers, but do not Select only drivers bla bla. This step must be performed before the second of the remaining changes in order for it's option to appear.
  8. Also, under Device Drivers > ATA/ATAPI/MFM/RLL support, mark Silicon Image chipset support to yes with an asterix <*>
  9. Under Device Drivers > SCSI device support, mark SCSI disk support to yes with an asterix <*>
  10. And finally, under Device Drivers > SCSI device support > SCSI low-level drivers, mark Silicon Image SATA support (NEW) to yes with an asterix <*>
  11. That's all for the kernel configuration changes necessary to gain 3114 chipset support, but you may need/want to change some other things in there. Search around and google some of the options. Once you're done, if you keep hitting the Exit option often enough to get to the top level, another Exit will prompt to save your changes. Do so. This will write to a .config file which you can and should copy out for backup and reference.
  12. Now to compile your kernel, run: make clean bzImage modules modules_install
  13. Once complete, the make script informs you that your bzImage file is in arch/i386/boot/. Run mv arch/i386/boot/bzImage /boot/bzImage-2.6.4-rc2
  14. Next, mv System.map /boot/System.map-2.6.4-rc2
  15. Then, rm /boot/System.map ; ln -s /boot/System.map-2.6.4-rc2 /boot/System.map
  16. Append the following to your /etc/grub.conf file:
    title 2.6.4rc2
            root (hd0,0)
            kernel /boot/bzImage-2.6.4-rc2 ro nousb
  17. You've now added your new 2.6.4-rc2 kernel as an alternate boot option. The preexisting kernel will remain in the list as default, so you need to be there to select 2.6.4rc2 during the reboot you should now do.
  18. Errors *will* appear due to the major differences between 2.4.x and 2.6.x, but if your system fails to boot or fails to support a different piece of hardware, return to the menuconfig troubleshoot it. If the system does successfully boot with your new kernel, run dmesg | more to see if there is now mention of sata and disk(s) named anything between /dev/sda and /dev/sdd. If so, cool! You got 'em!
I'll now go on to describe how one would put two of these sata disks into a RAID-0 configuration.