radvd移植到ARM--交叉编译.doc_第1页
radvd移植到ARM--交叉编译.doc_第2页
radvd移植到ARM--交叉编译.doc_第3页
radvd移植到ARM--交叉编译.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Router Advertisement Daemon (radvd)移植到ARM交叉编译IPv6中的路由通告(router advertisement)在linux操作系统中为radvd模块,现在要在arm平台上实现IPv6的路由通告。要将radvd模块移植到arm平台上。在移植的过程中,遇到了N多问题,不过在我两位伟大师姐的指导下,经过几天的摆弄还是终于搞定了(O(_)O)。下面将我的移植过程写下了,总结一下一边以后再次查看,也希望对需要的人提供一些帮助。多说一句感谢Google,现在才意识到Google推出中国市场是多么可惜,不过还好还能够使用它。第一步:下载radvd源代码下载网址:/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库也要是进行交叉编译后的库文件。否则的话在编译的过程中还是找不到这个库。 下载网址:/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的方法吧。功夫不负有心人人啊,找到了:/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 archivegcc -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命令,开始编译了,期间给出不少的警告我没去管他。等到最后编译终于成功了。找到了我需要的可执行文件:radvd和radvdump。为了他们两折腾了我好几天,总算把它弄出来了。接下来的问题就好办多了。第四步:将生成的可执行文件拷贝到开发板上make过后生成的文件不少,那那些是我们需要的呢。参考:/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.到网上去找,找到一博客中提到此类问题如何解决:/questions/linux-networking-3/radvd-can-not-work-in-ub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论