移植 usb 蓝牙适配器到 arm 板

来源:互联网 发布:推荐多肉花盆淘宝店铺 编辑:程序博客网 时间:2024/04/29 07:20

移植 usb 蓝牙适配器到 arm 板

 (2014-09-14 23:44:45)
转载
标签: 

linux

 

arm

 

蓝牙

 

移植

分类: linux_develop
操作环境  win7 vmware fedora 10 usb 蓝牙适配器  tq2440 
内核 2.6.30    交叉编译器 4.3.3 
 
配置内核 
make menuconfig 
[*] Networking support  --->                 
<*>   Bluetooth subsystem support  --->    //蓝牙子系统必须选择 
<*>   L2CAP protocol suppor       //逻辑链路控制和适配协议。 
<*>   SCO links support           //蓝牙语音和耳机支持 
<*>   RFCOMM protocol suppor      //面向流的传输协议,支持拨号网络等 
[*]   RFCOMM TTY support          // 
<*>   BNEP protocol support       //蓝牙网络封装协议,自组网支持 
[*]   Multicast filter support    //蓝牙多播,支持支持 BNEP 
[*]   Protocol filter support //蓝牙多播,支持支持支持 BNEP 
<*>   HIDP protocol support       //基本支持协议 
Bluetooth device drivers  ---> 
<*> HCI USB driver              //USB 蓝牙模块支持 
HCI UART driver              //基于串口,CF 卡或 PCMCIA 的蓝牙 
<*> HCI BlueFRITZ! USB driver 
<*> HCI VHCI (Virtual HCI device) driver 
 
编译内核烧入开发板中 
启动,插入蓝牙适配器 
usb 1-1.2: new full speed USB device using s3c2410-ohci and address 3 
usb 1-1.2: New USB device found, idVendor=0a12, idProduct=0001 
usb 1-1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0 
usb 1-1.2: configuration #1 chosen from 1 choice 
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板
移植蓝牙协议栈 
库文件 
bluez-libs-3.36.tar.gz 
dbus-1.5.12.tar.gz 
expat-2.0.1.tar.gz 
glib-2.26.1.tar.gz 
bluez-utils-3.36.tar.gz 
libusb-0.1.12.tar.gz 
 
编译安装 
bluez-libs-3.36.tar.gz 
没有什么依赖,直接解压,配置,编译安装 
#tar -zxvf /mnt/hgfs/Linux/bluez/bluez-lib-3.36.tar.gz –C ./ 
#./configure --prefix=/opt/EmbedSky/bluez/libs --host=arm-linux --target=arm-linux CC=arm-linux-gcc 
在/opt/EmbedSky/bluez/目录下新建一个 libs 用来保存蓝牙的库文件、头文件和其他文件。 
#make 
#make install 
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板


expat-2.0.1.tar.gz 
这个库是后面的 dbus 依赖的 
#tar -zxvf /mnt/hgfs/Linux/bluez/ expat-2.0.1.tar.gz –C ./ 
#./configure --prefix=/opt/EmbedSky/bluez/libs --host=arm-linux --target=arm-linux   CC=arm-linux-gcc 
#make  
#make install
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板


dbus-1.5.12.tar.gz 
#tar -zxvf /mnt/hgfs/Linux/bluez/   dbus-1.5.12.tar.gz –C ./ 
#echo ac_cv_have_abstract_sockets=yes>arm-linux.cache 
#./configure --prefix=/opt/EmbedSky/bluez/libs --host=arm-linux --target=arm-linux   CC="arm-linux-gcc -I/opt/EmbedSky/
bluez/libs/include -L/opt/EmbedSky/bluez/libs/lib" --cache-file=arm-linux.cache --with-x=no 
#make  
#make install
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板


