blueZ在2410上的移植

简介:  在完成了在普通red hat上的安装,熟悉了蓝牙协议栈一些基本的东西,下面把buletooth协议栈搬到开发板上了。   第一步当然还是内核了,由于各个公司对ARM2410所使用的内核代码改过,我也不知道从bluez上下载的patch能不能使用,只好先试试看了。

 在完成了在普通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 蓝牙适配器来进行蓝牙之间的通信实验

目录
相关文章
|
Ubuntu Linux API
libusb简介及在Linux中安装libusb
最近做了关于在X86环境下通过FT232H芯片实现的USB转SPI的相关驱动,接触到了libusb。libusb是一个开源的用C实现的,应用程序与用户的USB设备进行通信的库。它是可移植的,对外使用统一的API,支持Windows、macOS、Linux、Android。它是用户模式(user-mode),应用程序与USB设备通信不需要高权限,但是在Android下好像有些接口需要root权限才能调用成功。它支持所有版本的USB协议。它的License是LGPL,源码地址在https://github.com/libusb/libusb,最新发布版本为1.0.23。
libusb简介及在Linux中安装libusb
|
5月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
225 3
|
8月前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
309 0
|
8月前
|
网络协议 Unix Linux
【Linux】NUC977移植使用libmodbus
【Linux】NUC977移植使用libmodbus
232 0
|
8月前
|
Linux 编译器 Windows
【Linux】新唐NUC977系统编译及烧写流程
【Linux】新唐NUC977系统编译及烧写流程
132 0
|
8月前
|
编解码 Ubuntu 算法
【Linux】NUC977移植使用MQTT(基于mosquitto)
【Linux】NUC977移植使用MQTT(基于mosquitto)
115 0
|
物联网
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(上)
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统
299 0
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(上)
|
物联网
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(下)
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统
347 0
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(下)
|
编译器 Linux 开发工具
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十)gcc编译器的使用(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十)gcc编译器的使用
439 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十)gcc编译器的使用(上)