【AllJoyn框架-08】AllJoyn在OpenWrt上的实践

简介: 依项目需求,需要将alljoyn移植到openwrt开发板上,其实谈不上复杂,只是这东西有点新,参考教程不多,需要足够地摸索。可参考的官方教程写得太不详细,也只能跟着它试试看了。基本步骤如下: 1、下载openwrt源码编译 貌似版本很多,也不是所有版本都适合我的板子,所以这点得弄清楚。我下得是barrier_break,支持mt7620a开发板。按照上面的教程,把该准备的给准备着,具

依项目需求,需要将alljoyn移植到openwrt开发板上,其实谈不上复杂,只是这东西有点新,参考教程不多,需要足够地摸索。可参考的官方教程写得太不详细,也只能跟着它试试看了。基本步骤如下:

1、下载openwrt源码编译

貌似版本很多,也不是所有版本都适合我的板子,所以这点得弄清楚。我下得是barrier_break,支持mt7620a开发板。按照上面的教程,把该准备的给准备着,具体总结如下:

1.1 目前有三种,v12.09,attitude adjustment,barrier_breaker,貌似中间第二种不支持mt7620

1.2 将下面某一行添加进对应版本的feeds.conf

src-git alljoyn https://git.allseenalliance.org/gerrit/core/openwrt_feed;openwrt_12.09

src-git alljoyn https://git.allseenalliance.org/gerrit/core/openwrt_feed;barrier_breaker

1.3 更新和安装

./scripts/feeds update -a
./scripts/feeds install -a -p alljoyn

1.4 make menuconfig时按照下图选择



当然如果选择模块,则生成ipk文件,如果集成到内核中,则直接刷固件就有了

我们可以在build_dir/target-mipsel-24kec**/下找到alljoyn的相关目录,里面的build目录下有生成好的库和二进制文件


2、编写alljoyn程序

编译方法和helloworld类似了,我前篇博文有讲述,这里就不说了,我主要列出src文件夹的Makefile

CXXFLAGS = -Wall -pipe -std=c++11 -fno-rtti -fno-exceptions -Wno-long-long -Wno-deprecated -DQCC_OS_GROUP_POSIX

LIBS = -lstdc++ -lalljoyn -lcrypto -lpthread -lrt

aj_test: common.o  main.o  mybuslistener.o  mybusobject.o  servicebusattachment.o
	$(CXX) -o $@ $^ -L../alljoyn-lib $(LIBS)

common.o: common.cc
	$(CXX) -c $(CXXFLAGS) -I../alljoyn-inc -o $@ common.cc

main.o: main.cc
	$(CXX) -c $(CXXFLAGS) -I../alljoyn-inc -o $@ $<

mybuslistener.o: mybuslistener.cc
	$(CXX) -c $(CXXFLAGS) -I../alljoyn-inc -o $@ $<

mybusobject.o: mybusobject.cc
	$(CXX) -c $(CXXFLAGS) -I../alljoyn-inc -o $@ $<

servicebusattachment.o: servicebusattachment.cc
	$(CXX) -c $(CXXFLAGS) -I../alljoyn-inc -o $@ $<

clean:
	rm -rf *.o


3、交叉编译

在SDK顶层下编译程序,成功后在build_dir/target**/ajtest/下有执行程序,scp到板子上运行。这里截取一下交叉编译器的编译和链接过程,注意观察用到了哪些目录下的头文件目录和库目录

【编译】

mipsel-openwrt-linux-uclibc-g++ -Os -pipe -mno-branch-likely -mips32r2 -mtune=24kec -mdsp -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -msoft-float  -I/home/cshi/download/openwrt/barrier_breaker/bin/ramips/OpenWrt-SDK-ramips-for-linux-i686-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include -I/home/cshi/download/openwrt/barrier_breaker/bin/ramips/OpenWrt-SDK-ramips-for-linux-i686-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/include-I/home/cshi/download/openwrt/barrier_breaker/bin/ramips/OpenWrt-SDK-ramips-for-linux-i686-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/usr/include -I/home/cshi/download/openwrt/barrier_breaker/bin/ramips/OpenWrt-SDK-ramips-for-linux-i686-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/include  -c hello.cpp


【链接】

