设为首页 加入收藏

TOP

基于openSUSE 11.0交叉编译嵌入式Linux系统产品
2014-11-24 11:42:19 来源: 作者: 【 】 浏览:0
Tags:基于 openSUSE 11.0 交叉 编译 嵌入式 Linux 系统 产品

一、交叉编译简述


交叉编译呢,简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。


二、交叉编译的基础知识


在做实际工作之前,我想我们应该先掌握一些关于交叉编译的基本知识,其实说白了也就是理解一些我们经常会碰到的英文单词:


  宿主机(host):编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。


  目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。


  perfix 交叉编译器的安装位置。


  xxx-xxxx-xxxxx 平台描述。


我们在主机平台上开发程序,并在这个平台上运行交叉编译器,编译我们的程序;而由交叉编译器生成的程序将在目的平台上运行。这里值得说明得是平台描述,象arm-linux、i386-pc-linux2.4.3这样的字符串我们经常会看到,其实它是用来描述平台的,它有完整格式、缩减格式和别名之分。完整格式是:CPU-制造厂商-操作系统,如sparc-sun-sunos4.1.4,说明平台所使用的CPU是sparc,制造厂商是sun,上面运行的操作系统是SunOS,版本是4.1.4。当然,我们都不愿记这么长的东西,因此可以使用短格式,短格式中有选择地去除了制造厂商、软件版本等信息,因此我们同样可以用sparc-sunos或sparc-sunos-sunos4来描述这个平台。如果觉得这个还是太麻烦,那就可以使用别名,sun4m就可以很简单地描述这个平台。需要注意的是,并不是所有的平台都有别名,也不是所有的短格式都可以正确地描述平台。


三、交叉编译工具链功能说明


在开发linux嵌入式平台时,开发厂商会推出一整套交叉工具链来配合自身的嵌入式产品。


交叉编译技术,就是一种在一个异构平台上编译出目标平台的技术。比如在PC平台(x86 CPU)上编译出运行在以嵌入式linux为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到Linux CPU平台上才能运行。


每一个软件在编译的过程中都要经过一系列的处理,才能从源代码变成可执行的目标代码。这一系列处理包括预编译、高级语言编译、汇编、链接及重定位。这一套流程里面用到的每个工具和相关的库组成的集合,就称为工具链(tool chain)。



四、开发步骤配置


本文以MOXA公司的DA-66X-LX智能采集设备为例,在openSUSE操作系统下安装该公司的linux_tool-chain_1.0工具链,如果没有光盘您可以到MOXA官方网站上下载linux_tool-chain_1.0。


# mount –t iso9660 /dev/cdrom /mnt/cdrom


# cp /mnt/cdrom/tool-chain/linux/install.sh /home/


# sh /home/install.sh


工具链会自动安装到您的操作系统下,这时您只要加入工具链环境变量的路径中区,系统启动时会自动加载工具链的路径。


使用gedit文本工具打开/etc/profile文件,在文件末尾行添加如下内容:


MOXA_XSCALE = /user/local/xscale_be/bin


PATH = $MOXA_XSCALE:$PATH


export MOXA_XSCALE PATH



makefile_moxa


###########################################################################


# Title : makefile_moxa(opensuse 11.0)


# Author : liuxuezong


# Project : PRJNAME


# date : 2011.09.05 15:03


# ver : 1.0


###########################################################################



OBJDIR = $(PRJOUT)/$(PRJNAME)


DLLDIR = $(FEPHOME)/bin


BINDIR = $(FEPHOME)/bin


LIBDIR = $(FEPHOME)/lib


CODEDIR = $(FEPHOME)/code


INCPATH = -I../inc -I$(FEPHOME)/code/include


PREFIXPATH = xscale_be-



####### Compiler, tools and options


AR = $(PREFIXPATH)ar


CXX = $(PREFIXPATH)g++


CC = $(PREFIXPATH)gcc


LD = $(PREFIXPATH)g++


MAKE = make


GM = gmake


YACC = yacc


LEX = lex


TAR = tar -cf


COMPRESS = gzip -9f


COPY = cp -f


SED = sed


COPY_FILE = $(COPY)


COPY_DIR = $(COPY) -R


STRIP = $(PREFIXPATH)strip


INSTALL_FILE = $(COPY_FILE)


INSTALL_DIR = $(COPY_DIR)


INSTALL_PROGRAM = $(COPY_FILE)


DEL_FILE = rm -f


SYMLINK = ln -f -s


DEL_DIR = rmdir


MOVE = mv -f


CHK_DIR_EXISTS = test -d


MKDIR = mkdir -p



####### Compiler, flags definitions


ARFLAGS = -vr


CFLAGS = -g $(DEFINES)


CXXFLAGS = -fpic -w -g $(DEFINES)


LDCFLAGS = -G -z defs -lsocket -lnsl -ldl


LDCXXFLAGS = -shared


CLDFLAGS = -g


CXXLDFLAGS = -g -G


BINLIB = -lc


THREAD_LIB = -lpthread


SOCKET_LIB = -lsocket -lnsl


DYLOAD_LIB = -ldl


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android教程之使用LiveAndroid来.. 下一篇在openSUSE操作系统下简单编程指南

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)
·TCP/UDP协议_百度百科 (2025-12-26 12:20:11)
·什么是TCP和UDP协议 (2025-12-26 12:20:09)
·TCP和UDP详解 (非常 (2025-12-26 12:20:06)