SylixOS中间件移植方法总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SylixOS中间件移植方法总结相关的知识,希望对你有一定的参考价值。

1 概述

1.1“中间件”概念

       中间件软件是一种计算机软件,为应用软件提供操作系统所不能提供的服务。

       中间件处于操作系统软件与用户的应用软件的中间层,为上层的应用软件提供运行与开发的环境并帮助用户开发和集成应用软件,下层要兼容操作系统接口。它不仅要实现互连,还要实现应用之间的互操作,网络通信功能是其特点之一,因此在移植中间件过程中会牵涉到很多网络方面的知识。

       不同平台设备为了实现通信互联,并且达到统一标准的效果,就需要同样的中间件适配不同的操作系统。

技术分享

图 11  中间件进行信息传递

       执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或 OS 环境,提高并行处理能力,提高安全性。

1.2 中间件依赖关系

       中间件也有很多不同的分类,比如终端仿真中间件、数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件等,其之间存在相互依赖的关系。

2 技术实现

2.1 移植前评估工作

       一个第三方中间件可能需要其余中间件的支持,这就要求在移植前准确评估所有依赖的中间件,从而确定工作量。

       中间件移植前期评估流程如图 21所示。

技术分享

图21  中间件评估流程

2.2移植过程总结

       Linux环境下中间件配置、编译、安装流程:

       1.一般我们移植的第三方中间件都是使用autoconf来配置,autoconf 是用来生成自动配置软件源代码脚本(configure)的工具,configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预,Linux环境下中间件配置过程如图 22所示。

技术分享

图22  Linux环境中间件配置过程


       2.来生成一个config.h文件、Makefile文件和其余文件,其中./configure需要的参数一般需要用--host=arm-linux来指定交叉编译换将(需要先安装一个arm-linux-gcc编译器),--prefix=/xxx来指定安装目录。config.h文件和Makefile文件作用如图 23所示。

技术分享

图23 config.h文件和Makefile文件


        3.执行make指令,这个过程主要是为了等它编译完成后,可以通过find -name *.o命令看它都编译了哪些源文件,当然我们也可以通过看编译输出的log信息,看它链接时都链接了哪些.o目标文件。如图 24所示,以SOEM源码移植过程为例,通过find-name *.o命令查看编译了哪些源文件。

技术分享

图24  SOME源码make之后执行“find –name *.o”命令


       也可通过此方式来确定Linux环境下中间件编译了哪些源文件。确定了需要编译哪些源文件之后,我们就可以把中间件源码导入到SylixOS工程。

       建立 SylixOS动态库工程,导入源文件、头文件,配置Makefile,修改编译错误:

       1.开发套件包含RealEvo-IDE集成开发换件,在该IDE下可建立动态库工程(SylixOSShared Lib),以“lib”加上“中间件名称”命名比较合适(如“libexample”)在工程根目录下放入第三方中间件(去掉版本号)。

       2.修改libexample.mk(这是SylixOS工程下的Makefile),把它的源文件列表,头文件搜索路径,需要定义的符号,依赖程序清单21展示了SylixOS工程的Makefile格式。

程序清单21  SylixOS工程的Makefile介绍

#*********************************************************************************************************
# Clear setting
#*********************************************************************************************************
include $(CLEAR_VARS_MK)

#*********************************************************************************************************
# Target
#*********************************************************************************************************
LOCAL_TARGET_NAME := libexample.so    .o目标文件最终链接成的.so动态库文件                             

#*********************************************************************************************************
# Source list
#*********************************************************************************************************
LOCAL_SRCS :=  \        要编译的源文件,这些源文件编译成.o目标文件
SOEM/osal/linux/osal.c 
#*********************************************************************************************************
# Header file search path (eg. LOCAL_INC_PATH := -I"Your hearder files search path")
#*********************************************************************************************************
LOCAL_INC_PATH :=  \      头文件依赖的路径
-I"$(WORKSPACE_libSOEM)/SOEM\osal" 
#*********************************************************************************************************
# Pre-defined macro (eg. -DYOUR_MARCO=1)
#*********************************************************************************************************
LOCAL_DSYMBOL := -DYOUR_MARCO = 1     预定义的宏
LOCAL_DSYMBOL += -DCONFIG

#*********************************************************************************************************
# Compiler flags
#*********************************************************************************************************
LOCAL_CFLAGS :=        预设值的编译选项
LOCAL_CXXFLAGS := 

#*********************************************************************************************************
# Depend library (eg. LOCAL_DEPEND_LIB := -la LOCAL_DEPEND_LIB_PATH := -L"Your library search path")
#*********************************************************************************************************
LOCAL_DEPEND_LIB      :=         要依赖的动态库文件
LOCAL_DEPEND_LIB_PATH := 

#*********************************************************************************************************
# C++ config
#*********************************************************************************************************
LOCAL_USE_CXX        := no
LOCAL_USE_CXX_EXCEPT := no

#*********************************************************************************************************
# Code coverage config
#*********************************************************************************************************
LOCAL_USE_GCOV := no       代码覆盖率配置选项

#*********************************************************************************************************
# User link command
#*********************************************************************************************************
LOCAL_PRE_LINK_CMD   := 
LOCAL_POST_LINK_CMD  := 
LOCAL_PRE_STRIP_CMD  := 
LOCAL_POST_STRIP_CMD := 

include $(LIBRARY_MK)

#*********************************************************************************************************
# End
#*********************************************************************************************************



       3.编译可能会出现错误,错误的类型有很多,如果需要修改第三方中间件,请写一个README.SylixOS文本文件在工程的根目录,把修改的文件,修改的方法记录到该文件内。修改需

本文出自 “Jackstraw瑞” 博客,请务必保留此出处http://gedongrui.blog.51cto.com/12548092/1898298

以上是关于SylixOS中间件移植方法总结的主要内容,如果未能解决你的问题,请参考以下文章

SylixOS音频驱动移植

STM32 USB转串口驱动移植到SylixOS中遇到的问题总结

SylixOS基于Nuc970平台的SD驱动移植

SylixOS移植时mk_time函数问题

通过curl下载文件

SylixOS下移植glib时clock_gettime函数分析