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文件》