ION-DTN是DTN协议栈的具体实现,广泛应用在深空通信等恶劣环境下,RTEMS作为星载操作系统之一,若能在RTEMS上实现DTN协议栈,能够为RTEMS的提供更为广泛的应用。

接下来详细描述如何将ION-DTN移植到RTEMS上。

ION-DTN的3.5.0版本中有关于RTEMS移植的一个模板,而不知为何,在最新的3.6.0中却删除了该模板。因此选用3.5.0进行移植。

ION源码中RTEMS的模板文件夹为arch-rtems,其中内容如下:

一、最为重要的是Makefile文件,接下来对Makefile进行分析:

IONFLAGS_T = -DRTEMS -DBP_EXTENDED -DGDSSYMTAB -DGDSLOGGER \
-DUSING_SDR_POINTERS -DNO_SDR_TRACE -DNO_PSM_TRACE \
-DNO_PROXY -DNO_DIRLIST
# Add -DBPSEC if building with bpsec.
# -DBPSEC
# Add -DAGENT_ROLE if building with nm.
# -DAGENT_ROLE
# -DENABLE_IMC
# -DENABLE_BPACSPGM=${ARCH}/ion.exeION_OPEN_SOURCE = 1

IONFLAGS_T表示一些开关的使能,比如-DRTEMS表示使能RTEMS接口。

PGM=${ARCH}/ion.exe

表示最后make生成的目标为ion.exe

ICISOURCES =     \platform.c    \platform_sm.c \memmgr.c      \llcv.c        \lyst.c        \psm.c         \smlist.c      \smrbt.c       \ion.c         \rfx.c         \zco.c         \sdrtable.c    \sdrhash.c     \sdrxn.c       \sdrmgt.c      \sdrstring.c   \sdrlist.c     \sdrcatlg.c    \rfxclock.c    \ionadmin.c    \sdrmend.c     \ionsec.c      \ionsecadmin.c \crypto.c      \csi.c         \bulk.c        \ionwarn.c     \ionrestart.c  \ionexit.c#  bloom.c       \
#  MurmurHash2.c \LTPSOURCES =     \libltp.c     \libltpP.c    \libltpnm.c   \ltpei.c      \ltpclock.c   \ltpmeter.c   \pmqlsi.c     \pmqlso.c     \ltpadmin.c   \udplsi.c     \udplso.c BPSOURCES =      \

这些就是make需要编译的源文件,如果要使能某个功能,就要在makefile中加上对应的函数进行编译。

include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
include $(RTEMS_CUSTOM)
LD_LIBS += $(RTEMS_MAKEFILE_PATH)/../lib/libm.a
include $(PROJECT_ROOT)/make/leaf.cfg

上面的是移植过程中最为重要的步骤,为ION的makefile提供RTEMS的一些API接口以及一些库和工具。

首先Makefile.inc是提供特定BSP的一些API接口,用于include进应用程序的makefile中。

而libm.a是RTEMS的二进制函数库。

leaf.cfg非常重要,定义了叶子节点,也就是RTEMS其他模块,比如应用程序模块中makefile的一些命令的具体实现。

# make/leaf.cfg
#
#   Make(1) configuration file include'd by all leaf-node Makefiles
##
# LIBSUFFIX_VA, will "index" into LIBSUFF-*-v macros and
#   convert our ${ARCH} back into .a or _g.a or _p.a based on debug.
#   Useful for installing libraries.
#LIBSUFFIX_OPTIMIZE_V=
LIBSUFFIX_DEBUG_V=_gLIB_VARIANT=$(LIBSUFFIX_$(VARIANT_V)_V)
LIBSUFFIX_VA = $(LIB_VARIANT).a# Pull in the desired "target" compiler
# Programs built on the host use automake generated rules.
# This will not change $(ARCH) -- binaries will still be place as per target
include ${CONFIG.CC}
ifeq (${DEPEND},$(wildcard ${DEPEND}))
include ${DEPEND}            # pull in dependencies if they exist
endififndef AUTOMAKE
#
# Builtin targets for compilation variants
#
debug:$(MAKE) -f $(MAKEFILE) MAKEFILE=$(MAKEFILE) VARIANT=DEBUG
endif#
# VARIANT_VA will convert our ${ARCH} back into "" or "debug".
#   Handy when one makefile wants to hop over into a peer's tree and
#   build something "the same" way.
#VARIANT-OPTIMIZE-v =
VARIANT-DEBUG-v = debugVARIANT_VA = $(VARIANT-$(VARIANT_V)-v)#
# TARGET_VA will convert $@ (expected to be 'debug' etc.)
#   into "" or "install" as appropriate.
#   Used for variant recursion.
#TARGET_debug_V = allTARGET_VA = $(TARGET_$@_V)#
# Builtin clean and distclean rules
# Individual makefiles can add stuff via CLEAN_ADDITIONS and CLOBBER_ADDITIONS
# If desperate to save something, they can override CLEAN_OS, CLEAN_CC, etc.
#clean-am: clean-generic-$(RM) -r $(CLEAN_OS) $(CLEAN_CC) $(CLEAN_DEPEND)-$(RM) -r $(VARIANTS)distclean-am: distclean-generic clean-am-$(RM) -r $(CLOBBER_OS) $(CLOBBER_CC) $(CLOBBER_DEPEND)ifndef AUTOMAKE
preinstall-am:
preinstall: preinstall-amdistclean: distclean-am-$(RM) ./config.statusclean: clean-am.PHONY: distclean distclean-am
.PHONY: clean clean-am
endifEXEEXT?=.exe
DOWNEXT?=.ralfdefine bsp-link-c$(LINK.c) $(CPU_CFLAGS) $(AM_CFLAGS) $(AM_LDFLAGS) \-o $(basename $@)$(EXEEXT) $(LINK_OBJS) $(LINK_LIBS)
endefdefine bsp-link-cxx$(LINK.cc) $(CPU_CFLAGS) $(AM_CFLAGS) $(AM_LDFLAGS) \-o $(basename $@)$(EXEEXT) $(LINK_OBJS) $(LINK_LIBS)
endefdefine default-bsp-post-link$(NM) -g -n $@ > $(basename $@).num$(SIZE) $@
endefifndef bsp-post-link
define bsp-post-link$(default-bsp-post-link)cp $(basename $@)$(EXEEXT) $(basename $@)$(DOWNEXT)
endef
endifdefine make-exe$(bsp-link-c)$(bsp-post-link)
endefdefine make-cxx-exe$(bsp-link-cxx)$(bsp-post-link)
endef

