Hi, I had the same problem as you had, and I was also afraid of doing something stupid.
Then I googled some stuff about kernel compiling and tried it out. Miraculously, it actually worked (at least, these past 5 minutes I haven't had any issues ... xD). So I might actually help you (if you still need it - if not, someone else might stumble upon this thread some day, as I did).
Now, I want to emphasize that I'm not taking any responsibility if anything goes wrong, so make sure to backup everything before trying. I also do not use Ubuntu itself, but Linux Mint (which is based on Ubuntu). This shouldn't matter, though.
I basically followed
this post, by and large, but made the job somewhat simpler for myself by not using git and by using the main flavour ("generic"), instead of a custom named one.
So here's the deal:
1. You'll need some tools to compile, I'm not sure if all of these are necessary, but here you go:
Code:
sudo su -
apt-get install fakeroot build-essential
apt-get install crash kexec-tools makedumpfile kernel-wedge
apt-get build-dep linux-image-$(uname -r)
apt-get install git libncurses5 libncurses5-dev libnewt-dev
exit
2. Create some directory somewhere where you'd like to store the source files you'll want to compile, I'm calling it "kernel". Cd into that directory and get the kernel sources via git. (There's also other ways to get the source, but I haven't tested these.)
Code:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-oneiric.git source
This downloads the sources from the official repository into a subfolder named "source" (or whatever you like). Again, cd into it.
(This is all assuming you need the Oneiric kernel, which is (I think) 3.0.0.14 - if not, you might have to try to get your sources elsewhere.)
3. Now, before compiling the source, you'll have to actually make the relevant changes. It's in two files (courtesy of the guy who
figured this out)
- First edit the file drivers/bluetooth/ath3k.c:
Find the section beginning with
Code:
static struct usb_device_id ath3k_table[] = {
In this section, you should see two lines that look like this:
Code:
/* Atheros AR3012 with sflash firmware*/
{ USB_DEVICE(0x0CF3, 0x3004) },
Add this following new line directly below:
Code:
{ USB_DEVICE(0x13d3, 0x3375) },
Then, in the same file, look for the section beginning with:
Code:
static struct usb_device_id ath3k_blist_tbl[] = {
There should be two lines that read like this:
Code:
/* Atheros AR3012 with sflash firmware*/
{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
Again, add this line directly below:
Code:
{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
Save the file and exit.
- Now, open the file drivers/bluetooth/btusb.c. Here you'll have to make only one change. Look out for the section starting with:
Code:
static struct usb_device_id blacklist_table[] = {
Here find the lines that say:
Code:
/* Atheros 3012 with sflash firmware */
{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
Add the following directly below:
Code:
{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
Again, save and exit.
You should now have made three insertions in two files that make sure the kernel recognizes the correct bluetooth device.
Before proceeding, check that you've made no mistakes here, of course.
3. Now you'll actually have to compile the source. This takes four commands (I think the first one is not necessary, but I'm not sure as I'm no expert in these matters, so since it doesn't hurt, just execute it anyway):
Code:
fakeroot debian/rules clean
skipabi=true skipmodule=true fakeroot debian/rules binary-indep
skipabi=true skipmodule=true fakeroot debian/rules binary-perarch
skipabi=true skipmodule=true fakeroot debian/rules binary-generic
The last command takes very long (perhaps 1 hour or more) to execute even on a fast processor, so be prepared.
(If you've followed the post I linked to more closely and have created a custom flavour instead of modifying "generic" directly (I have no idea how you'd do so, though), the last command changes of course to "... binary-yourflavour")
4. When all that is done, the compiled kernel packages will be in the
parent folder (the one above "source", that I called "kernel"). So make a "cd .." and install:
Code:
sudo dpkg -i linux-headers-3.0.0-14-generic_3.0.0-14.23_amd64.deb linux-headers-3.0.0-14_3.0.0-14.23_all.deb linux-image-3.0.0-14-generic_3.0.0-14.23_amd64.deb
(If you have another kernel version, you'll need to adjust the file names.)
5. Just for safety, update grub:
6. Now, reboot, and if you're as lucky as I am, nothing has changed except that your bluetooth device will now be recognized!
I'm sorry if I explained that perhaps too abundantly for some, but I'd best make sure, I would have appreciated such a detailed tutorial.
Regards,
Fryie
Bookmarks