Difference between revisions of "How to setup Bluetooth"
m (→Configuring the kernel) |
(→Configuring the kernel) |
||
Line 24: | Line 24: | ||
:{{kernelconf|CONFIG_USB_UHCI|<M>|UHCI HCD support|USB support|Device Drivers||}} | :{{kernelconf|CONFIG_USB_UHCI|<M>|UHCI HCD support|USB support|Device Drivers||}} | ||
:{{kernelconf|CONFIG_USB_OHCI|<M>|OHCI HCD support|USB support|Device Drivers||}} | :{{kernelconf|CONFIG_USB_OHCI|<M>|OHCI HCD support|USB support|Device Drivers||}} | ||
+ | |||
+ | Enable Bluetooth subsystem and drivers: | ||
+ | :{{kernelconf|CONFIG_BT|<*>|Bluetooth subsystem support|Networking support|Device Drivers||}} | ||
+ | :{{kernelconf|CONFIG_BT_L2CAP|<*>|L2CAP protocol support|Bluetooth subsystem support|Networking support|Device Drivers|}} | ||
+ | :{{kernelconf|CONFIG_BT_L2CAP|<*>|L2CAP protocol support|Bluetooth subsystem support|Networking support|Device Drivers|}} | ||
+ | :{{kernelconf|CONFIG_BT_SCO|<*>|SCO links support|Bluetooth subsystem support|Networking support|Device Drivers|}} | ||
+ | :{{kernelconf|CONFIG_BT_RFCOMM|<*>|RFCOMM protocol support|Bluetooth subsystem support|Networking support|Device Drivers|}} | ||
+ | :{{kernelconf|CONFIG_BT_RFCOMM_TTY|[*]|RFCOMM TTY support|Bluetooth subsystem support|Networking support|Device Drivers|}} | ||
+ | :{{kernelconf|CONFIG_BT_BNEP|<*>|BNEP protocol support|Bluetooth subsystem support|Networking support|Device Drivers|}} | ||
+ | :{{kernelconf|CONFIG_BT_HID|<*>|HID protocol support|Bluetooth subsystem support|Networking support|Device Drivers|}} | ||
+ | :{{kernelconf|CONFIG_BT_RFCOMM|<*>|RFCOMM protocol support|Bluetooth subsystem support|Networking support|Device Drivers|}} | ||
+ | :{{kernelconf|CONFIG_BT_HCIUSB|<M>|HCI USB driver|Bluetooth device drivers|Bluetooth subsystem support|Networking support|Device Drivers}} | ||
+ | :{{kernelconf|CONFIG_BT_HCIUSB_SCO|[*]|SCO (voice) support|Bluetooth device drivers|Bluetooth subsystem support|Networking support|Device Drivers}} | ||
In the kernel configuration, I turned most of the bluetooth stuff to <M>; it can be found in the Networking section of the linux configuration. {{NOTE|"RFCOMM protocols support" and "RFCOMM TTY support" (CONFIG_BT_RFCOMM and CONFIG_BT_RFCOMM_TTY) have to be built into the kernel (and not as a module), and hence "Bluetooth support" (CONFIG_BT) and "L2CAP" (CONFIG_BT_L2CAP) also have to be configured as built-in.}} | In the kernel configuration, I turned most of the bluetooth stuff to <M>; it can be found in the Networking section of the linux configuration. {{NOTE|"RFCOMM protocols support" and "RFCOMM TTY support" (CONFIG_BT_RFCOMM and CONFIG_BT_RFCOMM_TTY) have to be built into the kernel (and not as a module), and hence "Bluetooth support" (CONFIG_BT) and "L2CAP" (CONFIG_BT_L2CAP) also have to be configured as built-in.}} |
Revision as of 11:53, 8 January 2006
This is a subjective story about my experiences connecting a ThinkPad T43 running Gentoo and a Nokia N70 using Bluetooth, but I suppose most of the stuff here is generic stuff about how to connect laptops with linux with cellphones using bluetooth.
The kernel used was 2.6.14-gentoo, patched up to get the SATA working after suspend-to-memory.
Contents
BlueZ Installation
First of all, installation of Bluez; the following gentoo ebuilds was installed:
- net-wireless/bluez-bluefw
- net-wireless/bluez-firmware
- net-wireless/bluez-hcidump
- net-wireless/bluez-hciemu
- net-wireless/bluez-libs
- net-wireless/bluez-utils
net-wireless/bluez-kernel was also installed, but later I read it should not be needed when running 2.6-kernel - it could even be harmful.
Configuring the kernel
Since the Bluetooth card is connected to the USB subsystem, you will need to enable USB support in your kernel:
- Device Drivers → USB support → <M>Support for Host-side USB (CONFIG_USB)
- Device Drivers → USB support → [*]USB device file system (CONFIG_USB_DEVICEFS)
Choose an appropriate USB host driver, one of:
- Device Drivers → USB support → <M>EHCI HCD (USB 2.0) support (CONFIG_USB_EHCI_HCD)
- Device Drivers → USB support → <M>UHCI HCD support (CONFIG_USB_UHCI)
- Device Drivers → USB support → <M>OHCI HCD support (CONFIG_USB_OHCI)
Enable Bluetooth subsystem and drivers:
- Device Drivers → Networking support → <*>Bluetooth subsystem support (CONFIG_BT)
- Device Drivers → Networking support → Bluetooth subsystem support → <*>L2CAP protocol support (CONFIG_BT_L2CAP)
- Device Drivers → Networking support → Bluetooth subsystem support → <*>L2CAP protocol support (CONFIG_BT_L2CAP)
- Device Drivers → Networking support → Bluetooth subsystem support → <*>SCO links support (CONFIG_BT_SCO)
- Device Drivers → Networking support → Bluetooth subsystem support → <*>RFCOMM protocol support (CONFIG_BT_RFCOMM)
- Device Drivers → Networking support → Bluetooth subsystem support → [*]RFCOMM TTY support (CONFIG_BT_RFCOMM_TTY)
- Device Drivers → Networking support → Bluetooth subsystem support → <*>BNEP protocol support (CONFIG_BT_BNEP)
- Device Drivers → Networking support → Bluetooth subsystem support → <*>HID protocol support (CONFIG_BT_HID)
- Device Drivers → Networking support → Bluetooth subsystem support → <*>RFCOMM protocol support (CONFIG_BT_RFCOMM)
- Device Drivers → Networking support → Bluetooth subsystem support → Bluetooth device drivers → <M>HCI USB driver (CONFIG_BT_HCIUSB)
- Device Drivers → Networking support → Bluetooth subsystem support → Bluetooth device drivers → [*]SCO (voice) support (CONFIG_BT_HCIUSB_SCO)
In the kernel configuration, I turned most of the bluetooth stuff to <M>; it can be found in the Networking section of the linux configuration.
Make sure that the according modules are loaded:
# modprobe uhci_hcd ; modprobe ehci_hcd
Serial connection over Bluetooth
One of the applications you might want to connect your phone for is to use GPRS or 3G (UMTS) for connecting to the internet. A lot of phones do this through using AT-commands on a serial over Bluetooth connection.
By configuring /etc/bluetooth/rfcomm.conf correctly, you'll get a device /dev/rfcomm0.
Eventually one could use the command:
# rfcomm bind 0 00:15:A0:7A:90:F2 3
The hardware address should be replaced with that of your phone. If you don't know the hardware address of your phone yet, you can get it by running:
# hcitool scan
The last parameter ('3') is the channel to use. I spent quite some time fighting before I found out of that one; I didn't find it documented anywhere, but by running
# sdptool records 00:15:A0:7A:90:F2
I found channel 3 to be the right one for my phone. You will have to experiment to find the right one for your phone setup; for T-Mobile GSM/GPRS carrier in USA this is channel 1.
Now /dev/rfcomm0 exists.
At this point you can use an automatic dialing utility such as wvdial, editing the config file to point to the modem at /dev/rfcomm0, and everything should work just like a land line!
You may directly access the modem (i.e. by using minicom:)
$ minicom -s
set the serial device to be /dev/rfcomm0, choose 'exit' and then the AT-commands can be typed in. With my operator (Telenor, Norway) it seemed simple enough, I just entered
- ATDT *99#
and lots of cryptic letters started dancing across the screen, indicating a ppp session startup.
To configure pppd create /etc/ppp/peers/nokia with particularly those lines:
/dev/rfcomm0 connect '/usr/sbin/chat -v -f /etc/ppp/chat-nokia' debug 10.0.1.3 crtscts noipdefault ipcp-accept-local defaultroute novj nobsdcomp novjccomp nopcomp noaccomp usepeerdns
Furthermore, you need a simple chat script. Create /etc/ppp/chat-nokia:
'TIMEOUT' '5' 'ABORT' 'BUSY' 'ABORT' 'ERROR' 'ABORT' 'NO ANSWER' 'ABORT' 'NO CARRIER' 'ABORT' 'NO DIALTONE' 'ABORT' 'Invalid Login' 'ABORT' 'Login incorrect' 'ATZ' 'OK' 'ATDT*99#' '~--'
Run pppd with:
$ pppd call nokia
This should establish the internet connection.
For editing phonebook / ringtones / etc., the gammu utils (http://www.gamu.net) has been reported to work well, but this appears to be primarily for Nokia phones.
File Transfer
File transfers are accomplished through OBEX transfer, which I believe is basically an FTP over bluetooth connection. Once you have bonded with your phone (yes, I know you love your sexy RAZR, but here I mean paired it with your laptop via bluetooth), you can easily use "obexftp" to transfer files. As an example,
- obexftp -b 00:01:02:03:04:05 -l
will list the root directory of the phone with bluetooth address 00:01:02:03:04:05. Refer to the man page for more of the unique commands. What a wonderful interface! Unfortunately there doesn't seem to be a way to get a standard 'ftp' session using familiar commands (e.g. 'mget').
For a more user-friendly experience, you can use the kde tools, just launch
- kbtobexclient
for a file browser. In the Location: option put
- obex://[00:01:02:03:04:05]
to list the files. Note that the brackets *are* necessary. From there, you can list directories easily and batch download files.