首页 > 代码库 > 移植libnopoll到SylixOS技术笔记

移植libnopoll到SylixOS技术笔记

1.开发环境

    宿主机:windows 7

    集成开发环境:Real-Evo IDE 3.1.5

    虚拟机:ubuntu

    目标机:mini2440

本篇仅介绍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库是否能够正常运行。

本文出自 “12547908” 博客,请务必保留此出处http://12557908.blog.51cto.com/12547908/1905241

移植libnopoll到SylixOS技术笔记