blueZ在2410上的移植

 在完成了在普通red hat上的安装,熟悉了蓝牙协议栈一些基本的东西,下面把buletooth协议栈搬到开发板上了。
  第一步当然还是内核了,由于各个公司对ARM2410所使用的内核代码改过,我也不知道从bluez上下载的patch能不能使用,只好先试试看了。
# cd /ARM2410/kernel
# gzip -dc ~/patch-2.4.18-mh15.gz | patch -p1
# find ./ -name '*rej'
./fs/cramfs/inode.c.rej
  有文件不能patch,看看是针对cramfs文件系统的patch,我也不清楚为什么bluez的patch会修改到cramfs,不过我想问题应该不大。内核源代码关于bluetooth的部分应该没有改过,因此patch的主要部分应该是没有问题的。如果内核编译后发生问题,我想大概也只有把内核代码翻出来看了。
先就这样了,用用试试看好了。与普通pc上的类似,只不过有些是m的现在统统为y了。我的配置关于Bluez的部分设置为:
#
# Bluetooth support
#
CONFIG_BLUEZ=y
CONFIG_BLUEZ_L2CAP=y
# CONFIG_BLUEZ_SCO is not set
CONFIG_BLUEZ_RFCOMM=y
CONFIG_BLUEZ_RFCOMM_TTY=y
CONFIG_BLUEZ_BNEP=y
CONFIG_BLUEZ_BNEP_MC_FILTER=y
CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
# CONFIG_BLUEZ_HIDP is not set
#
# Bluetooth device drivers
#
CONFIG_BLUEZ_HCIUSB=y
# CONFIG_BLUEZ_HCIUSB_SCO is not set
# CONFIG_BLUEZ_HCIUART is not set
# CONFIG_BLUEZ_HCIBFUSB is not set
# CONFIG_BLUEZ_HCIDTL1 is not set
# CONFIG_BLUEZ_HCIBT3C is not set
# CONFIG_BLUEZ_HCIBLUECARD is not set
# CONFIG_BLUEZ_HCIBTUART is not set
# CONFIG_BLUEZ_HCIVHCI is not set

  device部分就设了个USB的,其他的就不设置了。
  下面继续make dep;make zImage的常规过程,OK,没有发生编译问题,可以稍微舒口气了。 
下面要移植Bluez的基础库了,在Redhat 9下执行
# ldd /usr/lib/libbluetooth.so.2.25
libc.so.6 => /lib/libc.so.6 (0x4002c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
  发现没有依赖什么莫名其妙的库,应该换个编译器就可以了,configure一下就可以了。我的配置命令很简单: 
# ./configure --host=armv4l --prefix=/ARM2410/applications/bluezport/libs CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cpp AR=/opt/host/armv4l/bin/armv4l-unknown-linux-ar STRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-strip RANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib
LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
# make
# make install
  OK了,到了/ARM2410/applications/bluezport/libs下看看,我也不清楚为什么,居然只有.a和.la的静态库,没有动态库。只好自己动手,到bluz-libs-2.17/src/下,自己编译动态库:
# /opt/host/armv4l/bin/armv4l-unknown-linux-gcc -shared -o libbluetooth.so.2.25 bluetooth.o hci.o sdp.o
再做两个符号连接
# ln -s libbluetooth.so.2.25 libbluetooth.so
# ln -s libbluetooth.so.2.25 libbluetooth.so.1
  好了,库交叉编译完毕,mv到/ARM2410/application/bluezport/libs/lib文件夹下就可以了。

  接着移植Bluez的工具集。与库类似,先看一下各个程序需要用到什么库,比如:
#ldd /usr/sbin/hcid
libbluetooth.so.1 => /usr/lib/libbluetooth.so.1 (0x40035000)
libc.so.6 => /lib/libc.so.6 (0x40042000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
  挨个试试需要用的工具,发现需要的库ARM板子的公司和Bluez都提供了,应该换个编译器编译一下就可以了。编译之前我为了到板子上与我自己的手机连接方便修改了bluez-utils-2.17/hcid/security.c文件,在init_security_data函数中的设置默认的密码,非常简单地改了两行:
strcpy(hcid.pin_code, "123");
hcid.pin_len = 3;
  然后configure我想就行了,我的configure设置为:
#./configure --prefix=/ARM2410/applications/bluezport/utils --includedir=/ARM2410/applications/bluezport/libs/include --libdir=/ARM2410/applications/bluezport/libs/lib --with-bluez=/ARM2410/applications/bluezport/libs --disable-test --disable-cups --disable-pcmia --host=armv4l CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cpp AR=/opt/host/armv4l/bin/armv4l-unknown-linux-ar STRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-strip RANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
# make
  我在这步make的时候出现了一点小错误,好像是说PATH_MAX没有定义,这个是LINUX设置的存放路径名缓冲区的最大长度。应该是少包含了一个头文件造成的。我没有去仔细考究,就在当前文件下的config.h中添加了三行:
#ifndef PATH_MAX
#define PATH_MAX 4095/* PAGE_SIZE - 1 */
#endif
  采用简单粗鲁的添加定义的方式。再make,通过。
# make install
  好了,工具集都在/ARM2410/applications/bluezport/util下了
    现在就剩下最后一步了,将编译好的内核和交叉编译好的lib和utils下载到ARM2410实验系统板上去。这样你在ARM2410实验系统板启动后插入USB 蓝牙适配器后就能够看到设备已经加载了
#hciconfig    可以看到有bluetooth设备加载了
# hciconfig hci0 up   启动USB 蓝牙适配器设备
# hcid -f /etc/bluetooth/hcid.conf  
# hciconfig –a    查看USB 蓝牙适配器设备的详细信息
 还有的工作就是写一个RFCOMM通信的程序,一个server端程序和一个client端程序,使用Liunx和ARM2410实验系统板间的两个USB 蓝牙适配器来进行蓝牙之间的通信实验

你可能感兴趣的:(blueZ在2410上的移植)