在rk3399平台移植rtl8723DS(蓝牙篇)

目录

1 说明

2 过程

2.1 libiconv

2.2 glib

2.3 dbus

2.4 ncurses

2.5 bluez

2.6 编译收尾

2.7 修改蓝牙设备名字

2.8 执行rtk_hciattach


1 说明

前段时间写了几篇文章介绍了在hi3518ev300上移植rtl8723DS的功能(Wi-Fi和蓝牙),wifi模块和开发包购买自深圳市必联电子有限公司,本文在此基础之上说明移植蓝牙到rk3399时遇到的问题及解决办法,同时也是对之前经验的回顾。rk3399开发板购买自广州眺望电子科技有限公司。依旧使用blueZ 5.18。

2 过程

注意:在编译rk3399时需要将编译链路径添加到环境变量PATH的最后,比如:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/lijun/rk3399-linux/buildroot/output/rockchip_rk3399/host/bin/

如果添加在PATH的最前面可能会导致编译时Makefile变量的路径有问题。

2.1 libiconv

在hi3518ev300移植时没有移植此包,但是在rk3399时需要依赖此包。否则在接收文件时出现obexd[665]: disconnected: Unicode conversion failed: Conversion from character set 'UTF-16BE' to 'UTF-8' is not supported

解决此问题花了不少时间,最终在一个论坛里面找到一个能解决问题的提示,大致意思是obexd使用glib,glib使用iconv,所以需要iconv相关的库文件,总共涉及到的库文件有glib、dbus、blueZ、iconv。

该讨论的链接:https://github.com/blueman-project/blueman/issues/275

有网友说需要在buildroot(rk3399使用buildroot制作文件系统) -> Toolchain中选中Copy gconv libraries并指定内容为”IBM850 ISO8859-15 UNICODE”,但是我没有选中Copy gconv libraries也能正常收发文件。

2.2 glib

glib依赖iconv,而且在配置时需要显示指定iconv,即在configure命令的最后添加--with-libiconv=gnu,变成:

CC=aarch64-buildroot-linux-gnu-gcc ./configure --host=aarch64-buildroot-linux-gnu LIBFFI_CFLAGS="-I/tmp/lib/libffi-3.0.13/include" LIBFFI_LIBS="-lffi -L/tmp/lib" ZLIB_CFLAGS="-I/tmp/include" ZLIB_LIBS="-lz -L/tmp/lib" --prefix=/tmp PKG_CONFIG_PATH=/tmp/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 CFLAGS="-I/tmp/include" CPPFLAGS="-I/tmp/include" LDFLAGS="-L/tmp/lib" PKG_CONFIG_PATH=/tmp/lib/pkgconfig --with-libiconv=gnu

2.3 dbus

在./test/Makefile中的GLIB_LIBS值追加 -liconv,消除问题:

/home/lijun/rk3399-linux/buildroot/output/rockchip_rk3399/host/lib/gcc/aarch64-buildroot-linux-gnu/6.5.0/../../../../aarch64-buildroot-linux-gnu/bin/ld: warning: libiconv.so.2, needed by /tmp/lib/libgio-2.0.so, not found (try using -rpath or -rpath-link)

/tmp/lib/libglib-2.0.so: undefined reference to `libiconv'

/tmp/lib/libglib-2.0.so: undefined reference to `libiconv_close'

/tmp/lib/libglib-2.0.so: undefined reference to `libiconv_open'

2.4 ncurses

除了执行export CPPFLAGS="-P",还要执行export CFLAGS=" -fPIC",在编译完成之后执行export CFLAGS=

遇到的问题:

checking build system type... Invalid configuration `aarch64-buildroot-linux-gnu': machine `aarch64-buildroot' not recognized

configure: error: /bin/bash conftools/config.sub aarch64-buildroot-linux-gnu failed

解决办法:wget -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD',wget -O config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD',用这两个文件替换掉文件夹下面的两个。

2.5 bluez

在./Makefile中将-lglib-2.0替换成-lglib-2.0 -liconv,消除/home/lijun/rk3399-linux/buildroot/output/rockchip_rk3399/host/lib/gcc/aarch64-buildroot-linux-gnu/6.5.0/../../../../aarch64-buildroot-linux-gnu/bin/ld: warning: libiconv.so.2, needed by /tmp/lib/libglib-2.0.so, not found (try using -rpath or -rpath-link)

/tmp/lib/libglib-2.0.so: undefined reference to `libiconv'

/tmp/lib/libglib-2.0.so: undefined reference to `libiconv_open'

/tmp/lib/libglib-2.0.so: undefined reference to `libiconv_close'

2.6 编译收尾

其他操作同hi3518ev300。编译rk3399时没有libintl.so.8.1.7,可不处理。将libiconv.so.2.6.1拷贝到板端并创建链接,

ln -s libiconv.so.2.6.1 libiconv.so.2

ln -s libiconv.so.2.6.1 libiconv.so

2.7 修改蓝牙设备名字

在编译blueZ时可以通过--sysconfdir=DIR参数指定下文中的main.conf存放的路径,如果没有指定则放在默认路径PREFIX/etc下。有可能把main.conf放到指定的路径之后设备的名字还是默认名字“BlueZ 5.18”,这应该是放置的路径不对引起的,通过strings命令查看bluetoothd中的main.conf字串,再把main.conf放到该字串中可以解决该问题。比如下面这张图,要把main.conf放到/tmp/etc/bluetooth,

 下面这张图,要把main.conf放到/etc/bluetooth,

 

也可以在bluetoothd等业务程序启动之后,使用./hciconfig hci0 name查看当前的设备名字,使用./hciconfig hci0 name "aaaabbbb",将名字改为"aaaabbbb",但在手机端看到的依旧是更改之前的名字,还需要在板端执行./hciconfig hci0 down、./hciconfig hci0 up,刷新手机显示列表可以看到名字已经更改过来。

2.8 执行rtk_hciattach

要根据串口名称执行命令,比如我的板端串口名称是ttyS0,则执行./rtk_hciattach -n -s 115200 ttyS0 rtk_h5 &

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ta是一个搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值