您尚未登录。

楼主 #1 2018-09-27 09:27:31

WM_CH
会员
注册时间: 2018-08-18
已发帖子: 38
积分: 83

交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

使用ubuntu 16.04 64位
参考文章:https://blog.csdn.net/hzzhengyx/article/details/78598767

我的记录:

1)编译zlib:
版本:zlib-1.2.8.tar.xz
解压: tar -Jxvf zlib-1.2.8.tar.xz -C .
./configure --prefix=/home/book/Documents/bluez-location
修改Makefile:
CC=arm-hisiv300-linux-gcc 
LDSHARED=arm-hisiv300-linux-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map 
CPP=arm-hisiv300-linux-gcc -E 
AR=arm-hisiv300-linux-ar 
RANLIB=arm-hisiv300-linux-ranlib

make
make install




2)编译libffi
版本:libffi-3.0.13.tar.gz
解压:tar -xzvf libffi-3.0.13.tar.gz -C .
./configure --host=arm-hisiv300-linux --prefix=/home/book/Documents/bluez-location
make
make install







3)编译glib
版本:glib-2.40.0.tar.xz 
解压:tar -Jxvf glib-2.40.0.tar.xz -C ../hisi_dependency_package


依赖 gettext:
sudo apt-get install gettext

依赖 glib-genmarshal:
sudo apt-get install libglib2.0-dev

需要交叉编译 gettext
版本:gettext-0.18.3.1.tar.gz
解压 tar -xzvf gettext-0.18.3.1.tar.gz  -C ../hisi_dependency_package
./configure --host=arm-hisiv300-linux --prefix=/home/book/Documents/bluez-location/gettext-location 再加一层目录,一会儿好摘出来gettext的lib和include。
make 
make install
gettext_lib对应的lib,include拷贝到/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi 下的lib,include里


回到glib的编译:
./configure --host=arm-hisiv300-linux --prefix=/home/book/Documents/bluez-location \
PKG_CONFIG_PATH=/home/book/Documents/bluez-location/lib/pkgconfig \
glib_cv_stack_grows=no glib_cv_uscore=yes ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes 

make 
make install





4)编译 expat
版本:expat-2.1.0.tar.gz
解压:tar -xzvf expat-2.1.0.tar.gz -C ../hisi_dependency_package
./configure --host=arm-hisiv300-linux --prefix=/home/book/Documents/bluez-location
make 
make install





5)编译d-bus
版本:dbus-1.10.8.tar.gz
解压:tar -xzvf dbus-1.10.8.tar.gz -C ../hisi_dependency_package
export CFLAGS=-I/home/book/Documents/bluez-location/include  
export LDFLAGS='-L/home/book/Documents/bluez-location/lib -L/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib/ -lintl'

./configure --host=arm-hisiv300-linux \
--with-system-socket=/var/run/system_bus_socket --with-system-pid-file=/var/run/dbus.pid \
--enable-abstract-sockets --prefix=/home/book/Documents/bluez-location
注意两个配置选项:
--with-system-socket   指明的d-bus的系统socket 文件的路径,我们配置为/var/run/system_bus_socket。 
当d-bus启动后,就会在/var/run/ 目录下生成一个system_bus_socket文件, 因此/var/run/目录必须存在。
--with-system-pid-file同上。
make
make install



出错:
/home/book/Documents/bluez-location/lib/libglib-2.0.so: undefined reference to `libintl_dngettext'
/home/book/Documents/bluez-location/lib/libglib-2.0.so: undefined reference to `libintl_textdomain'
/home/book/Documents/bluez-location/lib/libglib-2.0.so: undefined reference to `libintl_dcgettext'
/home/book/Documents/bluez-location/lib/libgio-2.0.so: undefined reference to `libintl_bind_textdomain_codeset'
/home/book/Documents/bluez-location/lib/libglib-2.0.so: undefined reference to `libintl_bindtextdomain'
/home/book/Documents/bluez-location/lib/libglib-2.0.so: undefined reference to `libintl_dgettext'
/home/book/Documents/bluez-location/lib/libgio-2.0.so: undefined reference to `libintl_gettext'
/home/book/Documents/bluez-location/lib/libgio-2.0.so: undefined reference to `libintl_ngettext'

export LDFLAGS=-L/home/book/Documents/bluez-location/lib 
改为
export LDFLAGS='-L/home/book/Documents/bluez-location/lib 
-L/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib/ 
-lintl'
因为在我的工具链路径里面,确实是有libintl的!
ls /opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib/*intl*
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib/libintl.a
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib/libintl.la
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib/libintl.so
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib/libintl.so.8
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/lib/libintl.so.8.1.2


/**/





