嵌入式平台openthread边界路由构建

OTBR移植

准备工作

1、准备好交叉编译工具,并配置路径到环境变量 这块内容不多赘述

大致步骤:

将编译工具链路径配置到/etc/profile 中

如按自己实际路径进行配置
export PATH="/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/bin:$PATH"
export C_INCLUDE_PATH="/home/arm_include:$C_INCLUDE_PATH"
export LD_LIBRARY_PATH="/opt/arm_lib":$LD_LIBRARY_PATH

配置完后 source 一下这个文件

完成验证:

在终端任意界面输入arm 按table能够得到如下提示

在这里插入图片描述

2、在/opt 下创建一个存放arm 库的文件夹arm_lib 用来存放前置arm库

mkdir arm_lib

移植一些必要库

1、mdns库移植如果使用avahi则可以跳过这步

mdns 库地址

https://codeload.github.com/apple-oss-distributions/mDNSResponder/tar.gz/refs/tags/mDNSResponder-1310.80.1

$ tar -zxvf mDNSResponder-1310.80.1-modifyMakefile.tar.gz
$ cd mDNSResponder-1310.80.1/mDNSPosix/
$ vi ../Clients/Makefile
增加:
CC = arm-buildroot-linux-gnueabi-gcc

$ vi Makefile
CC = arm-buildroot-linux-gnueabi-gcc
STRIP = arm-buildroot-linux-gnueabi-strip

$ make os=linux
编译完成后会生成build文件夹,将里面的libdns_sd.so copy到自己存放库的文件夹内

编译报错:

undefined reference to `va_start'

进入Clients 文件夹 修改dns-sd.c
增加头文件
#include <sys/param.h>
#include <stdarg.h>
保存退出 继续编译

OTBR 源码编译

源码下载

git clone ---recursive  https://github.com/openthread/ot-br-posix.git

增加交叉编译工具配置文件

在examples/platforms 文件夹中增加自己所用平台的文件夹,并在该文件夹中增加arm.cmake文件
如
examples/platforms/bcm6756/arm.cmake
文件内容为
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER    arm-buildroot-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER  arm-buildroot-linux-gnueabi-g++)
set(CMAKE_C_COMPILER_LAUNCHER)
set(CMAKE_CXX_COMPILER_LAUNCHER)
set(CMAKE_ASM_COMPILER  arm-buildroot-linux-gnueabi-gcc)
find_program(CMAKE_AR arm-buildroot-linux-gnueabi-gcc-ar DOC "Archiver" REQUIRED)
set(CMAKE_C_FLAGS   "-mthumb-interwork -mfloat-abi=soft -march=armv7-a+mp+sec -mcpu=cortex-a9 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -pipe -g -feliminate-unused-debug-types -Wno-psabi -lpthread" CACHE STRING "CFLAGS")
set(CMAKE_ASM_FLAGS  "-mthumb-interwork -mfloat-abi=soft -mcpu=cortex-a9 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security " CACHE STRING "ASM FLAGS")
set(CMAKE_C_LINK_FLAGS  "-mthumb -mfpu=neon -mfloat-abi=soft -mcpu=cortex-a9 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Wl,-z,relro,-z,now -L/opt/arm_lib -I/home/lyle/arm_include" CACHE STRING "LDFLAGS")

set(CMAKE_CXX_FLAGS  "-mthumb-interwork -mfloat-abi=soft -march=armv7-a+mp+sec -mcpu=cortex-a9 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -fvisibility-inlines-hidden -Wno-psabi -lpthread" CACHE STRING "CXXFLAGS")
set(CMAKE_CXX_LINK_FLAGS  "-mthumb -mfpu=neon -mfloat-abi=soft -mcpu=cortex-a9 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -fvisibility-inlines-hidden -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-z,relro,-z,now -L/opt/arm_lib " CACHE STRING "LDFLAGS")

FLAGS按所用平台内容进行修改

初始化编译环境

./script/bootstrap

修改配置项

vim etc/cmake/options.cmake
-option(OTBR_BORDER_ROUTING "Enable Border Routing Manager" OFF)
+option(OTBR_BORDER_ROUTING "Enable Border Routing Manager" ON)

-option(OTBR_SRP_ADVERTISING_PROXY "Enable Advertising Proxy" OFF)
+option(OTBR_SRP_ADVERTISING_PROXY "Enable Advertising Proxy" ON)

-option(OTBR_DNSSD_DISCOVERY_PROXY   "Enable DNS-SD Discovery Proxy support" OFF)
+option(OTBR_DNSSD_DISCOVERY_PROXY   "Enable DNS-SD Discovery Proxy support" ON)


-option(OTBR_NAT64 "Enable NAT64 support" OFF)
+option(OTBR_NAT64 "Enable NAT64 support" ON)

编译otbr

./script/cmake-build -DCMAKE_TOOLCHAIN_FILE=./examples/platforms/bcm6756/arm.cmake -DOT_DAEMON=ON -DBUILD_TESTING=OFF  -DOTBR_BORDER_ROUTING=ON -DOT_JOINER=ON -DOT_COMMISSIONER=ON -DOTBR_MDNS=mDNSResponder

重要参数解释
-DBUILD_TESTING=OFF 表示关闭test测试内容,此内容容易导致编译不通过
-DOTBR_MDNS=mDNSResponder otbr默认使用的多播方式为avahi,如果平台中已经存在AVAHI,则不要此选项,使用mdns的进行多播的使用此选项

报错解决

报这个问题
../../src/mdns/mdns_mdnssd.hpp:44:10: fatal error: dns_sd.h: No such file or directory
   44 | #include <dns_sd.h>
打开mdns_mdnssd.hpp 将<dns_sd.h> 修改为 "dns_sd.h" 并将dns_sd.h文件copy到mdns_mdnssd.hpp所在文件夹内
报问题
cannot find -ldns_sd
将保存上面所移植的dns_sd库添加到环境变量所写的LD_LIBRARY_PATH 路径中

然后
rm -rf build/* 后
重新执行编译
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值