blueZ在2410上的移植

在完成了在普通redhat上的安装,熟悉了蓝牙协议栈一些基本的东西,下面把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的部分设置为:
#
#Bluetoothsupport
#
CONFIG_BLUEZ=y
CONFIG_BLUEZ_L2CAP=y
#CONFIG_BLUEZ_SCOisnotset
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_HIDPisnotset
#
#Bluetoothdevicedrivers
#
CONFIG_BLUEZ_HCIUSB=y
#CONFIG_BLUEZ_HCIUSB_SCOisnotset
#CONFIG_BLUEZ_HCIUARTisnotset
#CONFIG_BLUEZ_HCIBFUSBisnotset
#CONFIG_BLUEZ_HCIDTL1isnotset
#CONFIG_BLUEZ_HCIBT3Cisnotset
#CONFIG_BLUEZ_HCIBLUECARDisnotset
#CONFIG_BLUEZ_HCIBTUARTisnotset
#CONFIG_BLUEZ_HCIVHCIisnotset

  device部分就设了个USB的,其他的就不设置了。
  下面继续makedep;makezImage的常规过程,OK,没有发生编译问题,可以稍微舒口气了。
下面要移植Bluez的基础库了,在Redhat9下执行
#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/libsCC=/opt/host/armv4l/bin/armv4l-unknown-linux-gccCPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cppAR=/opt/host/armv4l/bin/armv4l-unknown-linux-arSTRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-stripRANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib
LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
#make
#makeinstall
  OK了,到了/ARM2410/applications/bluezport/libs下看看,我也不清楚为什么,居然只有.a和.la的静态库,没有动态库。只好自己动手,到bluz-libs-2.17/src/下,自己编译动态库:
#/opt/host/armv4l/bin/armv4l-unknown-linux-gcc-shared-olibbluetooth.so.2.25bluetooth.ohci.osdp.o
再做两个符号连接
#ln-slibbluetooth.so.2.25libbluetooth.so
#ln-slibbluetooth.so.2.25libbluetooth.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=armv4lCC=/opt/host/armv4l/bin/armv4l-unknown-linux-gccCPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cppAR=/opt/host/armv4l/bin/armv4l-unknown-linux-arSTRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-stripRANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlibLD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
#make
  我在这步make的时候出现了一点小错误,好像是说PATH_MAX没有定义,这个是LINUX设置的存放路径名缓冲区的最大长度。应该是少包含了一个头文件造成的。我没有去仔细考究,就在当前文件下的config.h中添加了三行:
#ifndefPATH_MAX
#definePATH_MAX4095/*PAGE_SIZE-1*/
#endif
  采用简单粗鲁的添加定义的方式。再make,通过。
#makeinstall
  好了,工具集都在/ARM2410/applications/bluezport/util下了
现在就剩下最后一步了,将编译好的内核和交叉编译好的lib和utils下载到ARM2410实验系统板上去。这样你在ARM2410实验系统板启动后插入USB蓝牙适配器后就能够看到设备已经加载了
#hciconfig可以看到有bluetooth设备加载了
#hciconfighci0up启动USB蓝牙适配器设备
#hcid-f/etc/bluetooth/hcid.conf
#hciconfig–a查看USB蓝牙适配器设备的详细信息
还有的工作就是写一个RFCOMM通信的程序,一个server端程序和一个client端程序,使用Liunx和ARM2410实验系统板间的两个USB蓝牙适配器来进行蓝牙之间的通信实验

你可能感兴趣的:(UE)