bluez5交叉编译

本文详细介绍了如何使用ARM交叉编译器编译BlueZ蓝牙工具的过程,包括配置、编译和安装zlib、expat、libffi、glib、dbus、libical、readline、ncurses等依赖库,以及最终编译BlueZ-5.47并将其部署到目标系统的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

交叉编译bluez-5.47

参考:https://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BlueZ_Bluetooth_tools_for_ARM

https://blog.youkuaiyun.com/JiYeon67/article/details/79042742

前提:交叉编译的文件放在/home/brook/bluez5/build_out下,要有个根文件系统在:/home/brook/bluez5/rootf
编译zlib-1.2.11
CC=arm-linux-gnueabihf-gcc ./configure --prefix=/home/brook/bluez5/build_out
# make
# make install

编译expat-2.1.0

# ./configure --prefix=/home/brook/bluez5/build_out --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc
# make
# make install

编译libffi-3.0.13

# ./configure --prefix=/home/brook/bluez5/build_out --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc
# make
# make install

编译glib-2.40.0

./configure \
--prefix=/home/brook/bluez5/build_out \
--host=arm-linux-gnueabihf \
--target=arm-linux-gnueabihf \
CC=arm-linux-gnueabihf-gcc \
PKG_CONFIG_PATH=/home/brook/bluez5/build_out/lib/pkgconfig \
glib_cv_stack_grows=no \
glib_cv_uscore=yes \
glib_cv_have_qsort_r=yes \
ac_cv_func_posix_getpwuid_r=yes \
ac_cv_func_posix_getgrgid_r=yes

# make
# make install

编译dbus-1.9.4

./configure \
--prefix= \
--host=arm-linux-gnueabihf \
--target=arm-linux-gnueabihf \
CC=arm-linux-gnueabihf-gcc \
--with-x=no \
--disable-tests \
--enable-abstract-sockets \
CFLAGS=-I/home/brook/bluez5/build_out/include \
LDFLAGS=-L/home/brook/bluez5/build_out/lib

# make
# make install DESTDIR=/home/brook/bluez5/build_out
# make install DESTDIR=/home/brook/bluez5/rootf

编译libical-1.0

# ./bootstrap
# ./configure --prefix=/home/brook/bluez5/build_out --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc
# make
# make install


编译readline-6.3

# ./configure --prefix=/home/brook/bluez5/build_out --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc bash_cv_wcwidth_broken=yes
# make
# make install

编译ncurses-5.9
# ./configure --prefix=/home/brook/bluez5/build_out --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --with-shared
# make
# make install


编译bluez-5.47

./configure \
--prefix= \
--host=arm-linux-gnueabihf \
--target=arm-linux-gnueabihf \
CC=arm-linux-gnueabihf-gcc \
PKG_CONFIG_PATH=/home/brook/bluez5/build_out/lib/pkgconfig \
CFLAGS="-I/home/brook/bluez5/build_out/include -I/home/brook/bluez5/build_out/include/glib-2.0 -I/home/brook/bluez5/build_out/include/dbus-1.0" \
LDFLAGS="-L/home/brook/bluez5/build_out/lib -lncurses -lreadline -ldbus-1 -lglib-2.0 -lical" \
DBUS_CFLAGS=-I/home/brook/bluez5/build_out/lib/dbus-1.0/include \
DBUS_LIBS=-L/home/brook/bluez5/build_out/lib \
GLIB_CFLAGS=-I/home/brook/bluez5/build_out/lib/glib-2.0/include \
GLIB_LIBS=-L/home/brook/bluez5/build_out/lib \
ICAL_CFLAGS=-I/home/brook/bluez5/build_out/include \
ICAL_LIBS=-L/home/brook/bluez5/build_out/lib \
--disable-udev \
--disable-obex \
--enable-library \
--enable-experimental \
--mandir=/home/brook/bluez5/build_out/man \
--disable-systemd

# make
# make install DESTDIR=/home/brook/bluez5/build_out
  make install DESTDIR=/home/brook/bluez5/rootf

install -v -dm755 /home/brook/bluez5/rootf/etc/bluetooth
install -v -m644 src/main.conf /home/brook/bluez5/rootf/etc/bluetooth/main.conf

 

将根文件系统拷贝到开发板上,执行:

# dbus-launch

# /libexec/bluetooth/bluetoothd &   //如果出错,缺啥库拷贝啥库就好了, -C为兼容模式,为了sdptool browse local能够执行

#bluetoothctl  //进交互模式操作

[bluetooth]# power on //上电

[bluetooth]# show   //查看本控制器信息

[bluetooth]# pair   48:46:C1:40:9D:E6  //配对

 

监听 Android 应用的亮状态,可以使用 BroadcastReceiver Intent 进行实现。具体步骤如下: 1. 在 AndroidManifest.xml 文件中添加权限: ```xml <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> ``` 2. 创建一个 BroadcastReceiver 类: ```java public class ScreenBroadcastReceiver extends BroadcastReceiver { private boolean isScreenOn = true; private ScreenStateListener listener; public ScreenBroadcastReceiver(ScreenStateListener listener) { this.listener = listener; } @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { isScreenOn = false; listener.onScreenOff(); } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { isScreenOn = true; listener.onScreenOn(); } } public boolean isScreenOn() { return isScreenOn; } public interface ScreenStateListener { void onScreenOn(); void onScreenOff(); } } ``` 3. 注册 BroadcastReceiver: ```java ScreenBroadcastReceiver screenReceiver = new ScreenBroadcastReceiver(new ScreenBroadcastReceiver.ScreenStateListener() { @Override public void onScreenOn() { // 亮屏时的操作 } @Override public void onScreenOff() { // 熄时的操作 } }); IntentFilter screenFilter = new IntentFilter(); screenFilter.addAction(Intent.ACTION_SCREEN_ON); screenFilter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(screenReceiver, screenFilter); ``` 这样就可以监听 Android 应用的亮状态了。注意:在不需要监听时,要及时注销 BroadcastReceiver,避免资源浪费。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值