木马派RV1106开发板驱动AIC8800DC USB蓝牙模块,用bluez-alsa库与蓝牙音箱配对并播放wav声音文件
木马派RV1106开发板上的AIC8800DC是USB接口的WiFi蓝牙二合一模块,和RV1106之间只需要用USB接口连接,不需要接UART串口。
第一节 编译bluez-5.66蓝牙协议栈
幸狐自带的arm-rockchip830-linux-uclibcgnueabihf-gcc编译器的版本号是gcc version 8.3.0 (crosstool-NG 1.24.0)。
gcc版本太低,缺少wordexp.h,无法编译bluez-5.66。
下载arm官网的交叉编译器:arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf
下载地址:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads/14-2-rel1
文件名:
AArch32 GNU/Linux target with hard float (arm-none-linux-gnueabihf)
arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz
下载下来后解压到电脑linux虚拟机上的~/Downloads目录下。
将交叉编译器的路径添加到PATH环境变量中:
export PATH=$PATH:/home/oct1158/Downloads/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf/bin
(在命令行窗口中执行,关闭命令行窗口前一直有效,关闭窗口后失效)
查看交叉编译器的版本:arm-none-linux-gnueabihf-gcc -v
版本为gcc version 14.2.1 20241119 (Arm GNU Toolchain 14.2.Rel1 (Build arm-14.52))
linux虚拟机系统:Fedora 42
工作目录:
mkdir ~/Downloads/bluez
cd ~/Downloads/bluez
【交叉编译libffi-3.5.1】
wget https://github.com/libffi/libffi/releases/download/v3.5.1/libffi-3.5.1.tar.gz
tar xf libffi-3.5.1.tar.gz
cd libffi-3.5.1
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译zlib-1.3.1】
wget https://www.zlib.net/zlib-1.3.1.tar.gz
tar xf zlib-1.3.1.tar.gz
cd zlib-1.3.1(注意下面这是一行命令,不是两行)
CC=arm-none-linux-gnueabihf-gcc AR=arm-none-linux-gnueabihf-ar LD=arm-none-linux-gnueabihf-ld ./configure --prefix=/opt/bluezmake
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译glib-2.59.0】
glib-2.57.1是最后一个压缩包里面有configure脚本的版本。
glib-2.59.0是最后一个压缩包里面有configure.ac文件的版本。
从glib-2.59.1版本开始就只支持meson了,不再支持configure了。
wget https://download.gnome.org/sources/glib/2.59/glib-2.59.0.tar.xz
tar xf glib-2.59.0.tar.xz
cd glib-2.59.0
sudo dnf install autoconf
sudo dnf install automake
sudo dnf install libtool
sudo dnf install gtk-doc
autoreconf --install
echo glib_cv_stack_grows=no > arm-linux.cache
echo glib_cv_uscore=no >> arm-linux.cache
./configure --host=arm-none-linux-gnueabihf --cache-file=arm-linux.cache --prefix=/opt/bluez \--disable-libelf --disable-libmount --with-pcre=internal \LIBFFI_CFLAGS=-I$(pwd)/../libffi-3.5.1/_install/opt/bluez/include \LIBFFI_LIBS="-L$(pwd)/../libffi-3.5.1/_install/opt/bluez/lib -lffi" \ZLIB_CFLAGS=-I$(pwd)/../zlib-1.3.1/_install/opt/bluez/include \ZLIB_LIBS="-L$(pwd)/../zlib-1.3.1/_install/opt/bluez/lib -lz"
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译expat-2.7.1】
wget https://github.com/libexpat/libexpat/releases/download/R_2_7_1/expat-2.7.1.tar.gz
tar xf expat-2.7.1.tar.gz
cd expat-2.7.1
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez --without-docbook
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译dbus-1.15.8】
dbus-1.15.6是最后一个压缩包里面有configure脚本的版本。
dbus-1.15.8是最后一个压缩包里面有configure.ac文件的版本。
从dbus-1.15.10版本开始就只支持meson了,不再支持configure了。
交叉编译受电脑系统环境影响。
如果编译时报glib或者selinux的错误,请卸载系统里面安装的glib2开发包:sudo dnf remove glib2-devel
wget https://dbus.freedesktop.org/releases/dbus/dbus-1.15.8.tar.xz
tar xf dbus-1.15.8.tar.xz
cd dbus-1.15.8
sudo dnf install autoconf-archive
autoreconf --install
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez \EXPAT_CFLAGS=-I$(pwd)/../expat-2.7.1/_install/opt/bluez/include \EXPAT_LIBS="-L$(pwd)/../expat-2.7.1/_install/opt/bluez/lib -lexpat"
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译libical-3.0.20】
wget https://github.com/libical/libical/releases/download/v3.0.20/libical-3.0.20.tar.gz
tar xf libical-3.0.20.tar.gz
cd libical-3.0.20(注意下面这是一行命令,不是两行)
CC=arm-none-linux-gnueabihf-gcc CXX=arm-none-linux-gnueabihf-g++ cmake . -DICAL_GLIB=False -DCMAKE_INSTALL_PREFIX=/opt/bluezmake
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译readline-8.2.13】
wget https://ftp.gnu.org/gnu/readline/readline-8.2.13.tar.gz
tar xf readline-8.2.13.tar.gz
cd readline-8.2.13
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译ncurses-6.5】
wget https://ftp.gnu.org/gnu/ncurses/ncurses-6.5.tar.gz
tar xf ncurses-6.5.tar.gz
cd ncurses-6.5
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez --with-shared
make
修改progs/Makefile文件里面第82行的INSTALL_PROG变量,在变量值的末尾添加
--strip-program=arm-none-linux-gnueabihf-strip
然后make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译bluez-5.66】
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.66.tar.xz
tar xf bluez-5.66.tar.xz
cd bluez-5.66
sudo dnf install python-docutils
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez \--disable-udev \--enable-deprecated \--enable-library \--with-dbusconfdir=/opt/bluez/share \--with-dbussystembusdir=/root/bluetooth \--with-dbussessionbusdir=/root/bluetooth \--with-systemdsystemunitdir=/root/bluetooth \--with-systemduserunitdir=/root/bluetooth \DBUS_CFLAGS="-I$(pwd)/../dbus-1.15.8/_install/opt/bluez/include/dbus-1.0 -I$(pwd)/../dbus-1.15.8/_install/opt/bluez/lib/dbus-1.0/include" \DBUS_LIBS="-L$(pwd)/../dbus-1.15.8/_install/opt/bluez/lib -ldbus-1" \GLIB_CFLAGS="-I$(pwd)/../glib-2.59.0/_install/opt/bluez/include/glib-2.0 -I$(pwd)/../glib-2.59.0/_install/opt/bluez/lib/glib-2.0/include" \GLIB_LIBS="-L$(pwd)/../glib-2.59.0/_install/opt/bluez/lib -lglib-2.0" \ICAL_CFLAGS=-I$(pwd)/../libical-3.0.20/_install/opt/bluez/include \ICAL_LIBS="-L$(pwd)/../libical-3.0.20/_install/opt/bluez/lib -lical -licalvcal" \CFLAGS=-I$(pwd)/../readline-8.2.13/_install/opt/bluez/include \LDFLAGS="-L$(pwd)/../readline-8.2.13/_install/opt/bluez/lib -L$(pwd)/../ncurses-6.5/_install/opt/bluez/lib" \LIBS=-lncursesw
make
make install DESTDIR=$(pwd)/_install
cd ..
注意:
--enable-deprecated选项是为了编译出ciptool、hciattach、hciconfig、hcidump、hcitool、rfcomm和sdptool这7个命令。
--enable-library选项是为了生成bluetooth/bluetooth.h和libbluetooth.so。
--with-dbusconfdir目录必须设置为dbus的安装目录下的share目录。其他四个目录没有用,随便写。
【打包】
mkdir _install
(复制文件时必须加sudo,这样才能保证文件解压到板子上后所有者是root)
sudo cp -r libffi-3.5.1/_install/* _install
sudo cp -r zlib-1.3.1/_install/* _install
sudo cp -r glib-2.59.0/_install/* _install
sudo cp -r expat-2.7.1/_install/* _install
sudo cp -r dbus-1.15.8/_install/* _install
sudo cp -r libical-3.0.20/_install/* _install
sudo cp -r readline-8.2.13/_install/* _install
sudo cp -r ncurses-6.5/_install/* _install
sudo cp -r bluez-5.66/_install/* _install
cd _install
(进去后只有opt和root目录,如果有其他目录说明之前操作有误)
tar cf bluez.tar opt root
第二节 编译bluez-alsa-4.3.1库
mkdir ~/Downloads/bluez-alsa
cd ~/Downloads/bluez-alsa
【交叉编译alsa-lib-1.2.14】
wget https://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.14.tar.bz2
tar xf alsa-lib-1.2.14.tar.bz2
cd alsa-lib-1.2.14
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译alsa-utils-1.2.14】
wget https://www.alsa-project.org/files/pub/utils/alsa-utils-1.2.14.tar.bz2
tar xf alsa-utils-1.2.14.tar.bz2
cd alsa-utils-1.2.14
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa \--with-udev-rules-dir=/opt/bluez-alsa/usr/lib/udev/rules.d \--with-systemdsystemunitdir=/opt/bluez-alsa/usr/lib/systemd/system \--with-asound-state-dir=/opt/bluez-alsa/var/lib/alsa \NCURSESW_CFLAGS="-I$(pwd)/../../bluez/ncurses-6.5/_install/opt/bluez/include -I$(pwd)/../../bluez/ncurses-6.5/_install/opt/bluez/include/ncursesw" \NCURSESW_LIBS="-L$(pwd)/../../bluez/ncurses-6.5/_install/opt/bluez/lib -lncursesw" \CFLAGS=-I$(pwd)/../alsa-lib-1.2.14/_install/opt/bluez-alsa/include \LDFLAGS=-L$(pwd)/../alsa-lib-1.2.14/_install/opt/bluez-alsa/lib \LIBS=-lasound
修改../alsa-lib-1.2.14/_install/opt/bluez-alsa/lib/libatopology.la文件,删除dependency_libs字符串里面的/opt/bluez-alsa/lib/libasound.la。
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译libogg-1.3.6】
wget https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-1.3.6.tar.gz
tar xf libogg-1.3.6.tar.gz
cd libogg-1.3.6
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译flac-1.5.0】
wget https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.5.0.tar.xz
tar xf flac-1.5.0.tar.xz
cd flac-1.5.0
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa \CFLAGS=-I$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa/include \LDFLAGS=-L$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa/lib \LIBS=-logg
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译libvorbis-1.3.7】
wget https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.7.tar.gz
tar xf libvorbis-1.3.7.tar.gz
cd libvorbis-1.3.7
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa --with-ogg=$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译opus-1.5.2】
wget https://downloads.xiph.org/releases/opus/opus-1.5.2.tar.gz
tar xf opus-1.5.2.tar.gz
cd opus-1.5.2
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译lame-3.100】
wget https://nchc.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar xf lame-3.100.tar.gz
cd lame-3.100
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译mpg123-1.32.10】
wget https://cyfuture.dl.sourceforge.net/project/mpg123/mpg123/1.32.10/mpg123-1.32.10.tar.bz2
tar xf mpg123-1.32.10.tar.bz2
cd mpg123-1.32.10
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译sqlite3】
wget https://sqlite.org/2025/sqlite-autoconf-3500300.tar.gz
tar xf sqlite-autoconf-3500300.tar.gz
cd sqlite-autoconf-3500300
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译libsndfile-1.2.2】
wget https://github.com/libsndfile/libsndfile/releases/download/1.2.2/libsndfile-1.2.2.tar.xz
tar xf libsndfile-1.2.2.tar.xz
cd libsndfile-1.2.2
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa \FLAC_CFLAGS=-I$(pwd)/../flac-1.5.0/_install/opt/bluez-alsa/include \FLAC_LIBS="-L$(pwd)/../flac-1.5.0/_install/opt/bluez-alsa/lib -lFLAC -L$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa/lib -logg" \VORBIS_CFLAGS=-I$(pwd)/../libvorbis-1.3.7/_install/opt/bluez-alsa/include \VORBIS_LIBS="-L$(pwd)/../libvorbis-1.3.7/_install/opt/bluez-alsa/lib -lvorbis -L$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa/lib -logg" \VORBISENC_CFLAGS=-I$(pwd)/../libvorbis-1.3.7/_install/opt/bluez-alsa/include \VORBISENC_LIBS="-L$(pwd)/../libvorbis-1.3.7/_install/opt/bluez-alsa/lib -lvorbis -L$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa/lib -logg -lvorbisenc" \OPUS_CFLAGS=-I$(pwd)/../opus-1.5.2/_install/opt/bluez-alsa/include \OPUS_LIBS="-L$(pwd)/../opus-1.5.2/_install/opt/bluez-alsa/lib -lopus" \MPG123_CFLAGS=-I$(pwd)/../mpg123-1.32.10/_install/opt/bluez-alsa/include \MPG123_LIBS="-L$(pwd)/../mpg123-1.32.10/_install/opt/bluez-alsa/lib -lmpg123" \SQLITE3_CFLAGS=-I$(pwd)/../sqlite-autoconf-3500300/_install/opt/bluez-alsa/include \SQLITE3_LIBS=-L$(pwd)/../sqlite-autoconf-3500300/_install/opt/bluez-alsa/lib \OGG_CFLAGS=-I$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa/include \OGG_LIBS="-L$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa/lib -logg" \CFLAGS=-I$(pwd)/../lame-3.100/_install/opt/bluez-alsa/include \LDFLAGS=-L$(pwd)/../lame-3.100/_install/opt/bluez-alsa/lib
修改../flac-1.5.0/_install/opt/bluez-alsa/lib/libFLAC.la和../libvorbis-1.3.7/_install/opt/bluez-alsa/lib/libvorbis.la,去除dependency_libs字符串里面的/opt/bluez-alsa/lib/libogg.la。
修改../libvorbis-1.3.7/_install/opt/bluez-alsa/lib/libvorbisenc.la文件,去除dependency_libs字符串里面的首尾两处/opt/bluez-alsa/lib/libvorbis.la。
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译sbc-2.1】
wget https://www.kernel.org/pub/linux/bluetooth/sbc-2.1.tar.gz
tar xf sbc-2.1.tar.gz
cd sbc-2.1
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa \SNDFILE_CFLAGS=-I$(pwd)/../libsndfile-1.2.2/_install/opt/bluez-alsa/include \SNDFILE_LIBS="-L$(pwd)/../libsndfile-1.2.2/_install/opt/bluez-alsa/lib -lsndfile -L$(pwd)/../flac-1.5.0/_install/opt/bluez-alsa/lib -lFLAC -L$(pwd)/../libogg-1.3.6/_install/opt/bluez-alsa/lib -logg -L$(pwd)/../libvorbis-1.3.7/_install/opt/bluez-alsa/lib -lvorbis -lvorbisenc -L$(pwd)/../opus-1.5.2/_install/opt/bluez-alsa/lib -lopus -L$(pwd)/../mpg123-1.32.10/_install/opt/bluez-alsa/lib -lmpg123 -L$(pwd)/../lame-3.100/_install/opt/bluez-alsa/lib -lmp3lame"
make
make install DESTDIR=$(pwd)/_install
cd ..
【交叉编译bluez-alsa-4.3.1】
wget https://github.com/arkq/bluez-alsa/archive/refs/tags/v4.3.1.tar.gz -O bluez-alsa-4.3.1.tar.gz
tar xf bluez-alsa-4.3.1.tar.gz
cd bluez-alsa-4.3.1
autoreconf --install
sudo dnf install glib2-devel
./configure --host=arm-none-linux-gnueabihf --prefix=/opt/bluez-alsa \--with-dbusconfdir=/opt/bluez/share/dbus-1/system.d \--with-alsaplugindir=/opt/bluez-alsa/lib/alsa-lib \ALSA_CFLAGS=-I$(pwd)/../alsa-lib-1.2.14/_install/opt/bluez-alsa/include \ALSA_LIBS="-L$(pwd)/../alsa-lib-1.2.14/_install/opt/bluez-alsa/lib -lasound" \BLUEZ_CFLAGS=-I$(pwd)/../../bluez/bluez-5.66/_install/opt/bluez/include \BLUEZ_LIBS="-L$(pwd)/../../bluez/bluez-5.66/_install/opt/bluez/lib -lbluetooth" \DBUS1_CFLAGS="-I$(pwd)/../../bluez/dbus-1.15.8/_install/opt/bluez/include/dbus-1.0 -I$(pwd)/../../bluez/dbus-1.15.8/_install/opt/bluez/lib/dbus-1.0/include" \DBUS1_LIBS=-L"$(pwd)/../../bluez/dbus-1.15.8/_install/opt/bluez/lib -ldbus-1" \GIO2_CFLAGS=-I$(pwd)/../../bluez/glib-2.59.0/_install/opt/bluez/include/gio-unix-2.0 \GIO2_LIBS="-L$(pwd)/../../bluez/glib-2.59.0/_install/opt/bluez/lib -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lffi" \GLIB2_CFLAGS="-I$(pwd)/../../bluez/glib-2.59.0/_install/opt/bluez/include/glib-2.0 -I$(pwd)/../../bluez/glib-2.59.0/_install/opt/bluez/lib/glib-2.0/include" \GLIB2_LIBS="-L$(pwd)/../../bluez/glib-2.59.0/_install/opt/bluez/lib -lglib-2.0" \SBC_CFLAGS=-I$(pwd)/../sbc-2.1/_install/opt/bluez-alsa/include \SBC_LIBS="-L$(pwd)/../sbc-2.1/_install/opt/bluez-alsa/lib -lsbc"
修改../../bluez/glib-2.59.0/_install/opt/bluez/lib/libgio-2.0.la文件,删除dependency_libs字符串里面的/opt/bluez/lib/libgmodule-2.0.la、/opt/bluez/lib/libgobject-2.0.la、/opt/bluez/lib/libglib-2.0.la和/opt/bluez/lib/libffi.la。
修改../../bluez/glib-2.59.0/_install/opt/bluez/lib/libgobject-2.0.la文件,删除dependency_libs字符串里面的/opt/bluez/lib/libglib-2.0.la和/opt/bluez/lib/libffi.la。
修改../../bluez/glib-2.59.0/_install/opt/bluez/lib/libgmodule-2.0.la文件,删除dependency_libs字符串里面的/opt/bluez/lib/libglib-2.0.la。
make
make install DESTDIR=$(pwd)/_install
sudo dnf remove glib2-devel(建议卸载,避免影响编译其他软件包)
cd ..
【打包】
mkdir _install
(复制文件时必须加sudo,这样才能保证文件解压到板子上后所有者是root)
sudo cp -r alsa-lib-1.2.14/_install/* _install
sudo cp -r alsa-utils-1.2.14/_install/* _install
sudo cp -r libogg-1.3.6/_install/* _install
sudo cp -r flac-1.5.0/_install/* _install
sudo cp -r libvorbis-1.3.7/_install/* _install
sudo cp -r opus-1.5.2/_install/* _install
sudo cp -r lame-3.100/_install/* _install
sudo cp -r mpg123-1.32.10/_install/* _install
sudo cp -r sqlite-autoconf-3500300/_install/* _install
sudo cp -r libsndfile-1.2.2/_install/* _install
sudo cp -r sbc-2.1/_install/* _install
sudo cp -r bluez-alsa-4.3.1/_install/* _install
cd _install
(进去后只有opt目录,如果有其他目录说明之前操作有误)
tar cf bluez-alsa.tar opt
第三节 在板子上安装bluez-5.66和bluez-alsa-4.3.1
tar xf bluez.tar -C /
tar xf bluez-alsa.tar -C /
addgroup -S audio
mkdir -p /opt/bluez-alsa/var/lib/bluealsa
找到20-bluealsa.conf文件所在的文件夹:find /opt -name 20-bluealsa.conf
所在的文件夹是/opt/bluez-alsa/etc/alsa/conf.d。
修改/opt/bluez-alsa/share/alsa/alsa.conf文件,把这个文件夹添加到@hooks files数组里面(加上双引号):"/opt/bluez-alsa/etc/alsa/conf.d"。
第四节 和蓝牙音箱配对并播放wav声音文件
【启动蓝牙后台进程】
insmod ~/test/modules/aic_btusb.ko
rm /opt/bluez/var/run/dbus/pid
LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/bin/dbus-daemon --system
LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/libexec/bluetooth/bluetoothd &
export $(LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/bin/dbus-launch)
LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/libexec/bluetooth/obexd &
LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/bin/hciconfig hci0 up
export DBUS_SYSTEM_BUS_ADDRESS=unix:path=/opt/bluez/var/run/dbus/system_bus_socket
LD_LIBRARY_PATH=/opt/bluez/lib:/opt/bluez-alsa/lib/ /opt/bluez-alsa/bin/bluealsa -p a2dp-source -p hsp-ag &
【连接蓝牙音箱并播放声音】
扫描、配对、连接蓝牙音箱:
LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/bin/bluetoothctl scan on
LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/bin/bluetoothctl pair DC:D8:7C:1E:CA:CD
LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/bin/bluetoothctl trust DC:D8:7C:1E:CA:CD
LD_LIBRARY_PATH=/opt/bluez/lib /opt/bluez/bin/bluetoothctl connect DC:D8:7C:1E:CA:CD
如果提示Failed to connect: org.bluez.Error.Failed br-connection-page-timeout,说明连接失败,重启一下蓝牙音箱再试试。
用板子上的扬声器播放wav声音:
LD_LIBRARY_PATH=/opt/bluez/lib:/opt/bluez-alsa/lib /opt/bluez-alsa/bin/aplay /root/music/wav/Sand.wav
用蓝牙音箱播放wav声音:
LD_LIBRARY_PATH=/opt/bluez/lib:/opt/bluez-alsa/lib /opt/bluez-alsa/bin/aplay -D bluealsa:SRV=org.bluealsa,DEV=DC:D8:7C:1E:CA:CD,PROFILE=a2dp /root/music/wav/Sand.wav
【常见问题】
bluealsa: E: Couldn't obtain D-Bus connection: Could not connect: No such file or directory
解决方案:export DBUS_SYSTEM_BUS_ADDRESS=unix:path=/opt/bluez/var/run/dbus/system_bus_socket
bluealsa: W: Couldn't create storage directory: No such file or directory
解决方案:mkdir -p /opt/bluez-alsa/var/lib/bluealsa
bluealsa: W: Couldn't get managed objects: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.bluez was not provided by any .service files
解决方案:先启动bluetoothd和obexd这两个进程,打开蓝牙设备(hciconfig hci0 up),然后再启动bluealsa进程。
报这个错说明bluetoothd都没启动,就尝试启动bluealsa。
ALSA lib pcm.c:2722:(snd_pcm_open_noupdate) Unknown PCM bluealsa:SRV=org.bluealsa,DEV=DC:D8:7C:1E:CA:CD,PROFILE=a2dp
aplay: main:850: audio open error: No such file or directory
解决方案:找到20-bluealsa.conf文件所在的文件夹:find /opt -name 20-bluealsa.conf
所在的文件夹是/opt/bluez-alsa/etc/alsa/conf.d。
修改/opt/bluez-alsa/share/alsa/alsa.conf文件,把这个文件夹添加到@hooks files数组里面(加上双引号):"/opt/bluez-alsa/etc/alsa/conf.d"。
ALSA lib dlmisc.c:339:(snd_dlobj_cache_get0) Cannot open shared library libasound_module_pcm_bluealsa.so (libdbus-1.so.3: cannot open shared object file: No such file or directory)
aplay: main:850: audio open error: No such device or address
解决方案:将下面6个库文件放到/opt/bluez-alsa/lib/alsa-lib/里面。
libasound_module_ctl_bluealsa.a libasound_module_pcm_bluealsa.a
libasound_module_ctl_bluealsa.la libasound_module_pcm_bluealsa.la
libasound_module_ctl_bluealsa.so libasound_module_pcm_bluealsa.so
dbus[372]: Unknown group "audio" in message bus configuration file
解决方案:执行addgroup -S audio命令添加一个名为audio的用户组。