移植capwap到tiny6410上

make的时候用的交叉编译环境是arm-linux-gcc-4.5.1

make的时候出现gnu_getopt.o: Relocations in generic ELF (EM: 3)错误提示。

原因:

由于这个capwap工程之前使用gcc编译过x86版本的,然后修改configure 的编译选项开始编译arm-linux版本,会造成有x86的文件遗留,使用make clean -w清理后再交叉编译即可。



。#error "This openssl-devel package does not work your architecture

解决办法:重新从官网下载OpenSSL用里面的OpenSSL文件替代capwap里的openssll文件,再编译


依赖的库没有经过交叉编译就拿来用了,如#error“./static/libssl.a: could not read symbols: File in wrong format”即libssl.a库文件格式是X86架构下的不支持arm架构。

解决:修改openssl-1.0.1j里的make文件的cc改为arm-linux-gcc-4.5.1重新编译,编好后会在penssl-1.0.1j目录下生产capwap里的static文件里需要的两个静态库文件:libcrypto.a   libssl.a



以下转载自:

http://www.bdqn.cn/news/201312/12395.shtml

嵌入式linux应用程序移植方法总结

2013年12月20日 09:54供稿中心: 互联网运营部
摘要:嵌入式linux应用程序移植方法总结

嵌入式linux应用程序移植的步骤包括:

1、准备好交叉编译环境

在安装有Linux操作系统的PC上安装对于平台的交叉编译器,并将交叉编译器加到环境变量中,如export PATH=$PATH:/opt /toolchain/rsdk-1.3.6-5281-EB-2.6.30-0.9.30/bin, 然后在终端界面里看交叉编译器版本,如敲mips-linux-gcc –v,显示版本号则表示安装成功。

2、准备好源代码

准备好需要编译的源代码库包,如capwap-0.93.3,需要注意的是,不仅需要准备要编译的源代码库包,还需要准备该源码包依赖的包,例如capwap-0.93.3依赖安全加密相关的包openssl和多线程相关的包pthread,这些包也需通过编译成静态库或动态库供主承销包调用。

3、修改Makefile

一般的源码库可以通过运行./Configure来制定编译器gcc,目标板的架构已经生产应用程序和库的目录。如果没有Configure文件就需要手动打开Makefile文件来修改,主要需要修改的地方有:(1)编译器的类型,(2)需要库的头文件路径;(3)需要库的链接路径(4)生成应用程序的路径。如openCapwap移植过程,将CC=gcc行用CC=mips-linux-gcc替换。

4、编译源代码

在源码包的主路径下运行Make,除非运气特别好,一般情况下是会报错的,需要根据报错的类型进行相应的修改。常见的报错类型有:(1)依赖的库包不支持该CPU架构,需要更换该架构的库包,如Capwap自带的openssl库不支持 mips。#error "This openssl-devel package does not work your architecture?"(2)依赖的库没有经过交叉编译就拿来用了,如#error“./static/libssl.a: could not read symbols: File in wrong format”即libssl.a库文件格式是X86架构下的不支持mips架构。(3)源代码中有c语言方面的错误,一般是和交叉编译器版本不匹配引起的。

一步步解决完这些错误后,然后终于可以生产对应目标板的应用程序了。但是生产相应的应用程序才是万里长征的第一步,让程序正确的运行才是最终目标。

5、安装应用程序

安装应用程序有两种方法,一是将应用程序放到目标板的文件系统中,通过烧镜像的方法将程序下载到目标板上;另一种是通过像tftp的方法下载到目标板上。后一种方法便捷灵活,在调试程序的过程中应用较多。需要注意的是,还需要将应用程序需要的动态库也下载到目标板上,应用程序才能跑。例如在我们移植capwap中出现,在完成烧录后,运行WTP报错。Error:系统化找不到 pthread.so。分析:在终端中进入lib目录,发现缺少libpthread.so动态库。故原因在于RTL8198目标板SDK编译时没有将 libpthread.so动态库添加到目标板系统的lib库文件当中。

6、运行调试应用程序

调试应用程序让其能够正确的工作,才是移植工作最重要的部分,这需要对应用程序的流程很熟悉,然后通过打印日志的方法看程序运行的路径,分析日志与正确的流程的差异来确定出错的地方。常见的出错地方有:(1)内存分配函数;(2)系统位数不一样;(3)字节顺序问题(大端小端);(4)浮点数的表示问题等。如我们在移植过程中遇到的malloc函数行为不同的问题。以上都是平时移植过程中需要重点注意的地方。


你可能感兴趣的:(移植capwap到tiny6410上)