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

前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟。江浩写的《CAPWAP移植进展.docx》对openCapwap的移植过程有了比较详细的描述,所以在此就不涉及技术细节了,本文档主要以openCapwap的移植为例,总结嵌入式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,显示版本号则表示安装成功。
  (交叉编译器一般是平台厂商提供的,比如我们的交叉编译器就是mips-linux-gcc,是瑞昱提供的。)
  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函数行为不同的问题。以上都是平时移植过程中需要重点注意的地方。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-09 00:11:25

嵌入式linux应用程序移植方法总结的相关文章

gdbserver远程调试嵌入式linux应用程序方法

此处所讲的是基于gdb和gdbsever的远程调试方法.环境为:PC机:win7.虚拟机:10.04.下位机:飞嵌TE2440开发板.   嵌入式linux应用程序的开发一般都是在linux里面编写好代码,并用交叉编译器arm-linux-gcc编译好之后再下载到板子上运行.如果建立了远程调试(能够在PC机ubuntu中调试板子中的linux应用程序),这样对于开发程序是极其方便的.   以下是摘自网络上的一些方法.其中加入了自己所遇到的一些问题,并提出了解决方法.   1.首先建立nfs文件系

《嵌入式 Linux应用程序开发标准教程(第2版)》——1.1 嵌入式Linux基础

1.1 嵌入式Linux基础 嵌入式 Linux应用程序开发标准教程(第2版) 自由开源软件在嵌入式应用上受到青睐,Linux日益成为主流的嵌入式操作系统之一.随着MOTOROLA手机A760.IBM智能型手表WatchPad.SharpPDA Zaurus等一款款高性能"智能数码产品"的出现,以及Motorola.Samsung.MontaVista.Philips.Nokia.IBM.SUN等众多国际顶级巨头的加入,嵌入式Linux的队伍越来越庞大了.目前,国外不少大学.研究机构和

《嵌入式 Linux应用程序开发标准教程(第2版)》——1.5 本章小结

1.5 本章小结 嵌入式 Linux应用程序开发标准教程(第2版) 本章首先介绍了Linux的历史.嵌入式Linux操作系统的优势.Linux不同发行版本的区别以及如何学习Linux.在这里要着重掌握的是Linux内核与GNU的关系,了解Linux版本号的规律,同时还要了解Linux多硬件平台支持.低开发成本等优越性. 本章接着介绍了如何安装Linux,这里最关键的一步是分区.希望读者能很好地掌握主分区.扩展分区的概念.Linux文件系统与Windows文件系统的区别以及Linux中"挂载&qu

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.1 Linux常用命令

2.1 Linux常用命令 嵌入式 Linux应用程序开发标准教程(第2版) 在安装完Linux再次启动之后,就可以进入到与Windows类似的图形化界面了.这个界面就是Linux图形化界面X窗口系统(简称X)的一部分.要注意的是,X窗口系统仅仅是Linux上面的一个软件(或者也可称为服务),它不是Linux自身的一部分.虽然现在的X窗口系统已经与Linux整合得相当好了,但毕竟还不能保证绝对的可靠性.另外,X窗口系统是一个相当耗费系统资源的软件,它会大大地降低Linux的系统性能.因此,若是希

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.4 实验内容

2.4 实验内容 嵌入式 Linux应用程序开发标准教程(第2版) 2.4.1 在Linux下解压常见软件 1.实验目的 在Linux下安装一个完整的软件(嵌入式Linux的必备工具--交叉编译工具),掌握Linux常见命令,学会设置环境变量,同时搭建起嵌入式Linux的交叉编译环境(关于交叉编译的具体概念在本书后面会详细讲解),为今后的实验打下良好的基础. 2.实验内容 在Linux中解压cross-3.3.2.tar.bz2,并添加到系统环境变量中去. 3.实验步骤 (1)将光盘中的cros

《嵌入式 Linux应用程序开发标准教程(第2版)》——导读

前 言 嵌入式 Linux应用程序开发标准教程(第2版) 第2版说明 本书第1版<嵌入式Linux应用程序开发详解>自2006年7月出版以来,受到了广大读者的一致好评,已经多次印刷,累计销量18000册.许多高等院校.职业学校和培训机构也将本书作为嵌入式专业的教材.许多读者提出了宝贵的意见和中肯的建议. 第2版图书在第1版基础上做了以下修订. 增加PPT教学课件:本书第2版增加了PPT教学课件,方便老师教学使用. 赠送嵌入式专家授课视频:本书第2版免费赠送超值的嵌入式教学视频,所讲内容均为嵌入

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.2 Linux启动过程详解

2.2 Linux启动过程详解 嵌入式 Linux应用程序开发标准教程(第2版) 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程.Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识. 2.2.1 概述 用户开机启动Linux过程如下: (1)当用户打开PC(intel CPU)的电源时,CPU将自动进入实模式,并从地址0xFFFF0000开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址.这时BIOS进行开机自检,并按BI

《嵌入式 Linux应用程序开发标准教程(第2版)》——1.3 Linux文件及文件系统

1.3 Linux文件及文件系统 嵌入式 Linux应用程序开发标准教程(第2版) 在安装完Linux之后,下面先对Linux中一些非常重要的概念做一些介绍,以便进一步学习使用Linux. 1.3.1 文件类型及文件属性 1.文件类型 Linux中的文件类型与Windows有显著的区别,其中最显著的区别在于Linux对目录和设备都当作文件来进行处理,这样就简化了对各种不同类型设备的处理,提高了效率.Linux中主要的文件类型分为4种:普通文件.目录文件.链接文件和设备文件. (1)普通文件. 普

《嵌入式 Linux应用程序开发标准教程(第2版)》——1.4 实验内容——安装Linux操作系统

1.4 实验内容--安装Linux操作系统 嵌入式 Linux应用程序开发标准教程(第2版) 1.实验目的 读者通过亲自动手安装Linux操作系统,对Linux有个初步的认识,并且加深对Linux中的基本概念的理解,熟悉Linux文件系统目录结构. 2.实验内容 安装Linux(Red Hat Enterprise 4 AS版本)操作系统,查看Linux的目录结构. 3.实验步骤 (1)磁盘规划. 在这一步骤中,需要留出最好有5GB以上的空间来安装Linux系统. (2)下载Linux版本. 可