Comment 32 for bug 595448

Revision history for this message
Jarrett Miller (spook) wrote :

You edited it in the wrong place. Sorry I wish I could make this easy so that you could just download a kernel from my PPA but I have not figured out how to upload a kernel to the PPA build service. But here are some instructions that should produce a fixed kernel for you. These instructions are for 10.10. If you want 11.04 you need to modify this procedure slightly. Now before you start I would recommend that you install one of the kernels supplied by Ubuntu that you do not want to use. IOW if you want to use generic install linux-server and linux-headers-server. Or if you want to use server do the opposite. This way you can uninstall the Ubuntu supplied "generic" kernel so that yours does not have version conflicts with the Ubuntu supplied packages. Once you have installed the server kernel and rebooted then uninstall the Ubuntu supplied generic packages.

First install some required software.
sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev libqt3-mt-dev

next create a new directory to work from lets call it ~/ubuntu but name it what ever you like. now
mkdir ~/ubuntu
cd ~/ubuntu

now clone the Ubuntu kernel git tree:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-maverick.git

This will take a while and when done you should have a folder called ubuntu-maverick. it would be a good idea right now to create a tar.gz backup of that folder. That way if you want to start over you don't need to redownload the git tree. You can just delete the ubuntu-maverick folder and then uncompress your clean backup. either way change in to that folder
cd ubuntu-maverick

now you need to checkout released kernel from the git repository. the git repository contains all of the kernels and by default it is checked out in the state of the kernel that the devs are currently working on but have not yet released. So it may have bugs and you want to go back in time a bit to the most recent public release which should give you a known good kernel source tree to start with. as of right now (4-20-2011) that is 2.6.35-28.50 . typing in the following command will list all of the kernels
git tag -l

In that list you should see Ubuntu-2.6.35-28.50 which is what we will use for this. So now we need to check that tag out. we can do that with the following command
git checkout Ubuntu-2.6.35-28.50 -b fixed

That command will check out that taged release and create a new named branch called "fixed"
You now have that revision checked out so we can start the build process. First you need to prep the build tree by running a couple of scripts. so run:
fakeroot debian/rules clean
debian/rules updateconfigs

now you are ready to edit your configs. you should not edit the config files directly. instead you should use the ubuntu kernel configure script. Now you need to know what flavor and platform you want. in these instructions I will use 64 bit generic as that is what I want. To begin the edit process run the following command:
debian/rules editconfigs

this command will start and interactive process that allows you to properly edit the configurations of all of the various builds of the kernel. The first question it asks is if I want to edit the amd64/config.flavor.generic. Since this is the one I want I will say yes here. This will bring up the NCRUSES based GUI that is used for editing the kernel configs. Now use the arrow keys on your keyboard to navigate to: "device drivers" -> "Serial ATA and Parallel ATA Drivers". Next arrow down until "AHCI SATA support" is highlighted. It should have a <M> to the left of it. press the space bar repeatedly until that changes to <*>. This means it will build the AHCI support in to the kernel.

Now just press esc repeatedly until it asks you if you want to save your new configuration. Say yes. That will exit you back out to the terminal and the script will be asking you if you want to edit the next flavor. Just say no to all of the flavors you don't care about.

You are now ready to build your flavor. So prep the build process by running
debian/rules updateconfigs
fakeroot debian/rules clean

now its time to build. so run the following commands:
skipabi=true skipmodule=true fakeroot debian/rules binary-indep
skipabi=true skipmodule=true fakeroot debian/rules binary-prearch
skipabi=true skipmodule=true fakeroot debian/rules binary-generic

that last one will take a while so go grab a coffee.
when its all done move up a directory
cd ../

now just install the debs.
sudo dpkg -i *.deb

reboot and you should be good.
Make sure its working with
cat /boot/config-2.6.35-28-generic | grep AHCI

which should show CONFIG_SATA_AHCI=y

Cheers and sorry if there are any typos in this.