加上这些库后,还要加上rtems-libbsd编译后生成的libbsd二进制库,里面包含了libbsd的一些库函数,比如socket等网络协议栈标准接口函数等。非常非常重要。

LINK_LIBS += /home/c/development/rtems/rtems-4.12/arm-rtems4.12/beagleboneblack/lib/libbsd.a

以上对makefile的修改使得ION-DTN可以RTEMS为目标进行编译。

二、srclinks文件

在Makefile中添加的source文件,都要在srclinks文件中添加,保证source文件能够以链接的形式复制到arch-rtems文件夹下。

三、mysymtab.c文件

该文件是为RTEMS移植过程中,函数的模板的私有符号表,也就是如果要在应用程序中调用ION的功能函数的话,需要在此文件中声明。

/*mysymtab.c:    template private symbol table for RTEMS portof the ION stack, with definition ofsm_FindFunction(), which accesses this table.Author: Scott Burleigh, JPLCopyright (c) 2010, California Institute of Technology.ALL RIGHTS RESERVED.  U.S. Government Sponsorshipacknowledged.*/extern int   ionadmin(int, int, int, int, int, int, int, int, int, int);
extern int  ionexit(int, int, int, int, int, int, int, int, int, int);
extern int  rfxclock(int, int, int, int, int, int, int, int, int, int);
extern int  ionsecadmin(int, int, int, int, int, int, int, int, int, int);
extern int  ionwarn(int, int, int, int, int, int, int, int, int, int);
extern int  ionrestart(int, int, int, int, int, int, int, int, int, int);
extern int  ltpadmin(int, int, int, int, int, int, int, int, int, int);
extern int  ltpclock(int, int, int, int, int, int, int, int, int, int);
extern int  ltpmeter(int, int, int, int, int, int, int, int, int, int);
extern int  pmqlsi(int, int, int, int, int, int, int, int, int, int);
extern int  pmqlso(int, int, int, int, int, int, int, int, int, int);
extern int  bpadmin(int, int, int, int, int, int, int, int, int, int);
extern int  bpclock(int, int, int, int, int, int, int, int, int, int);
extern int  bptransit(int, int, int, int, int, int, int, int, int, int);
extern int  ltpcli(int, int, int, int, int, int, int, int, int, int);
extern int  ltpclo(int, int, int, int, int, int, int, int, int, int);
extern int  bibeclo(int, int, int, int, int, int, int, int, int, int);
extern int  ipnadmin(int, int, int, int, int, int, int, int, int, int);
extern int  ipnfw(int, int, int, int, int, int, int, int, int, int);
extern int  ipnadminep(int, int, int, int, int, int, int, int, int, int);
extern int  lgagent(int, int, int, int, int, int, int, int, int, int);
extern int  bpsource(int, int, int, int, int, int, int, int, int, int);
extern int  bpsink(int, int, int, int, int, int, int, int, int, int);
extern int  bpdriver(int, int, int, int, int, int, int, int, int, int);
extern int  bpcounter(int, int, int, int, int, int, int, int, int, int);
extern int  ltpcounter(int, int, int, int, int, int, int, int, int, int);
extern int  ltpdriver(int, int, int, int, int, int, int, int, int, int);
extern int  udplsi(int, int, int, int, int, int, int, int, int, int);
extern int  udplso(int, int, int, int, int, int, int, int, int, int);
#ifndef NASA_PROTECTED_FLIGHT_CODE
extern int  cfdpadmin(int, int, int, int, int, int, int, int, int, int);
extern int  cfdpclock(int, int, int, int, int, int, int, int, int, int);
extern int  bputa(int, int, int, int, int, int, int, int, int, int);
#endif
#if 0

