移植 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
移植蓝牙协议栈
库文件
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
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
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
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.
解决方法:
# 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.
解决方法:
# echo ac_cv_func_posix_ getgrgid_r _r=yes>> arm-linux.cache
configure: error: Could not find a glib-compile-schemas in your PATH
这个问题确实要把我搞吐血了,我差不多找用遍百度、谷歌、搜狗和 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/目录下,然后再用交叉编译器来编译。
这个问题的解决也是有点灵感来的。
解 决 方 法 : 前 面 说 到 在 /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
可能出现的错误:
checking for BLUEZ... configure: error: Bluetooth library is required
这个问题也搞了我好长时间,同样在网上几乎找不到可行的答案。网上有说解决方法为 sudo apt-get install
libbluetooth-dev。但是在 fedora 上输入 yum install libbluetooth-dev,你会发现根本找不到这样的安装包的。 甚至你输入 yum install libbluetooth*都没有安装包。网上也有说是输入 yum install pkg-config,但是根据提示,这里已经说是 yes 了:
所以应该也不是这个原因。另外还有说路径不对的,但我这里我已经很明确指定了路径了,所以也应该不是这个原因。根据英文意思,是少了依赖的库,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 目录下的,这是因为里
面指定了安装目录
这样再次配置的时候就不会出现上面的错误了。
通过上面的操作,库文件和蓝牙工具都已经安装好了(安装在/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
[root@EmbedSky /]# hciconfig hci0 up 启用蓝牙设备
[root@EmbedSky /]# hciconfig hci0 iscan 设置开发板的蓝牙属性为可查找
[root@EmbedSky /]# hcitool scan 扫描蓝牙设备
Scanning ...
总结:
移植蓝牙的库确实比较无聊,依赖的库特别多。整个过程遇到不少问题,当我们遇到问题的时候,除了通过互联网找资料外,我们也要自己多动脑去分析一下。出路总是有的!另外,我们也学会是看一些英文资料,因为英文资料很多都比较简洁直接,而不像中文资料那样你抄我我抄你的!!
0 0
- 移植 usb 蓝牙适配器到 arm 板
- ARM USB蓝牙,Bluez 移植。
- 【ARM】嵌入式 ARM Linux 下移植 USB 蓝牙、交叉编译 bluez 各种版本
- tcpdump移植到arm板
- minicom移植到ARM板
- 移植OpenSSH到ARM板
- json移植到ARM板
- 移植Sqlite到ARM板
- 小白ARM平台移植 USB 蓝牙、交叉编译 bluez-4.95
- Linux下的usb蓝牙适配器驱动
- 准备移植xynth到arm板上了。
- 移植BlueZ到ARM开发板【转】
- 移植pcap库到ARM开发板
- Mplayer移植到Arm开发板
- 移植 sshd到arm开发板
- Mplayer移植到Arm开发板
- 移植SQLite3到ARM开发板
- 移植iptables命令到ARM开发板
- 英语零基础也能学好JAVA,我来见证!!
- Java开发视频网站大概需要多少钱?
- JSTL中foreach标签使用
- C++ 标准库bitset类型
- 什么是真正的实时操作系统
- 移植 usb 蓝牙适配器到 arm 板
- Android导出应用数据库
- Linux进程间通信——使用命名管道
- RCU 机制
- stringbuffer与stringbulider区别
- eaccelerator安装
- cocos2d-x 转场景时构造、init、onEnter、onExit、析构各函数调用顺序
- Hello Wrold
- 第四章 线程同步