1、我的操作环境是 主机:xp + VMware ubuntu 10.10 。 开发板:OK6410 。 文件系统: yaffs2 。 蓝牙:蓝牙适配器(适配器在PC ubuntu 下测试可用)。交叉编译器:arm-linux-gcc 4.3.2 操作环境环境提示:如果你有red hat 或者 Fedora 这两个操作环境,建议你首选这两个环境,应为Ubuntu 操作起来问题太多了。 2、配置内核支持Bluetooth, 2.1 make menuconfig [*] Networking support <*> <*> <*> <*> [*] <*> [*] [*] <*> Bluetooth device drivers <*> HCI USB driver <M>HCI UART driver <*> HCI BlueFRITZ! USB driver <*> HCI VHCI (Virtual HCI device) driver 2.2 下载内核 检测USB 蓝牙设备信息: [root@Mr /mnt]#usb 1-1: new full speed USB device using s3c2410-ohci and address [root@FORLINX6410]# hciconfig检测蓝牙设备 我用到的几个库: bluez-lib-3.36.tar.gz expat-2.0.1.tar.gz dbus-1.2.16.tar.gz glib-2.22.4.tar.bz2 libusb-0.1.12.tar.gz bluez-utils-3.36.tar.gz 注:/opt/libs 和/opt/utils是我自己编译时用的路径,你可以随便的选取。 1,编译安装bluez-lib-3.36.tar.gz 这个库不需要什么依赖,直接解压,配置,编译然后安装即可。 #tar zxvf bluez-lib-3.36.tar.gz #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC=arm-linux-gcc #make #make install 2,编译安装expat-2.0.1.tar.gz 这个库是后面的dbus依赖的,你也可以用libxml2来代替expat,官方网站上说dbus必须依赖于他们中的一个,我这里用的是expat-2.0.1.tar.gz。 #tar zxvf expat-2.0.1.tar.gz #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC=arm-linux-gcc #make #make install 3,编译安装dbus-1.2.16.tar.gz #tar zxvf dbus-1.2.16.tar.gz #echo ac_cv_have_abstract_sockets=yes>arm-linux.cache #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --cache-file=arm-linux.cache --with-x=no #make #make install 4,编译安装glib-2.22.4.tar.bz2 #tar -zxjf glib-2.22.4.tar.bz2 #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 #echo ac_cv_func_posix_getgrgid_r=yes>> #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --cache-file=arm-linux.cache 有错误: #make 有错误: > giounix.c: In function `g_io_unix_read': > giounix.c:181: `SSIZE_MAX' undeclared (first use in this function) > giounix.c:181: (Each undeclared identifier is reported only once > giounix.c:181: for each function it appears in.) > make[3]: *** [giounix.lo] Error 1 [root@localhost glib-2.22.4]# find ./|grep giounix ./glib/giounix.c ./glib/.deps/giounix.Plo ./glib/.libs/giounix.o ./glib/giounix.lo 在 glib/giounix.c中加入: #include <bits/posix1_lim.h> #make install 5,编译安装libusb-0.1.12.tar.gz 这个库不需要什么依赖,直接解压,配置,编译然后安装即可。 #tar zxvf libusb-0.1.12.tar.gz #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" #make #make install 6,编译安装bluez-utils-3.36.tar.gz #tar zxvf bluez-utils-3.36.tar.gz 加上:PKG_CONFIG_PATH=/opt/libs/lib/pkgconfig #./configure --prefix=/opt/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/libs/include -L/opt/libs/lib" --disable-audio #make 有错误: In file included from /opt/toolchains/arm920t-eabi/lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/include/stdlib.h:969, from ../eglib/gmain.h:4, from ../eglib/glib.h:1, from glib-helper.c:41: /opt/toolchains/arm920t-eabi/lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/include/bits/stdlib.h:70:3: error: #error "Assumed value of MB_LEN_MAX wrong" make[2]: *** [glib-helper.o] Error 1 make[2]: Leaving directory `/home/yan/bluez-utils-3.36/common' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/yan/bluez-utils-3.36' make: *** [all] Error 2 解决方法: [root@localhost opt]# find ./|grep stdlib.h ./toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/stdlib.h ./toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/bits/stdlib.h 在/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/include/bits/stdlib.h中 将 #define STDLIB_MB_LEN_MAX 16 改为 #define STDLIB_MB_LEN_MAX 1 #make install 这样Bluez协议栈就编译好了。
|
|