mipsel-openwrt-linux-uclibc-g++ -L/home/cshi/download/openwrt/barrier_breaker/bin/ramips/OpenWrt-SDK-ramips-for-linux-i686-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/lib -L/home/cshi/download/openwrt/barrier_breaker/bin/ramips/OpenWrt-SDK-ramips-for-linux-i686-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/lib -L/home/cshi/download/openwrt/barrier_breaker/bin/ramips/OpenWrt-SDK-ramips-for-linux-i686-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/usr/lib -L/home/cshi/download/openwrt/barrier_breaker/bin/ramips/OpenWrt-SDK-ramips-for-linux-i686-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/lib  hello.o -o hello


4、保证板中已经有了liballjoyn,pthread,librt,ssl等库,且正确设置了动态库路径,执行即可

用ldd检查可发现加载了哪些动态库



【插曲一】

从官方路径中下载的libstdcpp貌似不管用,害得整半天,在执行alljoyn程序时,出现如下错误:



经查询发现它在c++文件hashtable_c++0x.o中



再对比barrier_breaker上的cpp库(libstdc++.so.6.0.19)和板子上的cpp库(libstdc++.so.6.0.16),发现后者小很多且nm不到任何符号,不如直接替换,让软链接libstdc++.so.6指向19版本,看看能不能找到这个符号,果然可以了。


【插曲二】

符号找到了,却识别不了我PC上的客户端了。大胆猜测一下,是不是板子上的防火墙阻挡了?一试,果然是!



正如上图所示,由于我将板子连入了另外一个接入外网的路由器,产生了wan区域,将其入口设置为接受即可,这样,板子上的alljoyn服务端就可识别PC上的客户端了(当然要在同一个局域网内啦)


参考链接

pandorbox下载库网址:http://downloads.openwrt.org.cn/PandoraBox/ralink/mt7620/packages/

openwrt集成alljoyn编译教程:https://allseenalliance.org/developers/develop/building/linux/openwrt

目录
相关文章
|
8月前
|
安全 物联网 开发者
HarmonyOS学习路之开发篇—网络与连接(NFC开发 一)
NFC(Near Field Communication,近距离无线通信技术) 是一种非接触式识别和互联技术,让移动设备、消费类电子产品、PC和智能设备之间可以进行近距离无线通信
|
8月前
|
安全 物联网
HarmonyOS学习路之开发篇—网络与连接(NFC开发 二)
设备可以模拟卡片,替代卡片完成对应操作,如模拟门禁卡、公交卡等。应用或者其他模块可以通过接口完成以下功能
|
8月前
|
物联网 数据管理
HarmonyOS学习路之开发篇—网络与连接(蓝牙开发 一)
蓝牙是短距离无线通信的一种方式,支持蓝牙的两个设备必须配对后才能通信。HarmonyOS蓝牙主要分为传统蓝牙和低功耗蓝牙(通常称为BLE,Bluetooth Low Energy)。传统蓝牙指的是蓝牙版本3.0以下的蓝牙,低功耗蓝牙指的是蓝牙版本4.0以上的蓝牙。
|
8月前
|
物联网 数据管理 API
HarmonyOS学习路之开发篇—网络与连接(蓝牙开发 二)
通过BLE扫描和广播提供的开放能力,可以根据指定状态获取外围设备、启动或停止BLE扫描、广播。
|
安全 物联网 Unix
[HarmonyOS][鸿蒙专栏开篇]快速入门OpenHarmony的LiteOS微内核
[HarmonyOS][鸿蒙专栏开篇]快速入门OpenHarmony的LiteOS微内核
345 0
[HarmonyOS][鸿蒙专栏开篇]快速入门OpenHarmony的LiteOS微内核
|
传感器 API 调度
openHarmony系统简介
今天带大家了解一下openHarmony系统,很多人可能听说过Harmony OS,今天要介绍的openHarmony系统就是Harmony OS的抽象,即基础版的,鸿蒙系统最终要实现的就是脱离安卓系统成为一个独立的系统,目前的环境使得鸿蒙系统仍然需要兼容安卓,故openHarmony诞生了,为了更好的进行过渡,同时也为更好的宣传鸿蒙系统。
616 0
openHarmony系统简介
|
存储 Ubuntu Unix
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍
783 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍
|
Ubuntu Linux 开发工具
ZYNQ - 嵌入式Linux开发 -08- linux应用程序开发(二)
ZYNQ - 嵌入式Linux开发 -08- linux应用程序开发
157 0
ZYNQ - 嵌入式Linux开发 -08- linux应用程序开发(二)
|
Ubuntu Linux 开发工具
ZYNQ - 嵌入式Linux开发 -08- linux应用程序开发(一)
ZYNQ - 嵌入式Linux开发 -08- linux应用程序开发
477 0
ZYNQ - 嵌入式Linux开发 -08- linux应用程序开发(一)