当前位置: 首页 > news >正文

木马派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的用户组。 

http://www.dtcms.com/a/292990.html

相关文章:

  • 101.对称二叉树
  • 深入解析 Pandas:Python 数据分析的强大工具
  • 浅谈——C++和C#差异
  • 面试150 括号生成
  • 【3GPP】5G专用词汇1
  • 串口+DMA:固件库踩坑日记
  • 开发者的AI认知指南:用大模型重新理解人工智能(上)
  • Python排序算法全解析
  • Spring 核心知识点梳理 1
  • 【Lucene】架构
  • POSIX系统介绍
  • 【小白量化智能体】应用6:根据通达信指标等生成机器学习Python程序
  • A316-LS-MIC-V2:USB AI直播麦克风评估板技术解析
  • Linux——进程间通信,匿名管道,进程池
  • Spring AI 系列之二十 - Hugging Face 集成
  • 轩辕杯2025 Pwn baby_heap WP(house_of_apple2)
  • FFMPEG 解码流程 硬解码
  • 从零构建实时通信引擎:Freeswitch源码编译与深度优化指南
  • netty的编解码器,以及内置的编解码器
  • Linux系统权限全面解析:掌握你的数字王国钥匙
  • Python 链接各种中间件[Mysql\redis\mssql\tdengine]
  • 数据结构01:链表
  • FashionAI / 智尚衣橱 / TryFit / 智能时尚搭配平台
  • 面试150 N皇后Ⅱ
  • Docker环境搭建RabbitMq集群详解
  • 【CAN】2.帧格式
  • ReasonFlux:基于思维模板与分层强化学习的高效推理新范式
  • Python接口自动化实战 ( 第一阶段) - 封装接口请求类和异常处理
  • Ubuntu 虚拟机配置 与Windows互传文件
  • react19相关问题和解答