1.1“中间件”概念html
中间件软件是一种计算机软件,为应用软件提供操做系统所不能提供的服务。linux
中间件处于操做系统软件与用户的应用软件的中间层,为上层的应用软件提供运行与开发的环境并帮助用户开发和集成应用软件,下层要兼容操做系统接口。它不只要实现互连,还要实现应用之间的互操做,网络通讯功能是其特色之一,所以在移植中间件过程当中会牵涉到不少网络方面的知识。安全
不一样平台设备为了实现通讯互联,而且达到统一标准的效果,就须要一样的中间件适配不一样的操做系统。网络
图 1‑1 中间件进行信息传递app
执行中间件的一个关键途径是信息传递。经过中间件,应用程序能够工做于多平台或 OS 环境,提升并行处理能力,提升安全性。函数
中间件也有不少不一样的分类,好比终端仿真中间件、数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件等,其之间存在相互依赖的关系。工具
一个第三方中间件可能须要其他中间件的支持,这就要求在移植前准确评估全部依赖的中间件,从而肯定工做量。测试
中间件移植前期评估流程如图 2‑1所示。spa
图2‑1 中间件评估流程操作系统
Linux环境下中间件配置、编译、安装流程:
1.通常咱们移植的第三方中间件都是使用autoconf来配置,autoconf 是用来生成自动配置软件源代码脚本(configure)的工具,configure脚本能独立于autoconf运行,且在运行的过程当中,不须要用户的干预,Linux环境下中间件配置过程如图 2‑2所示。
图2‑2 Linux环境中间件配置过程
2.来生成一个config.h文件、Makefile文件和其他文件,其中./configure须要的参数通常须要用--host=arm-linux来指定交叉编译换将(须要先安装一个arm-linux-gcc编译器),--prefix=/xxx来指定安装目录。config.h文件和Makefile文件做用如图 2‑3所示。
图2‑3 config.h文件和Makefile文件
3.执行make指令,这个过程主要是为了等它编译完成后,能够经过find -name *.o命令看它都编译了哪些源文件,固然咱们也能够经过看编译输出的log信息,看它连接时都连接了哪些.o目标文件。如图 2‑4所示,以SOEM源码移植过程为例,经过find-name *.o命令查看编译了哪些源文件。
图2‑4 SOME源码make以后执行“find –name *.o”命令
也可经过此方式来肯定Linux环境下中间件编译了哪些源文件。肯定了须要编译哪些源文件以后,咱们就能够把中间件源码导入到SylixOS工程。
创建 SylixOS动态库工程,导入源文件、头文件,配置Makefile,修改编译错误:
1.开发套件包含RealEvo-IDE集成开发换件,在该IDE下可创建动态库工程(SylixOSShared Lib),以“lib”加上“中间件名称”命名比较合适(如“libexample”)在工程根目录下放入第三方中间件(去掉版本号)。
2.修改libexample.mk(这是SylixOS工程下的Makefile),把它的源文件列表,头文件搜索路径,须要定义的符号,依赖程序清单2‑1展现了SylixOS工程的Makefile格式。
程序清单2‑1 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文本文件在工程的根目录,把修改的文件,修改的方法记录到该文件内。修改须要加入条件编译预处理的相关内容,格式以下。
#ifdef SylixOS
修改的内容
#endif
4.移植中间件的主要工做量体如今编译错误修改的过程,有些符号、函数定义或命名方式不一样,要修改其适配SylixOS,有些依赖的库文件SylixOS没有或者只有相似的,咱们要根据正确的语义,适当修改中间源程序或者裁剪源程序(功能缺失不严重的状况下)。中间件有不少和网络通讯相关的文件(有部分工做量要移植SylixOS暂时不支持的网络相关协议。
5.当移植成功时,应该考虑将第三方中间件的测试用例、example也编译,测试用例通常用unit-test,example通常用application目标,RealEvo-IDE容许多目标的新建。最后输出应用技术笔记,记录移植过程当中注意事项以及描述相关测试用例的使用方法。
libpcap
libdb
libnopoll
详细移植过程文档待补充(该文档移植方法和经验后续还会逐步总结完善)。
《SylixOS应用开发手册》
第21章 标准第三方软件介绍
第22章 平台迁移
《Linux下使用automake、autoconf生成configure文件》