6)编译ncurses
版本:ncurses-5.9.tar.gz
解压:tar -xzvf ncurses-5.9.tar.gz -C ../hisi_dependency_package
./configure --host=arm-hisiv300-linux --with-shared  --prefix=/home/book/Documents/bluez-location CXX="arm-hisiv300-linux-g++" 
make 
make install



7) 编译 readline
版本:readline-6.3.tar.gz
解压:tar -xzvf readline-6.3.tar.gz -C ../hisi_dependency_package
./configure --host=arm-hisiv300-linux --prefix=/home/book/Documents/bluez-location bash_cv_wcwidth_broken=yes 
make 
make install 

make install时第一次出错:
mv /home/book/Documents/bluez-location/lib/libreadline.a /home/book/Documents/bluez-location/lib/libreadline.old
mv: cannot stat '/home/book/Documents/bluez-location/lib/libreadline.a': No such file or directory
Makefile:238: recipe for target 'install-static' failed
make: [install-static] Error 1 (ignored)
/usr/bin/install -c -m 644 libreadline.a /home/book/Documents/bluez-location/lib/libreadline.a
test -n "arm-hisiv300-linux-ranlib" && arm-hisiv300-linux-ranlib /home/book/Documents/bluez-location/lib/libreadline.a
mv /home/book/Documents/bluez-location/lib/libhistory.a /home/book/Documents/bluez-location/lib/libhistory.old
mv: cannot stat '/home/book/Documents/bluez-location/lib/libhistory.a': No such file or directory
但是第二次make install就没事了,额。。。



8)编译 blueZ
版本:bluez-5.29
./configure --host=arm-hisiv300-linux --prefix=/home/book/Documents/bluez-location --localstatedir=/var/run \
PKG_CONFIG_PATH=/home/book/Documents/bluez-location/lib/pkgconfig \
--disable-systemd --disable-udev --disable-cups --disable-obex --enable-library

修改Makefile:在Makefile中 -lreadline的后面加上 -lncurses(共6处,我全加了)

make
make install





然后,加载固件,再然后:


2. 启动d-bus
    1)当所有的编译完成后,配置文件的位置:
    system.conf位于prefix/share/dbus-1/system.conf
    bluetooth.conf位于prefix/etc/dbus-1/system.d/bluetooth.conf
    注意,prefix是编译的时候配置的安装路径
    2)修改配置文件
    对于system.conf:
        修改点1:
        <user>messagebus</user>    修改为   <user>root</user>
        修改点2:
        <includedir>/home/zhengyx/work/extend/BlueZ/realTek_8723BS/BlueZ_build/hisi_lib_install/etc/dbus-1/system.d</includedir> 
        修改为 <includedir>/etc/bluetooth</includedir>  
        <includedir>这个选项指明"bluetooth.conf"!!!的路径
    
    对于bluetooth.conf:
        修改点1:
        删除
        <policy group="lp">
            <allow send_destination="org.bluez"/>
          </policy>
          
    修改的地方,用"shenen"做了标记
    
3)执行dubs
    dbus-daemon --config-file=/etc/bluetooth/system.conf

3.. 启动blueZ
bluetoothd -d -n


关于加载AP6212固件:
整体思想就是通过串口,使用HCI命令,把固件传给AP6212就可以了。
不同的目标ARM板需要自行讲引脚功能配置为UART工作模式。

我这边主要就是把两个流控引脚全部拉低了(因为硬件设计板子画错了)也是受晕哥帖子的启发。
CTS/RTS全部拉低后,再使用github上的一个代码,就可以加载固件到AP6212里面了。
github地址:
https://github.com/rafaello7/nanopi-bluetooth
回来把这个代码交叉编译成一个目标ARM板的程序,再随便在GitHub上找个固件,名字叫bcm43438a1.hcd(一开始以为是bcm43438a0.hcd)

目标ARM板上单后,执行:
./ap6212hciattach /dev/ttyAMA1 1000000 
即可加载固件成功。
输出的日志:

bcm43xx_init
reset retry
Set Controller UART speed to 1000000 bit/s
Flash firmware /lib/firmware/brcm/bcm43438a1.hcd
Set BDADDR UART: any
Incorrect bdaddr
Set Controller UART speed to 1000000 bit/s
Device setup complete

执行
hciconfig hci0 up 打开蓝牙
hcitool scan 即可进行扫描
hcitool和hciconfig这些工具都是我移植的BlueZ


======================上边是成功的部分,下边是还没成功的部分==========================

我现在面临的问题:
移植的蓝牙工具bluetoothd 运行之后卡死。。。
移植的蓝牙工具bluetoothctl运行之后命令行被冻结。。。

