嵌入式平台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/* 后
重新执行编译
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: SELinux的移植到嵌入式平台需要从源代码开始,并修改其中的部分源代码以适应嵌入式平台的特性。具体的步骤可以参考下面的文章:https://www.linux.com/training-tutorials/porting-selinux-embedded-platforms/ ### 回答2: 移植SELinux嵌入式平台需要进行以下步骤: 1. 确定嵌入式平台的体系结构和操作系统版本,验证硬件是否支持SELinux的要求。SELinux主要依赖于Linux内核和特定的硬件功能,因此需确保硬件能够支持SELinux的安全扩展。 2. 下载源代码并构建嵌入式平台Linux内核,确保内核包含SELinux的相关配置选项。修改内核配置文件以启用SELinux功能,并进行重新编译和部署。 3. 移植用户空间工具和库文件。包括SELinux管理工具(如semanage、setenforce等)和库文件(如libselinux、libsepol等)。根据嵌入式平台的需求进行相应的配置和编译,以便在嵌入式系统上进行SELinux策略管理和强制访问控制。 4. 添加SELinux策略模块。设计并编写适合嵌入式平台的SELinux策略模块,以确保系统的安全性和访问控制能力。策略模块可通过定义规则、访问规则和标签间的关系来实现访问控制。 5. 进行测试和调试。在嵌入式平台上执行各种测试用例,以验证SELinux的正确性和稳定性。测试需要包括常见的攻击场景,以确保SELinux能够有效地防御安全威胁,并保护系统资源和用户数据的安全性。 6. 对SELinux进行优化。根据嵌入式平台的资源限制和性能需求,进行性能优化,如调整策略模块、精简SELinux规则等,以提高系统性能和响应速度。 7. 提供持续的维护和更新。随着嵌入式平台的使用和演进,需要不断跟踪和适应新的安全需求和漏洞修复。定期更新SELinux策略模块和软件库文件,确保系统处于最佳的安全状态。 通过以上步骤,可以将SELinux成功移植到嵌入式平台,并提供强大的安全保护和访问控制能力,保护嵌入式系统的安全性和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值