# BlueZ

BlueZ est un logiciel qui met en œuvre la technologie sans fil Bluetooth sur le système d'exploitation Linux. Il a été créé au départ par Max Krasnyansky de la société Qualcomm. En 2001, la société décide de le publier sous une licence GNU GPL. BlueZ est ensuite devenu la mise en œuvre Bluetooth de référence pour Linux et a été intégré au noyau Linux.
La première pile Open Source de Bluetooth pour Linux avait été développée par Axis Communication et s'appelait OpenBT, mais en 2005, ce projet fut arrêté.
En 2005, le projet BlueZ a gagné le TuxMobil GNU/Linux Award pour sa contribution à l'amélioration des connexions réseaux sur des machines portables munies de Linux.

## Installation

BlueZ est déjà intégré au noyau des séries Linux de version 2.4 et 2.6. Pour les noyaux plus anciens, il existe des patches téléchargeables à cette adresse. Pour certaines distributions Linux (Debian ou RedHat par exemple), des paquets pour mettre à jour certaines bibliothèques et utilitaires sont aussi disponibles.

## Architecture

Avant la version 2.3 de BlueZ, la couche RFCOMM se situait en espace utilisateur et utilisait le port série de l'espace utilisateur (USSP). Il avait été créé pour fonctionner avec l'interface des sockets L2CAP de BlueZ. Désormais, le noyau RFCOMM a été implanté dans le noyau Linux et se situe dans l'espace noyau de la pile BlueZ (plus précisément dans BlueZ-utils).
HCI, qui est une partie du cœur du module Bluetooth, et le protocole de transport hôte sont séparés dans différents modules. Par exemple hci_usb.ko pour implémenter la couche de transport USB et hci_uart.ko pour la couche de transport UART. L2CAP est implémenté par le module noyau l2cap.ko. Celui-ci fournit des sockets BSD. RFCOMM a deux aspects dans BlueZ. L'un est l'interface basée sur les sockets. À la manière de TCP, une connexion RFCOMM est un flux. L'autre est une émulation TTY qui fournit des nœuds.
Virtual HCI est donc un périphérique HCI virtuel qui permet de simuler des périphériques Bluetooth.

## Composition logicielle

BlueZ est composé de différents modules :
* Le cœur du sous-système du noyau Bluetooth
* Les couches du noyau audio L2CAP et SCO
* Les implémentations du noyau RFCOMM, BNEP, CMTP et HIDP
* HCI UART, USB, PCMCIA et les pilotes des périphériques virtuels
* Les bibliothèques et démons General Bluetooth et SDP
* Des utilitaires de configuration et de test
* Des outils des protocoles de décodage et d'analyse
BlueZ a un module central appelé bluez-kernel qui contient toutes les installations du cœur Bluetooth. Il construit l'abstraction HCI, les protocoles L2CAP et LMP/LC. Dans le code de bluez-kernel est inclus le pilote HCI UART, les pilotes HCI PCMCIA et le protocole RFCOMM ainsi que des choses pour BNEP.
Bluez-libs installe une bibliothèque d'accès Bluetooth utilisée par les autres utilitaires et outils.
Bluez-utils contient les utilitaires utilisés pour manipuler les dispositifs noyau et le module créé par la pile Bluetooth. L'utilitaire hciconfig installé par le package, est presque l'équivalent de ifconfig. Jusqu'à ce que la pile installe une nouvelle famille d'adresses, on a besoin de cet utilitaire pour manipuler les interfaces. Le réseau Bluetooth a des possibilités très différentes par rapport à d'autres réseaux plus traditionnels. Ce paquet est aussi utile pour mettre à jour les périphériques HCI par exemple.
Bluez-sdp fournit un démon et un accès à la bibliothèque utilisée avec SDP. C'est un protocole de base utilisé entre deux appareils Bluetooth pour déterminer comment ils peuvent communiquer entre eux.
Bluez-pan permet le PAN (Bluetooth Personal Area Networking). Cela inclut pand, le démon du profil PAN et dund, le démon du profil d'accès au LAN. PAN permet aux périphériques Bluetooth de fonctionner comme des périphériques réseaux Linux.
Bluez-hcidump est le tcpdump du monde Bluetooth. HCI est l'interface de contrôle de l'hôte. HCI propose une abstraction standard de l'interface pour le matériel Bluetooth, dictant les opérations que le noyau de la pile Bluetooth doit effectuer pour chaque driver matériel spécifique En fournissant un élément supplémentaire à cette couche, cet outil offre une vue de tout le trafic entrant et sortant de l'interface Bluetooth sans se soucier de l'interface USB, PCMCIA ou UART. RFCOMM est un standard pour des ports série style RS-232 sur Bluetooth.

## CVS

Le code de BlueZ étant ouvert au public, il a été mis en place un CVS qui permet à chacun des participants de développement du projet d'ajouter leur modification. Voici les principaux répertoires présents dans le CVS BlueZ ainsi que leur caractérisation.
* doc : des documents concernant BlueZ
* firmware : paquet qui permet l'utilisation de l'outil bluefw
* hcidump : analyseur de paquets Bluetooth HCI
* hciemu : émulation HCI pour la pile BlueZ
* kernel : tout ce qui concerne le noyau BlueZ,libs et libs2 : bibliothèques
* obex : tout ce qui concerne le service Object Exchange (OBEX) qui permet de transférer des données
* packages : les paquets de certaines distributions Linux (RedHat et Zaurus)
* pan : tout ce qui concerne les PANs. Evolution de bluez-pan
* rfcomm : tout ce qui concerne RFCOMM
* sdp : tout ce qui concerne le Service Discovery Protocol
* utils et utils2 : .