AOSP with BlueZ 5 integrated as replacement for default Bluedroid Bluetooth stack.
This project is an example on how BlueZ 5 for Android can be integrated with AOSP project.
Supported Android versions:
lollipop branch)kitkat branch)mako target)flo target)deb target)hammerhead target) Provided instructions are for Android 5.0 (Lollipop). For Android 4.4 (KitKat) use
kitkatbranch for repo andandroid-msm-<target>-3.4-kitkat-mr2for kernel.
repo init -u https://github.com/bluez-android/aosp_platform_manifest.git -b lollipop
repo sync
Additional binary drivers are required to boot AOSP on Nexus devices. Those require accepting EULA and can be downloaded from https://developers.google.com/android/nexus/drivers. Follow instructions for your supported device and Android version of choice and after unpacking place them in vendor folder of downloaded repo.
Replace
<target>with appropriate value depending on your device, see above.
source build/envsetup.sh
lunch aosp_<target>-userdebug
make -j8
You can skip
-wto keep userdata and cache partitions content, i.e. in case you want just to upgrade software without erasing any data.
adb reboot bootloader
fastboot flashall -w
BlueZ for Android provides prebuilt kernels for all supported devices. When building own kernel from MSM tree, following configuration is recommended in order for all features to work properly:
Enable loadable modules support (CONFIG_MODULES)Bluetooth subsystem support (CONFIG_BT) as module802.1d Ethernet Bridging (CONFIG_BRIDGE)hid-generic driveraes-cmac crypto hashTo make things easier, we provide required modifications as patches available in misc repository and step-by-step instruction below to have own kernel binaries built.
### download misc repository
git clone https://github.com/bluez-android/misc.git
### download kernel
git clone https://android.googlesource.com/kernel/msm kernel-msm
cd kernel-msm
### prepare kernel sources
git checkout android-msm-"target"-3.4-lollipop-release
git am ../misc/patches-kernel/0001-hid-Backport-hid-generic-driver.patch
git am ../misc/patches-kernel/0002-crypto-add-CMAC-support-to-CryptoAPI.patch
git am ../misc/patches-kernel/0003-crypto-af_alg-properly-label-AF_ALG-socket.patch
### configure kernel
make ARCH=arm CROSS_COMPILE=arm-eabi- <target>_defconfig
scripts/config --enable CONFIG_MODULES
scripts/config --module CONFIG_BT
scripts/config --enable CONFIG_BRIDGE
scripts/config --enable CONFIG_CRYPTO_CMAC
scripts/config --enable CONFIG_CRYPTO_USER_API
scripts/config --enable CONFIG_CRYPTO_USER_API_HASH
scripts/config --enable CONFIG_CRYPTO_USER_API_SKCIPHER
make ARCH=arm CROSS_COMPILE=arm-eabi- oldnoconfig
### build kernel
make ARCH=arm CROSS_COMPILE=arm-eabi- -j8
cd ..
### unpack backports
tar xf backports-<yyyymmdd>.tar.xz
cd backports-<yyyymmdd>
### prepare backports sources
patch -p1 < ../misc/patches-backports/0001-Add-defconfig-bluetooth.patch
# (optional)
patch -p1 < ../misc/patches-backports/0002-Enable-6LOWPAN.patch
# (for Nexus 4 and Nexus 7)
patch -p1 < ../misc/patches-backports/0003-Add-HCI-SMD.patch
# (for Nexus 5)
patch -p1 < ../misc/patches-backports/0004-Add-HCI-H4.patch
patch -p1 < ../misc/patches-backports/0005-Workaround-for-msm-kernel-tree.patch
### configure backprots
make ARCH=arm CROSS_COMPILE=arm-eabi- KLIB_BUILD=../kernel-msm defconfig-bluetooth
### build backports
make ARCH=arm CROSS_COMPILE=arm-eabi- KLIB_BUILD=../kernel-msm -j8
Finally, existing kernel should be replaced with kernel-msm/arch/arm/boot/zImage and modules/*.ko with corresponding files from backports-<yyyymmdd>/.
Google documentation on how to download and build AOSP: http://source.android.com/source/building.html
BlueZ documentation for BlueZ for Android: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/android/README