之后,使用移植的各种工具一通乱怼,如:
绑定 rfcomm bind /dev/rfcomm0 50:9E:A7:5A:1E:9D 12
链接
hcitool cc 50:9E:A7:5A:1E:9D
hcitool auth 50:9E:A7:5A:1E:9D(返回not connect。。。尴尬


后来,想用BlueZ提供的API进行编程,
这里推荐一个BlueZ的API的帖子:实战bluetooth编程:http://blog.sina.com.cn/s/articlelist_1613727600_2_1.html
和一个老外写的文档,很好。书名叫:Bluetooth for programmers 后简称BTBook.pdf 地址:http://people.csail.mit.edu/rudolph/Teaching/Articles/BTBook.pdf
但是,仍然,找到的API代码只能带我走到扫描这一步。



我的疑问:
1. 我这里不太理解,BTbook里面解释的rfcomm的两段代码,一个是server一个是client。
我这边AP6212所在的ARM开发板运行一个client代码,然后需要一台其他设备运行server代码吗?

2. 我看其他帖子说如果想要配对、连接、传数据,需要一个agent,但我不知道blueZ的agent在哪里弄。

救命啊!!!








最近编辑记录 WM_CH (2018-09-27 09:34:18)

离线

#2 2018-09-27 09:34:10

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,237
积分: 9197

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

感谢分享!





在线

#3 2018-09-27 09:36:53

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,237
积分: 9197

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

bluez 使用非常繁琐, 连 android 都放弃治疗了,改用 bluedroid.

建议使用 btstack, 不过这个协议栈商业使用需要付费,如果只是国内买卖你懂的。

btstack 更容易使用,而且在应用层驱动,非常方便。





在线

楼主 #4 2018-09-27 09:37:20

WM_CH
会员
注册时间: 2018-08-18
已发帖子: 38
积分: 83

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

晕哥 说:

感谢分享!

晕哥帮我解答一下吧:)

离线

楼主 #5 2018-09-27 09:45:23

WM_CH
会员
注册时间: 2018-08-18
已发帖子: 38
积分: 83

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

晕哥 说:

bluez 使用非常繁琐, 连 android 都放弃治疗了,改用 bluedroid.

建议使用 btstack, 不过这个协议栈商业使用需要付费,如果只是国内买卖你懂的。

btstack 更容易使用,而且在应用层驱动,非常方便。

blueZ真的没救吗,搞了好久blueZ的。。。
真的只能转投btstack了吗,晕哥

离线

#6 2018-09-27 09:48:19

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,237
积分: 9197

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

我只是玩过 blueZ 而已, 没有出过产品,反正就是各种难用,以后公司的产品我也打算用 btstack。

电脑ubuntu上的蓝牙(也是blueZ)用到想死.





在线

楼主 #7 2018-09-27 09:55:18

WM_CH
会员
注册时间: 2018-08-18
已发帖子: 38
积分: 83

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

晕哥 说:

我只是玩过 blueZ 而已, 没有出过产品,反正就是各种难用,以后公司的产品我也打算用 btstack。

电脑ubuntu上的蓝牙(也是blueZ)用到想死.

好吧

FluxBB bbcode 测试

离线

#8 2019-01-26 15:19:42

dong1
会员
注册时间: 2019-01-26
已发帖子: 6
积分: 6

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

我来迟了,哈哈

bluez请参考

https://www.cnblogs.com/dong1/p/8271385.html

离线

#9 2019-01-26 15:23:32

dong1
会员
注册时间: 2019-01-26
已发帖子: 6
积分: 6

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

已经出了几款产品,bluez用在cortex a5上,蓝牙SOC是wg7813(bluetooth和wifi的复合模块,芯片是TI的wl18xx)

总体是参考这个wiki来的

http://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BlueZ_Bluetooth_tools_for_ARM

离线

#10 2019-01-26 15:59:13

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,237
积分: 9197

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

dong1 说:

我来迟了,哈哈

bluez请参考

https://www.cnblogs.com/dong1/p/8271385.html

哇,学习!非常全面





在线

#11 2020-05-27 10:23:14

lostangel
会员
注册时间: 2020-05-27
已发帖子: 8
积分: 8

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

这个楼主解决了吗?我也遇到了这个问题,能说下怎么解决的嘛?

离线

#12 2020-08-31 08:38:08

湘楚浪子
会员
注册时间: 2019-12-22
已发帖子: 40
积分: 39.5

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

楼主的问题最后解决了吗?

离线

#13 2020-09-01 11:08:34

KingJin
会员
注册时间: 2018-04-12
已发帖子: 106
积分: 101

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

正基的模块,为什么不用BSA 协议栈。BSA协议栈简单

离线

#14 2022-07-12 16:44:45

kk200
会员
注册时间: 2022-07-08
已发帖子: 9
积分: 4

Re: 交叉编译工具hisiv300 移植BlueZ 5.29 蓝牙芯片AP6212 后边有人喊救命!

bluez交叉编译比较复杂,但是胜在代码开源

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn