一、修改 Linux 内核
1、cd /arm2410s/kernel-2410s
2、make menuconfig(如报错,先安装 libncurses5-dev 即可)
3、加载 2410s-1.5-2005-9-4.config 配置文件(可见该内核已经支持bluetooth,所以直接保存退出即可)
4、make dep
5、make zImage
6、编译完成的内核在 /arm2410s/kernel-2410s/arch/arm/boot 目录下,将该内核烧进开发板
二、交叉编译 bluez 及相关库
1、下载:bluez-libs-3.36 和 bluez-utils-3.36 glib-2.12.12 libsndfile-1.0.17 libusb-0.1.1 dbus-1.0.2 libxml2-2.6.11
相关依赖关系: bluez-utils-3.36 依赖:glib-2.12.12 libsndfile-1.0.17 libusb-0.1.12 dbus-1.0.2
glib-2.12.12 依赖:libxml2-2.6.11
2、交叉编译 bluez-libs-3.36
(1)./configure --prefix=/root/bluez_install/bluez-libs-3.36 --host=arm-linux
(运行:make、make install,下同)
(2)将 /root/bluez_install/bluez-libs-3.36/lib/pkgconfig/bluez.pc 复制到 /usr/lib/pkgconfig
在 /root/bluez_install/bluez-libs-3.36/lib 下将生成 libbluetooth.so.2.11.2,将该库拷贝到开发板 /mnt/yaffs/lib 目录下并建立连接
ln -s libbluetooth.so.2.11.2 libbluetooth.so
ln -s libbluetooth.so.2.11.2 libbluetooth.so.1
ln -s libbluetooth.so.2.11.2 libbluetooth.so.2
此时 蓝牙已经可以启动,初始化等过程正常进行
3、交叉编译 bluez 工具接口库
(1)交叉编译 libxml2-2.6.11
./configure --prefix=/root/bluez_install/libxml2-2.6.11 --host=arm-linux CC=arm-linux-gcc
将 /root/bluez_install/libxml2-2.6.11/lib/pkgconfig/libxml-2.0.pc 复制到 /usr/lib/pkgconfig
(2)交叉编译 glib-2.12.12
主机安装 gettext
echo ac_cv_type_long_long=yes > arm-linux.cache
echo glib_cv_stack_grows=no >> arm-linux.cache
echo glib_cv_uscore=no >> arm-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes >> arm-linux.cache
./configure --prefix=/root/bluez_install/glib-2.12.12 --host=arm-linux CC=arm-linux-gcc --cache-file=arm-linux.cache
若报错:error: Could not find a glib-genmarshal in your PATH,先在主机安装 libglib2.0-dev
将 /root/bluez_install/glib-2.12.12/lib/pkgconfig 下的 glib-2.0.pc、gmodule-2.0.pc、gmodule-export-2.0.pc、gmodule-no-export-2.0.pc、gobject-2.0.pc、gthread-2.0.pc 复制到 /usr/lib/pkgconfig
(3)交叉编译 libsndfile-1.0.17
./configure --prefix=/root/bluez_install/libsndfile-1.0.17 --host=arm-linux CC=arm-linux-gcc
将 /root/bluez_install/libsndfile-1.0.17/lib/pkgconfig/sndfile.pc 复制到 /usr/lib/pkgconfig
(4)交叉编译 libusb-0.1.12
./configure --prefix=/root/bluez_install/libusb-0.1.12 --host=arm-linux CC=arm-linux-gcc
将 /root/bluez_install/libusb-0.1.12/lib/pkgconfig/libusb.pc 复制到 /usr/lib/pkgconfig
(5)交叉编译 dbus-1.0.2
echo ac_cv_have_abstract_sockets=yes > arm-linux.cache
./configure --prefix=/root/bluez_install/dbus-1.0.2 --host=arm-linux CC=arm-linux-gcc --cache-file=arm-linux.cache --without-x
将 /root/bluez_install/dbus-1.0.2/lib/pkgconfig/dbus-1.pc 复制到 /usr/lib/pkgconfig
(6)交叉编译 bluez-utils-3.36
主机安装 libbluetooth-dev libcwiid1
在 bluez-utils-3.36/network/bridge.h 中添加宏定义:
#define SIOCBRADDBR 0x89a0 /* create new bridge device */
#define SIOCBRDELBR 0x89a1 /* remove bridge device */
#define SIOCBRADDIF 0x89a2 /* add interface to bridge */
#define SIOCBRDELIF 0x89a3 /* remove interface from bridge */
在 bluez-utils-3.36/input/storage.c 中添加宏定义:
#define ENOKEY 161
./configure --prefix=/root/bluez_install/bluez-utils-3.36 --host=arm-linux CC="arm-linux-gcc -I/root/bluez_install/bluez-libs-3.36/include -L/root/bluez_install/bluez-libs-3.36/lib" --disable-audio
注:(1)当编译 bluez-utils-3.36 时,通常会出现找不到头文件或库,例如 bluetooth.h 等,因此需在 configure 时指明头文件和库的地址
(2)--disable-audio 选项是为了避免 make 时出现 audio 模块的错误,此错误如下:
test -f lexer.c || /bin/bash ../ylwrap lexer.l .c lexer.c -- /bin/bash /root/armbluetooth/source/blue-install/bluez-utils-3.36/missing --run flex
make[2]: *** [lexer.c] 错误 1
make 时出现错误:
make[2]: Entering directory `/home/blueZ/bluez-utils-3.36/sbc'
/bin/sh ../libtool --tag=CC --mode=link arm-linux-gcc -I/usr/local/arm/3.4.1/arm-linux/include -Wall -O2 -D_FORTIFY_SOURCE=2 -fPIE -pie -o sbcinfo sbcinfo.o
arm-linux-gcc -I/usr/local/arm/3.4.1/arm-linux/include -Wall -O2 -D_FORTIFY_SOURCE=2 -fPIE -pie -o sbcinfo sbcinfo.o
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/libc_nonshared.a(elf-init.oS)(.text+0x44): In function `__libc_csu_init':
: undefined reference to `__init_array_end'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/libc_nonshared.a(elf-init.oS)(.text+0x48): In function `__libc_csu_init':
: undefined reference to `__init_array_start'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/libc_nonshared.a(elf-init.oS)(.text+0x8c): In function `__libc_csu_fini':
: undefined reference to `__fini_array_end'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/libc_nonshared.a(elf-init.oS)(.text+0x90): In function `__libc_csu_fini':
: undefined reference to `__fini_array_start'
collect2: ld returned 1 exit status
make[2]: *** [sbcinfo] 错误 1
make[2]: Leaving directory `/home/blueZ/bluez-utils-3.36/sbc'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/home/blueZ/bluez-utils-3.36'
make: *** [all] 错误 2
原因:auto 工具生成的 makefile 文件,在链接 libc_nonshared.a 时使用 gcc -Wall,正确的用法是 gcc -shared
方法:将 sbc 目录中 makefile 文件里的 wall 改为 shared
为避免类似错误,对所有目录下 Makefile 文件均做如上修改
三、交叉编译 openobex 库
(1)./configure --prefix=/root/bluez_install/openobex-1.3 --host=arm-linux CC="arm-linux-gcc -I/root/bluez_install/bluez-libs-3.36/include -L/root/bluez_install/bluez-libs-3.36/lib" --enable-bluetooth --disable-usb --enable-apps
(2)运行:make
(3)运行:make install
Bluetooth开发环境的搭建
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Linux基本操作命令
wbzjacky
2019-02-24 13:12:38
真实的模拟***综合实验
wbzjacky
2019-02-24 13:12:37
三层交换机的HSRP、vlan、端口聚合
wbzjacky
2019-02-24 13:12:37
HSRP和二层交换机的端口聚合、vlan
wbzjacky
2019-02-24 13:12:37
如果同事暗中伤害你,应该怎么办?
這個饅頭有餡
2019-02-24 13:59:08
职场中,抱怨越多的员工,越被领导瞧不起!
這個饅頭有餡
2019-02-24 13:59:08
老程序员被裁,应届生却能月薪 1.3 万?这你能忍?
前端高達
2019-02-24 13:48:04
遇到到处蹭吃却从不请客吃饭的主怎么办?
樑軍年
2019-02-24 13:26:35
高标准机房综合配线安装
wbzjacky
2019-02-24 13:12:38
IPsec ***实验
wbzjacky
2019-02-24 13:12:37
CISCO路由AAA的Easy ***
wbzjacky
2019-02-24 13:12:37
CISCO访问控制列表 企业网络管理的必杀技
wbzjacky
2019-02-24 13:12:37