自组网学习笔记之OONF开源工程的编译

                 前言

  前面的介绍中,已经介绍了什么是自组网、它的特点及应用。现在应该着手开始对整个工程的编译等其他工作。在开始进行开源工程的使用之前,需要对该开源工程有个简单的印象。知道它是什么,要做什么,以及最后的怎么做的问题。这里也按照这样的思路,来指导自己的工作和学习。这个文档,主要就是记录自己在学习该开源项目的整个过程,也能够给后面接触该项目的人一些参考。

1. OONF开源工程介绍:

           http://www.olsr.org/mediawiki/index.php/OLSR.org_Network_Framework
  上面的链接,是详细介绍该工程的,这里的介绍,只是为了能对OONF有个简单的认识。详细的内容比较多,在这里无法一一描述。 首先介绍一下什么是OONF?OONF是OLSR.org_Network_Framework的简写,而OLSR.org网络框架是一组库,可用作网络守护进程的构建块。基于olsrd的经验, 基础架构与路由协议实现本身分离,使代码更易于重用于其他人。OONF以BSD风格许可证发布,使其易于使用并集成到其他软件项目中。

2. OONF开源工程的编译:

   在编译以前,需要提前做好一些准备工作,其中包括当前构建的系统,要包括一些基本的工具,其中包括gcc、GNU MAKE工具、Cmake工具,且版本应该在2.8.12及以上,存在git仓库、pkg-config工具、安装libnl-genl库,这些是实现从github上克隆下来工程能够实现编译的最基本的条件,在这个过程中,我遇到了以下几个问题:
(1)  不存在git,一开始我所拿到的工程,并非直接从github上克隆下来的,而是由他人拷贝给我的,所提供的工程中并未包含git仓库,这是导致编译不能通过的原因之一,相信对git参考的依赖,应该是能够通过修改工程中的相关文件来进行修改的,不过为了开发进度,这里暂时没有作修改。
(2)  不存在libnl-*库,这个需要手动添加,这台服务器上已经安装了该库,如果平台上还没有装该库,需要root权限来进行安装,调用指令为,sudo apt-get install build-essential libnl-3-dev,需要注意的是,安装需要设备能够连接到互联网,也正如前面所提到的,安装同时需要root权限,但作为刚工作没多久的新人,往往是不会有root权限的,即使工作了多年,受限于工作管理的需要,也有可能没有办法获得root权限。因此你可以整理一下实现方案,然后汇报给具有该权限的人。像部门内出于保密需求,往往也不具备访问互联网的能力。因此尽量还是整理好解决方案,让那些具备该权限的人来为你安装,或者要求root用户来替你完成这个步骤
(3)  git clone 开源工程
(4)  cd OONF/build cmake … make,此时在OONF/build,就能够看到各种编译出来的动态库以及一些可执行程序。该olsrd2_static既包含了三个主要的图书馆和一个完整的OLSRv2路由代理的所有必要的插件。

  具备了上述的条件,以及按照上述的步骤进行操作,就能够实现在服务器上的编译。记录一下服务器的系统版本信息:
  Linux ubuntu 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
其中libnl库是部门中的前辈装的,安装的时候应该是在默认路径下,/usr/local/lib,总之这个路径安装后,不需要修改任何文件,按照上述的操作步骤即可实现编译。但是存在的问题是编译后生成的各个可执行程序,涉及到去访问硬件(网卡),这个时候需要root权限。而我没有root权限。只能“曲线救国”了。因此考虑放在TX1上来编译并执行相应的程序,在这里我就能为所欲为了。但是需要注意一点,在服务器上编译生成的可执行程序是没有办法拿到TX1直接跑的,因为平台不一样。因此需要交叉编译。我本来计划在TX1上直接进行编译来跑,刚好体验一下前辈安装libnl库的过程,但是又发现TX1上好多的工具都没有安装,比如说前面提到的必须具备的git以及Cmake工具,这个时候想着通过TX1访问互联网来安装这些工具,就去找前辈开了代理来访问,但是安装实在太麻烦了,耽误工作效率。所以就考虑在服务器上进行交叉编译。在编译时,不仅仅是针对OONF工程的交叉编译,同时还有针对OONF所依赖的libnl库进行交叉编译,我从前辈那里要来了libnl未编译的源程序。现在进行交叉编译,并将交叉编译过程中所遇到的问题记录在这里。同时如果修改了libnl库,OONF工程中的相关配置文件应该也要修改,在此也应该做一些记录。
首先讲libnl库的交叉编译:
             将libnl库放置在服务器上的你自己的工作目录,然后解压
             tar -xvf libnl-3.x.xx.tar.gz
             cd libnl-3.x.xx/
然后需要进行配置:
     ./configure CC=aarch64-linux-gnu-gcc --host=arm-linux --prefix=/home/darry/workdir/libnl/build
其中CC后面的参数是指定的编译器,host是系统,prefix是将后面生成的文件放置的路径,注意这里的路径用绝对路径。
然后 make make install即可。到这里,所依赖的底层libnl库就已经安装完毕了,
接下里需要做的就是在OONF工程中,修改相关文件使其能够找到新编译生成的库。并且也针对于上层OONF工程进行交叉编译。此时需要修改cmake文件,该文件所在位置为
/OONF/cmake/cross,自己创建一个新的cmake文件,文件内容为
           SET(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
           SET(PKG_CONFIG_EXECUTABLE /home/darry/workdir/libnl/build/lib/pkgconfig)
           SET(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
           SET(CMAKE_LINKER aarch64-linux-gnu-ld)
这些指令,分别是修改编译工具链,还有指定libnl库位置。创建了该文件以后,需要准备编译了,为了让文件看起来更有条理一些,我们为针对不同平台的编译创建一个它自己的编译目录,在与原来的build同一层级创建一个目录,mkdir build_for_tx1
然后进入该目录, cd build_for_tx1,接下来修改编译选项来引用刚才你创建的cmake文件,
         cmake -D CMAKE_TOOLCHAIN_FILE=…/cmake/cross/tx1_on_ubuntu.cmake …
然后执行make即可。截止到这里,针对TX1的所有编译工作就做完了。将编译生成的所有文件打个包拷贝到TX1上。
现阶段的主要任务是确认编译出来的多个可执行程序,每个可执行程序都是干嘛的。

在开始项目前的一些猜想。理论上,可能就是把这个开源项目跑起来。然后可能需要根据实际使用需求进行适当的裁剪,然后将其作为我们设备下的一个进程来跑,并且相关的启动参数放在启动脚本或者一些配置文件里。并能够实现不同进程之间的交互从而来实现利用该模块进行一些网络探测的功能。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值