Prelude:
If you do not encounter issues like one of the following, you are free to leave now so as to avoid a waster of time reading more below.
Download Linux Bluetooth kernel module source code
Can not compile Linux Bluetooth kernel module
/sbin/modprobe: invalid option -- 'l'
========================== Start =====================================
Although this practice was with Fedora Linux 17, the following instructions should still do the tricks for building the Compat bluetooth kernel module for Linux with kernel version of 2.6.x or above.
NOTE: this post is not about playing with the
user space code that you may find on the bluez.org official site http://www.bluez.org/download/
1. download kernel code for the bluetooth module
This should be ported together with the kernel itself, but in case you have not yet had it on hand or been unable to find the source code, download from the site below
https://gforge.ti.com/gf/download/frsrelease/802/5435/ti-compat-bluetooth-2012-02-20.tar.gz
2. now once your followed the steps indicated on
http://processors.wiki.ti.com/index.php/Open_source_Wireless_Connectivity_Bluetooth_components#Bluetooth_Modules, you will probably get stuck by the compilation with
make KLIB_BUILD=<Path To Linux> KLIB=${ROOTFS} install-modules
(Equivalence of it is to run "make bt" under the top source code directory.)
Error might be like some syntactical faults in the kernel headers this module depends on, and you may find you have no luck by applying the patch provided in the above site (
http://processors.wiki.ti.com/images/8/8e/Compat-patch-zip.zip) , the only cure I had got that really was efficacious is to
apply the following patch instead (thanks to the guy who posted it)
http://marc.info/?l=linux-wireless&m=132760196131230&w=2 (in case this link may be expired or moved away, I have pasted below)
This file was introduced in commit 2a11c8ea20bf850b3a2c60db8c2e7497d28aba99
and included in 3.1 and later kernels. It includes <generated/autoconf.h>
itself, as well as some other definitions that are used elsewhere.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
include/linux/compat-2.6.h | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/include/linux/compat-2.6.h b/include/linux/compat-2.6.h
index c23e94a..3ccd051 100644
--- a/include/linux/compat-2.6.h
+++ b/include/linux/compat-2.6.h
@@ -2,7 +2,9 @@
#define LINUX_26_COMPAT_H
#include <linux/version.h>
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
+#include <linux/kconfig.h>
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33))
#include <generated/autoconf.h>
#else
#include <linux/autoconf.h>
--
1.7.4.4
(Copy it into a file named newpatch, say, and then apply it by "patch -p1 newpatch")
Thereafter, you should be able to get through "make bt" successfully".
3. However, when you get to "make btinstall" or later "make btuninstall" to toy around the Bluetooth loading or unloading, you can get more annoying warnings like:
/sbin/modprobe: invalid option -- 'l'
It seems not critical but will block the normal process of "installation" from being complete hence unsuccessfully installation of the new Bluetooth module you just made.
To get rid of them (I am showing you the reasons behind it since you may be interested more in the solutions right now, please Google that if you are indeed intrigued with that),
use the following trick
(this is came up with on the basis of what was earlier posted by
Artem Chekunov on
http://comments.gmane.org/gmane.linux.kernel.wireless.general/87040)
touch /sbin/modprobe.sh
and then put the following into it and save.
--------------------------------------------------------------------------
#!/bin/bash
if [[ $1 == -l ]]
then
if [ -z $2 ]
then
find /lib/modules/$(uname -r) -name '*.ko' | \
sed -e "s#\/lib\/modules\/$(uname -r)\/##g"
else
find /lib/modules/$(uname -r) -name '*.ko' | \
sed -e "s#\/lib\/modules\/$(uname -r)\/##g" | grep $2
fi
else
/sbin/modprobe $@
fi
exit 0
---------------------------------------------------------------------------
Note the last line I added (besides changes made somewhere else) is important to make sure that "make" can run completely through all expected steps.
Then do the following more steps:
chmod +x /sbin/modprobe.sh
alias modprobe=/sbin/modprobe.sh
echo "alias modprobe=/sbin/modprobe.sh" >> /etc/bashrc
cp Makefile Makefile.save
sed -i -e 's/^MODPROBE.*/MODPROBE := \/sbin\/modprobe.sh/g' Makefile
Now do what you like.
========================== End =====================================