四、修改ionrtems.c文件

该文件是ion.exe应用程序功能实现的具体源文件,里面包含main函数以及其他功能函数。是ion.exe执行的文件。根据需要的功能要求修改即可。

转载于:https://www.cnblogs.com/sichenzhao/p/9320208.html

ION-DTN在RTEMS上的移植相关推荐

  1. 在arm linux mini2440上移植ntp服务,RTEMS 4.9.5 在 QEMU MINI2440 上的移植发布啦……

    (本文原创,转载请注明出处,谢谢) 这两天抽了个空,在rickleaf移植的 qemu mini2440 的rtems 4.9.5 bsp 上做了一些修改: 1.原来mini2440的 bsp是基于 ...

  2. OpenCV在ARM上的移植

    OpenCV在ARM上的移植 与X86 Linux类似,请参考: Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且 ...

  3. u-boot-2009.08在2440上的移植详解(三)

    一.移植环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-b ...

  4. 文件系统应用笔记之一:FatFS在STM32F4上的移植

      在实现如U盘文件读写,SD卡的文件读写等工作时,我们往往需要一个文件系统来支持我们的工作.特别在一些MCU应用中,文件系统的加入能明显改善系统交互的友好性.在这一篇中,我们就来讨论FatFS文件系 ...

  5. uCOS-II在51单片机上的移植

    uCOS-II在51单片机上的移植 约定:文中所写的硬件堆栈或系统堆栈是指51单片机SP指针所指向的堆栈空间,而用户堆栈或任务堆栈是指用来保存任务状态为每个任务分配的堆栈空间. 前一段时间一直在学习U ...

  6. QT4.7.3在dm6446平台上的移植[转]--make[1]: *** [assistant_cs.qm] Error 2

    师兄让我作达芬奇系统下的一个界面程序,听说QT不错,所以几天前就试着把QT移植到dm6446上来.去TI的论坛看了一个在omap3上的移植教程,看起来也不难,于是开始了我的移植过程. 1 首先去htt ...

  7. opus在arm的嵌入式平台上的移植和开发

    最近产品中要用到opus,圣上一声令下,把opus移植到我们平台上,什么?opus?opus是什么?在一脸 茫然中,我这特种兵码农就赤手空拳上战场了. 废话少说,赶紧在网站:https://opus- ...

  8. 基于Domoticz智能家居系统(十三)Domoticz-3.8153在Tiny6410开发板上的移植

    Domoticz-3.8153在Tiny6410开发板上的移植 本文将在友善之臂Tiny6410开发板上移植Domoticz-3.8153,起因是去年在mini2440上移植的3.5877版本编译出来 ...

  9. 移植c语言算法到arm上,μCOS-II移植到ARM处理器上的几个要点

    原标题:μCOS-II移植到ARM处理器上的几个要点 本文主要介绍μCOS-II移植到ARM处理器上的几个要点,如下所示: uCOS II在ARM处理器上移植过程中的中断处理 uCOS II是一个源码 ...

最新文章

  1. Balder 3D Engine for Silverlight
  2. 从全球最大光伏展看中国光伏行业:火爆的背后是什么?
  3. 解决DataList控件无缝滚动图片(转)
  4. 并发数据结构-1.1.2 阻塞技术
  5. Git本地分支和远程分支关联
  6. 关于使用layer弹出框展现echarts不显示的问题
  7. win10下PLSQL Developer 连接ubuntu上安装的oracle 11g
  8. 循环c语言格式,关于for循环的格式
  9. JS来推断文本框内容改变事件
  10. Docker Compose 笔记
  11. 【国产MCU移植】看看有没有你需要的,一起来查漏补缺吧!(附已报名的硬件)...
  12. word批量调整图片大小--宏
  13. HANA中临时表查询DUMMY
  14. 洛谷 P3939 数颜色(主席树)
  15. 笔试java--链表
  16. 获取网络图片或本地图片的长宽的方法
  17. 发育中的小鼠大脑细胞与结构图谱
  18. C#海康威视人脸设备-创建人脸信息,并同步到数据库
  19. Fidder教程-数据介绍
  20. Linux资源监控命令/工具(综合)

热门文章

  1. 《CCNP ROUTE 300-101学习指南》——导读
  2. 如何迅速有效学习web前端开发?在学习中你更应该注重哪些东西
  3. NetworkInfo已过时
  4. 半糖iOS版首页实现与基本原理揭秘
  5. html收集用户信息的标签,Python实现抖音网页端用户页面信息爬取
  6. 数据资产管理Yotta企业云盘
  7. Word中A3纸的表格转化成A4纸的表格打印
  8. 【soc】bootrom注意事项
  9. SUNLIKE ERP 自定义查询 已分析未转单的数据
  10. OpenJWeb网上商城开发文档及源代码