glib-2.26.1.tar.gz(这个的安装会遇到相当多的问题,下面有解决的方法) 
#tar -zxvf /mnt/hgfs/Linux/bluez/glib-2.26.1.tar.gz –C ./ 
#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 c_cv_func_posix_getpwuid_r=yes>>arm-linux.cache 
#echo ac_cv_func_posix_getgrgid_r=yes>> arm-linux.cache 
注意:">"和">>"的区别 
#./configure --profix=/opt/EmbedSky/bluez/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/EmbedSky/bl
uez/libs /include -L/opt/EmbedSky/bluez/libs/lib" --cache-file=arm-linux.cache 
#make  
#make install

错误 
checking for posix getpwuid_r... configure: error: in `/opt/EmbedSky/bluez/glib-2.26.1 
':configure: error: cannot run test program while cross compiling 
See `config.log' for more details. 
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板

解决方法: 
# echo ac_cv_func_posix_getpwuid_r=yes>> arm-linux.cache 
 
 
configure: error: Could not find a glib-genmarshal in your PATH 
解决方法: 
yum install libglib2.0-devel,这样在/usr/bin/目录下就有一个 glib-genmarshal 的应用程序。 
 
 
checking for posix getgrgid_r... configure: error: in `/opt/EmbedSky/bluez/glib-2.26.1 
':configure: error: cannot run test program while cross compiling 
See `config.log' for more details. 

移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板

解决方法: 
# echo ac_cv_func_posix_ getgrgid_r _r=yes>> arm-linux.cache 
 
 
configure: error: Could not find a glib-compile-schemas in your PATH 
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板
这个问题确实要把我搞吐血了,我差不多找用遍百度、谷歌、搜狗和 360 搜索,英文的资料都找遍了,问题是有人问,但没一个人有解决的方案。有人说这个 glib-compile-schemas 是安装 glib-2.26.1.tar.gz 才有的,但是我现在是安装这个就要啊。 
在/usr/bin/目录下,有一个名为 glib-genmarshal 的应用程序,但就是没有 glib-compile-schemas 的应用程序。想了很久,也郁闷了好久,最后无意看到 ChangeLog 文件,心里好像悟到点什么。先用 gcc 编译出应用程序来,再用交叉编译器来编译行不行呢?哈哈 
解决方法: 
#./configure --prefix=/opt/EmbedSky/bluez/libs      CC=" gcc -I/opt/EmbedSky/bluez/libs/include -L/opt/libs/lib"  
#make  
#make install 
编译安装后,在/opt/EmbedSky/bluez/libs/bin/目录下就生成了 glib-compile-schemas 的应用程序,把它复制到/usr/bin/目录下,然后再用交叉编译器来编译。 
 
 用交叉编译器编译 make 时出现错误 glib-genmarshal   : GLib-Genmarshal-WARNING **: unknown type: VARIANT 
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板

这个问题的解决也是有点灵感来的。 
解 决 方 法 : 前 面 说 到 在 /usr/bin/ 目 录 下 本 来 就 有 一 个 glib-genmarshal  , 当 我 们 用 gcc 编 译 的 时 候 , 在/opt/EmbedSky/bluez/libs/bin/目录下同样生成一个 glib-genmarshal 应用程序,在 make 的时候,调用的估计是原来的/usr/bin/目录下的。由于版本不同或者其他什么的,出错了。我们在/usr/bin/目录下的 glib-genmarshal 删掉,把/opt/EmbedSky/bluez/libs/bin/目录下的 glib-genmarshal 应用程序复制到/usr/bin/目录下即可。 
 
 
libusb-0.1.12.tar.gz 
#tar -zxvf /mnt/hgfs/Linux/bluez/libusb-0.1.12.tar.gz –C ./ 
#./configure --profix=/opt/EmbedSky/bluez/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/EmbedSky/bl
uez/libs /include -L/opt/EmbedSky/bluez/libs/lib" 
#make  
#make install 
 
