基于oSIP开源库PartySIP服务器之uClibc库的移植和配置[二]

来源:互联网 发布:淘宝网家私上下架木床 编辑:程序博客网 时间:2024/06/17 04:23

***************************************************************************************************************************
作者:EasyWave                                                时间:2014.09.20

类别:Linux应用-SIP代理服务器PartySIP         声明:转载,请保留链接

注意:如有错误,欢迎指正。这些是我学习的日志文章......

***************************************************************************************************************************

一:uClibc简介

       uClibc 是一个面向嵌入式Linux系统的小型的C标准库。最初uClibc是为了支持uClinux而开发,这是一个不需要内存管理单元的Linux版本,因此适合于微控制器系统。uClibc比一般用于Linux发行版的C库GNU C Library (glibc)要小得多,glibc目标是要支持最大范围的硬件和内核平台的所有C标准,而uClibc专注于嵌入式Linux.很多功能可以根据空间需求进行取舍。uClibc运行于标准的以及无MMU的Linux系统上,支持i386,x86 64,ARM (big/little endian), AVR32,Blackfin,h8300,m68k,MIPS (big/little endian), PowerPC,SuperH (big/little endian), SPARC,和v850等处理器。


二:uClibc下载与版本选择

       这是因为PartySIP需要至少是uClib-0.9.30.x版本以上才能支持,低于这个版本的就不支持啦。这是由于PartySIP中需要用到getifaddrs库函数,而低版本的uClibc是不支持的,这篇博文主要是针对有些人手头可能还有更低版本的uClibc来讲解的。要移植uClibc,需要先到http://www.uclibc.org网站上去下载最新版本的uClibc库,如下图所示:


       可以直接下载最新版本的来用,不过我还是建议下载不是最新的版本来作为嵌入式系统开发比较好些,这是因为最新版本的也许还会有些BUG,目前并没有测试出来,而较低版本就不会或者说这种有BUG的会少些,不是吗?点击Downdload超级链接进入下载页面,如下:


我这里选择uClibc-0.9.32.1.tar.bz2作为PartySIP系统的基本C库。而我们可以先来看看PartySIP开源代码中的ppl目录中有下面的函数中会用到getifaddrs,如下所示:


选中部分的代码,就是调用uClibc的C库中的getifaddrs函数,其路径如下所示:

        


三:uClibc-0.9.32.1的配置与编译

      想要编译uClibc-0.9.32.1必须先要配置uClibc的编译环境,以及一些必须配置的配置项,可以通过命令make menuconfig命令进入配置界面配置,如下图所示:


回车之后,会看到下面的界面,选择你的目标平台,这里选择ARM平台,如下所示:


     进入Target Architecture Features and Options中做进一步的配置,我的具体配置如下所示:


      这里需要注意的是:我选择的目标平台是ARM926T,这里需要根据你的具体的平台来配置,同时还需要注意你的目标平台是否是支持FPU的,如果不支持请将[] Target CPU has a floating point unit(FPU)取消掉,否则后期有用到FPU运算的会出现ILL的错误,也就是非法的指令系统错误。还需要设置[*] Enable full C99 math library support,这个很重要的哦,需要选中它。接着进入General Library Settings去进行配置,如下所示:


回车进入之后,可以看到如下的配置,我们需要选中pthread的支持,这个是必须的,我这里选择的配置如下所示:


       Thread support (older (stable) version of linuxthreads)我这里选择的比较保守,就是比较老的稳定的thread版本。接着进入Networking support选项中去配置网络支持函数,这里非常重要的,必须选中下面的配置:


        只有选中了这两个配置才可以支持getifaddrs库函数的哦。这个部分我的配置如下所示:


       打开IPV6是因为PartySIP需要用到IPV6。接着需要在String and Stdio Support中打开下面的配置,如下选中的所示:


      紧接着需要在Big and Tall中打开下面的配置,如下图选中部分:


     最后配置下交叉编译工具链,在uClibc Development and Debugging support配置,如下所示:


      当然还有一个配置选项需要配置,但是这个是需要针对不同的交叉编译工具进行不同的配置,这里就不详细的讲解啦。如下所示:


      这里我就选择默认的配置就好了!!最后是编译和安装,编译的命令是:make,安装的命令是:make install,也可以直接采用:make;make install来编译和安装,如下所示:


     如果你的交叉编译工具实在是太老太低啦,还需要修改一下uClibc的代码,需要加上一个宏定义,如下所示:

#define      __user 

具体的路径如下所示:


就是选中的features.h文件,具体的修改如下所示:


       这里主要是详细的讲解了如何配置和编译uClibc,同时还详细的讲解了如何修改针对老版本的交叉编译工具的一些方法。

0 0