Router Advertisement Daemon (radvd)移植到ARM——交叉编译

转载地址:http://hi.baidu.com/dejeje/item/93d9e5d61843d64dfb5768c8

Router Advertisement Daemon (radvd)移植到ARM——交叉编译

 

IPv6中的路由通告(router advertisement)在linux操作系统中为radvd模块,现在要在arm平台上实现IPv6的路由通告。要将radvd模块移植到arm平台上。在移植的过程中,遇到了N多问题,不过在我两位伟大师姐的指导下,经过几天的摆弄还是终于搞定了(O(∩_∩)O~)。下面将我的移植过程写下了,总结一下一边以后再次查看,也希望对需要的人提供一些帮助。多说一句感谢Google,现在才意识到Google推出中国市场是多么可惜,不过还好还能够使用它。

 

第一步:下载radvd源代码

下载网址:http://www.litech.org/radvd/

我下载的radvd-1.6-1.src.rpm源码包。在linux系统中运行

tar zxvf radvd-XXX.src.rpm 命令解压源码包,进入到解压后的目录当中去。源代码当中并没有Makefile有的是一个configure脚本文件。此类源代码是通过运行configure脚本文件后进行一些配置后。自动生成Makefile文件。此类源代码的安装步骤为:

configure             配置

make                   编译

make install         安装

make uninstall     卸载

 

第二步:对源码包进行配置

运行:./configure --host=arm-linux CC=arm-linux-gcc

       对于交叉编译运行configure脚本文件时要跟上适当的参数。必须要跟的为:“—host=arm-linux”运行configure脚本文件时,会进行一些了的checking注意检查其中的build、host、target。build后面应该为你主机(如果是虚拟机则为虚拟机)的linux操作系统的信息为:i686-pc-linux-gnu。host和target为arm-unknown-linux-gnu。还有就是检查 checking cross compile选项一定要为yes,表示在编译过程中进行的是交叉编译。Checking arm-linux-gcc 为arm-linux-gcc表示在进行交叉编译时使用的编译器为arm-linux-gcc。如果上述信息都正确则说明下面的编译过程中进行的就是交叉编译了。但在编译过程中遇到了麻烦,痛苦了我好几天。稍后细说。

       注意:在源码包中有几个文件要在进行配置和交叉编译前看看。一个是运行configure –help命令查看configure的各个选项的意义和使用方法,这可以在进行交叉编译的时候给你一些帮助,比方说—host是什么意思,help中将的很明白。除此之外还有很多选型。其次就是源代码中的README 。如果在配置过程中如果出现错误可以查看config.log文件,在编译过程中如果出现错误产看该文件也会得到一些帮助。

      

第三步:编译源代码make

在进行编译的过程中,真是把我给弄无语了。本来就没经验,碰到一些问题都不知道是怎么回事。也不知道该去如何解决。

接下来是最重要的一步了——编译!如果configure过程中的checking过程都没什么打的问题,没有报错那就可以了!运行configure脚本文件后你会看到在源代码包中多了不少的文件,其中就有我们需要的Makefile文件。看看吧,呵呵。

好了运行 “make”命令:

问题来了:make过程中出项的warning先不去管它,让人头痛的是出现了错误推出了编译过程,错误类型为: “can not find –lfl”

       不知道是怎么回事!头痛啊!差点因为它就放弃了,还好有师姐在,经他高明指点问题还是被我一步步的解决了。

       解决:到网上去搜-lfl是个什么东西,结果得到的结果是——-lfl:要flex库。经过师姐的指点。终于知道编译过程中出错时因为缺少相应的库这里也就是flex库了。那就到网上去下载flex库加载到交叉编译环境中去。

       注意:这里用到的是交叉编译,所以加载进去的flex库也要是进行交叉编译后的库文件。否则的话在编译的过程中还是找不到这个库。

       下载网址:http://download.chinaunix.net/download/0004000/3101.shtml  下载flex的源码包 ,解压后进入源代码目录。看到跟radvd一样的文件结构有configure脚本文件,同样运行configure文件,但是在其后加入的—host=arm-linux似乎是没有起到作用。所用的编译器仍然是gcc,不过没关系,在运行configure脚本文件后找到生成的Makefile文件直接到里面去修改就可以了。找到CC=gcc行,将编译器改为arm-linux-gcc就ok了。下面开始编译,同样执行make。马克过后就可以看一个libfl.a文件。将libfl.a放到交叉编译环境下还是出现同样的错误,没办法只好回头去看config.log文件了。但是没看出什么问题。经师姐指点,知道要通过.a文件生成.so文件才可以。

       到网上去找怎样.o生成.so的方法吧。功夫不负有心人人啊,找到了:http://osdir.com/ml/linux.lfs.hardened/2008-07/msg00063.html 我采用其中的第二种方法:

or put libfl.a in a separate directory.
ar -x libfl.a to extract the objects from the archive
gcc -shared *.o -o libfl.so to build the shared lib.

> and then take care of the symlinkage:
>
> cp -v libfl.so.$version /lib/
> ln -vsf libfl.so.$version /lib/libfl.so.2
> ln -vsf libfl.so.2 /lib/libfl.so

将生成的动态链接库libfl.so文件拷贝到交叉编译环境中的响应位置上。说实话我不知道这个文件该放到什么地方,我想了一个办法就是在交叉编译环境下的目录中去找.so文件都放到什么地方,结果搜到了。发现所有以lib开头的.so文件都放在同一个目录下,而且还有同名的.o文件。根据我的推断将生成的动态链接库文件发到响应的目录下。

再次在radvd的目录下运行make命令,开始编译了,期间给出不少的警告我没去管他。等到最后编译终于成功了。找到了我需要的可执行文件:radvdradvdump。为了他们两折腾了我好几天,总算把它弄出来了。接下来的问题就好办多了。


第四步:将生成的可执行文件拷贝到开发板上

make过后生成的文件不少,那那些是我们需要的呢。参考:http://linux.die.net/man/5/radvd.conf 其中提到:

 

Files

/usr/sbin/radvd

/etc/radvd.conf

/var/run/radvd/radvd.pid

/var/log/radvd.log

 

其次radvdump为linux ipv6 howto中提到的测试命令。将其一起拷贝到开发板上方便测试。

对于radvd.conf配置文件,我是按照linux ipv6 howto中的例子手动写的,写好后再拷贝的开发板上就ok了。对于配置文件如何写在源代码中的有非常详细的说明!

拷贝完成之后,修改文件的权限使其具有可执行权限。出现错误,提示找不到动态链接库libfl.so就是我们刚刚交叉编译生成的那个动态链接库。索性也将其拷贝到开发板上来。再次运行没有报错。但是出现如下问题:

Starting radvd: [Nov 24 10:04:28] radvd: IPv6 forwarding seems to be disabled, exiting failed.

 

到网上去找,找到一博客中提到此类问题如何解决:http://www.linuxquestions.org/questions/linux-networking-3/radvd-can-not-work-in-ubuntu-8-10-a-685701/

解决方法是依次输入以下命令:

sysctl -w net.ipv6.conf.all.forwarding=1

then run "lsmod | grep ipv6"

/etc/init.d/radvd start

 

!!!哦,终于完成了。再次运行radvd,利用radvdump测试通过。哈哈!!!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值