bluez-utils-3.36.tar.gz 
#tar -zxvf /mnt/hgfs/Linux/bluez/bluez-utils-3.36.tar.gz –C ./ 
#./configure --profix=/opt/EmbedSky/bluez/libs --host=arm-linux --target=arm-linux CC="arm-linux-gcc -I/opt/EmbedSky/bl
uez/libs /include -L/opt/EmbedSky/bluez/libs/lib" --disable-audio 
 #make  
 #make install 
 
可能出现的错误: 
checking for BLUEZ... configure: error: Bluetooth library is required 
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板
这个问题也搞了我好长时间,同样在网上几乎找不到可行的答案。网上有说解决方法为 sudo apt-get install 
libbluetooth-dev。但是在 fedora 上输入 yum install libbluetooth-dev,你会发现根本找不到这样的安装包的。 甚至你输入 yum install libbluetooth*都没有安装包。网上也有说是输入 yum install pkg-config,但是根据提示,这里已经说是 yes 了:
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板
所以应该也不是这个原因。另外还有说路径不对的,但我这里我已经很明确指定了路径了,所以也应该不是这个原因。根据英文意思,是少了依赖的库,yum install 没有下载,那可不可以考虑去百度或者谷歌下载一个呢?于是。。。 
解决方法: 
去网上下载一个 libbluetooth-dev_4.66-3_i386.deb 的软件包,用好压工具解压,里面有两个文件 control.tar.gz 和
data.tar.gz,可以看到 data.tar.gz 里面包含有我们需要的头文件和库文件。通过共享目录放在虚拟机上去。 
#tar -zxvf /mnt/hgfs/Linux/bluez/data.tar.gz –C ./ 
你会发现无论你解压到哪个目录,软件包都会固定安装在/usr/include、/usr/lib 和/usr/share 目录下的,这是因为里
面指定了安装目录
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板
这样再次配置的时候就不会出现上面的错误了。 
 
通过上面的操作,库文件和蓝牙工具都已经安装好了(安装在/opt/EmbedSky/bluez/libs 目录下)。下面就把这些东
西放到根文件。 
Copy /opt/EmbedSky/bluez/libs/lib 目录下的库文件到根文件的 lib 目录下,包括 
libbluetooth.so.2.11.2            
libbluetooth.so                                  
libbluetooth.so.2   
libgmodule-2.0.so 
libgmodule-2.0.so.0 
libgmodule-2.0.so.0.2600.1 
Copy/opt/EmbedSky/bluez/sbin 目录下的所有文件到根文件的 sbin 目录下 
Copy/opt/EmbedSky/bluez/etc/bluetooth 目录下的所有文件到根文件的 etc 目录下 
Copy/opt/EmbedSky/bluez/bin 目录下的 hcitool,rfcomm,sdptool 文件到根文件的 bin 目录下 
重新烧写根文件 
 
[root@EmbedSky /]# hciconfig hci0             
hci0:      Type: USB 
                BD Address: 00:15:83:3D:0A:57 ACL MTU: 310:10 SCO MTU: 64:8 
                UP RUNNING ISCAN   
                RX bytes:930 acl:0 sco:0 events:23 errors:0 
                TX bytes:88 acl:0 sco:0 commands:17 errors:0 
移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板

[root@EmbedSky /]# hciconfig hci0 up    启用蓝牙设备 
[root@EmbedSky /]# hciconfig hci0 iscan    设置开发板的蓝牙属性为可查找 
[root@EmbedSky /]# hcitool scan    扫描蓝牙设备 
Scanning ... 
                7B:29:A1:9F:66:01  我手机的蓝牙设备地址            uff    蓝牙设备名 

移植 <wbr>usb <wbr>蓝牙适配器到 <wbr>arm <wbr>板

总结: 
移植蓝牙的库确实比较无聊,依赖的库特别多。整个过程遇到不少问题,当我们遇到问题的时候,除了通过互联网找资料外,我们也要自己多动脑去分析一下。出路总是有的!另外,我们也学会是看一些英文资料,因为英文资料很多都比较简洁直接,而不像中文资料那样你抄我我抄你的!!
0 0
原创粉丝点击