1.開發環境linux
宿主機:windows 7git
集成開發環境:Real-Evo IDE 3.1.5編程
虛擬機:ubuntuubuntu
目標機:mini2440windows
本篇僅介紹nopoll庫的移植過程,包括資源的獲取,工程文件的修改以及編譯出錯處理。瀏覽器
2.Nopoll簡介服務器
noPoll 是一個 WebSocket 的開源實現,使用ANSI C 編寫,可用於構建純 WebSocket解決方案和爲已有的面向 TCP 的應用程序提供 WebSocket 支持。架構
WebSocket協議本質上是一個基於TCP的協議,它由通訊協議和編程API組成,WebSocket可以在瀏覽器和服務器之間創建雙向鏈接,以基於事件的方式,賦予瀏覽器實時通訊能力。既然是雙向通訊,就意味着服務器端和客戶端能夠同時發送並響應請求,而再也不像HTTP的請求和響應。測試
在WebSocket出現以前,不少網站爲了實現實時推送技術,一般採用的方案是輪詢(Polling)和Comet技術,Comet又可細分爲兩種實現方式,一種是長輪詢機制,一種稱爲流技術,這兩種方式其實是對輪詢技術的改進,這些方案帶來很明顯的缺點,須要由瀏覽器對服務器發出HTTP request,大量消耗服務器帶寬和資源。面對這種情況,HTML5定義了WebSocket協議,能更好的節省服務器資源和帶寬並實現真正意義上的實時推送。網站
爲了創建一個WebSocket鏈接,客戶端瀏覽器首先要向服務器發起一個HTTP請求,這個請求和一般的HTTP請求不一樣,包含了一些附加頭信息,其中附加頭信息」Upgrade:WebSocket」代表這是一個申請協議升級的HTTP請求,服務器端解析這些附加的頭信息而後產生應答信息返回給客戶端,客戶端和服務器端的WebSocket鏈接就創建起來了,雙方就能夠經過這個鏈接通道自由的傳遞信息,而且這個鏈接會持續存在直到客戶端或者服務器端的某一方主動的關閉鏈接。
3.資源獲取
3.1 Nopoll源碼獲取
通常的,能夠經過官方網站獲取有關要移植的第三方中間件的源碼。Nopoll的下載地址爲http://www.aspl.es/nopoll/downloads/。
本篇中使用的nopoll版本爲nopoll-0.4.3.b311,下載後解壓文件如圖 3-1所示。
圖 3-1 nopoll解壓後部分文件
其中src/目錄下主要包含要編譯的源文件。configure是配置文件,在linux平臺下運行該文件可生成makefile文件,執行make命令便可生成最終的庫文件。
因爲SylixOS是兼容POSIX標準的操做系統,所以,可經過在linux下編譯該庫文件獲取須要編譯的源文件。
3.2 依賴的三方件
3.2.1 導入openssl到mini2440工程中
nopoll依賴OpenSSL。SylixOS提供OpenSSL的支持,並在官方git上提供下載,下載地址爲http://git.sylixos.com/cgit/cgit.cgi/OpenSSL-SylixOS.git/
下載後解壓文件如圖 3-2所示。
圖 3-2 Git下載的OpenSSL
可知,SylixOS支持的OpenSSL三方件能夠支持以上架構。
本篇以mini2440虛擬機爲目標機,所以使用arm平臺的OpenSSL庫。即便用arm-sylixos-openssl.tar.gz壓縮文件。進行解壓後的文件如圖 3-3所示。
圖 3-3 arm平臺壓縮文件內容
include文件夾中是openssl庫的頭文件,lib文件夾中是openssl的庫文件,包括靜態庫和動態庫。Lib目錄中的內容如圖 3-4所示。
圖 3-4 lib目錄內容
將include文件夾下的openssl文件夾導入到mini2440base工程中的libsylixos/SylixOS/include/路徑下。以及將圖 3-4中的庫文件導入到mini2440base工程的libsylixos/Debug路徑下。
3.2.2 導入openssl庫文件到mini2440虛擬機中
經過FileZilla軟件將openssl庫文件導入到mini2440虛擬機中,操做如圖 3-5所示。
圖 3-5 導入openssl庫文件到mini2440虛擬機中
4.Linux平臺下編譯
4.1 編譯
編譯過程當中使用的linux環境爲ubuntu系統。將下載的壓縮包文件拷貝到ubuntu環境中並解壓。因爲下載的庫文件已經包含了configure配置文件,所以須要執行該命令生成makefile文件,操做如圖 4-1所示。
圖 4-1 執行配置文件
生成makefile文件如圖 4-2所示。
圖 4-2 生成makefile文件
執行make命令,進行編譯,編譯操做如圖4-3所示。
圖 4-3 執行make命令
執行make命令主要是要得知編譯過程當中編譯生成了哪些目標文件。
4.2 獲取目標文件
在編譯過程當中會生成許多目標文件,而經過這些目標文件就能夠知道在移植時須要編譯哪些源文件。查看生成的目標文件操做如圖4-4所示。
圖 4-4 生成的目標文件
其中test目錄下是測試代碼,src目錄下是三方件的源文件所生成的目標文件,而src/.libs目錄下的目標文件和src目錄下的文件同樣,所以,這裏只關心src目錄下的目標文件。而經過目標文件能夠知道在nopoll庫的編譯過程當中有哪些源文件參與了編譯。
5.新建libnopoll庫工程
5.1 導入nopoll源碼
在Real-Evo IDE中建立libnopoll共享庫工程,刪去libnopoll工程中src目錄下的文件libnopoll.c,並導入nopoll源碼文件。導入後的工程文件如圖 5-1所示。
圖 5-1 導入nopoll源碼文件到libnopoll庫工程
5.2 修改makefile
修改libnopoll工程屬性爲專家模式,操做如圖 5-2所示。
圖 5-2 修改工程屬性爲專家模式
修改libnopoll.mk文件,主要是加入進行編譯的源碼文件,修改內容如圖 5-3所示。
圖 5-3 修改libnopoll.mk文件
5.3 編譯libnopoll工程
保存修改並編譯,出現如圖 5-4所示錯誤。
圖 5-4 編譯報錯SO_BINDTODEVICE
因爲SylixOS不支持‘SO_BINDTODEVICE’套接字選項,所以使用條件編譯預處理宏處理掉。處理操做如圖 5-5所示。
圖 5-5 處理編譯錯誤
再次編譯,便可生成libnopoll庫文件,生成庫文件位於Debug目錄下。如圖 5-6所示。
圖 5-6 編譯生成libnopoll庫文件
打開mini2440虛擬機,並配置好libnopoll工程的設備IP爲mini2440的IP,便可將生成的庫文件導入到mini2400虛擬機中。至此,則完成了libnopoll的編譯及上傳。剩下的工做則是經過測試用例測試移植後的nopoll庫是否可以正常運行。