BlueZ package does not contain profile support, except some limited implementations (such as keyboard) in "test" directory. Bluetooth profile support on Linux is mainly provided as X-Window GUI, namely Gnome Bluetooth Applet.
There's little you can actually do with Linux + BlueZ on console (non-GUI) environment. You can configure the adapter (hciconfig), browse Bluetooth nodes (hcitool and sdptool), can have virtual serial port connection (rfcomm) and IP bridging (bnep) between Linux machines. That's about all.
> There seems to be very little documentation on BlueZ
Unfortunatelly, BlueZ project does not provide any document. Worse, articles on internet is scattered and pretty much mixed up. Documents about early version of BlueZ is nearly useless for latest BlueZ 4.x.
The following link might help.
"BlueZ programming" by Albert Huang
Does BlueZ implement the Bluetooth profiles? Or does BlueZ implement only the lower part of the stack (SCO, RFCOMM, etc)?
Or are the bluetooth profiles something we code ourselves?
There seems to be very little documentation on BlueZ
Bluetooth driver is consisted two different components. One is in-kernel driver, the other is userspace agent.
Userspace agent (bluetoothd, hciattach, hciconfig, hcitool, sdptool, etc) is officially BlueZ. Because this is userspace application, all you have to do is simply build and install.
In-kernel driver (bluetooth.ko, hci_uart.ko, btusb.ko, etc) is often refereed as "BlueZ", but it is not officially part of BlueZ. It is distributed from open-source wireless driver project (compat-wireless).
Driver update is a bit tricky than userspace application, but compat-wireless project is well designed. You can build driver modules even if you don't have Kernel source code (you still need Kernel header files though).
There are many versions of compat-wireless releases (latest is 3.5.1). However you don't have to match compat-wireless version with your kernel version. compat-wireless build file is smart enough to judge which Kernel version you use and automatically generate API compliment driver (compat.ko).
In cross-build environment, you have to give several variables to makefile
make ARCH=arm CROSS_COMPILE=arm-unknown-linux-uclibcgnueabi- KLIB=../../kernel/linux-22.214.171.124 KLIB_BUILD=../../kernel/linux-126.96.36.199 bt
ARCH is your linux platform architecture.
CROSS_COMPILE is prefix for your cross compiler
KLIB and KLIB_BUILD is where your kernel header and Makefile is located.
Last "bt" is to specify Makefile to build Bluetooth drivers.
Thanks for the replies.
Is there somewhere in the Linux Kernel Configurator to enable the USB Bluetooth driver?
I looked through the options but couldn't see the USB Bluetooth driver anywhere.
Are there any other dependencies that need to be enabled as well?
It is linux, most common peripherals should work.
I have used numerous cheap USB Bluetooth modules from ebay on other Linux machines without problem.
As well as tons of USB WiFi devices.
I've never tested WiFi+Bluetooth combo dongle so I don't know about it.
For Bluetooth-only module, Bluetooth USB dongle does not usually require vendor-specific driver unlike WiFi. Single "btusb.ko" driver will take care almost all Bluetooth USB dongles. Market-available USB dongles are usually uses CSR or Broadcomm chipset, both are known to have good compatibility. You may encounter Atheros AR300x dongle sometimes. This one requires special driver (ath3k.ko) and firmware file (ath3k-1.fw). Both are freely available as open source.
One thing you must be careful is that, BlueZ stack comes with iMX53 QSB Ubuntu is pretty old. I don't have running QSB right now but I remember it is BlueZ-4.32. The latest BlueZ is 4.101. Also Gnome Bluetooth applet is pretty old. They works at least for test purpose, but has many known issues.