📄 如何为嵌入式开发建立交叉编译环境.htm
字号:
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#">本文内容包括:</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#N10062">下载源文件、补丁和建立编译的目录</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#N10088">2.
建立工作目录</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#N10126">建立内核头文件</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#N1019C">建立二进制工具(binutils)</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#N10208">建立初始编译器(bootstrap
gcc)</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#N10283">建立
c 库(glibc)</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#N102C0">建立全套编译器(full
gcc)</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#resources">参考资料
</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#author">关于作者</A></TD></TR>
<TR class=left-nav-child-highlight>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/cl-bullet.gif"
width=2></TD>
<TD><A class=left-nav-child
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#rate">对本文的评价</A></TD></TR>
<TR class=left-nav-last>
<TD width=14><IMG class=display-img height=1 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=14></TD>
<TD width=136><IMG class=display-img height=19 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/left-nav-corner.gif"
width=136></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
<TBODY>
<TR>
<TD class=related colSpan=2><B class=related>相关链接:</B></TD></TR>
<TR class=rlinks>
<TD><IMG height=8 alt="" src="如何为嵌入式开发建立交叉编译环境.files/rl-bullet.gif"
width=2></TD>
<TD><A class=rlinks
href="http://www.ibm.com/developerworks/cn/views/linux/articles.jsp">Linux
技术文档库</A></TD></TR><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- No content currently --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
<TR>
<TD width=14><IMG class=display-img height=1 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=14></TD>
<TD width=136><IMG class=display-img height=19 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=136></TD></TR></TBODY></TABLE><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- No content currently --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--></TD><!--LEFTNAV_END-->
<TD width="100%">
<TABLE id=content-table cellSpacing=0 cellPadding=0 width="100%"
border=0><TBODY>
<TR vAlign=top>
<TD width="100%">
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=main><IMG height=1 alt=跳转到主要内容
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=592
border=0></A></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width=10 height=18><IMG height=18 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=10></TD>
<TD width="100%"><IMG height=6 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=1><BR><A class=bctl
href="http://www.ibm.com/developerworks/cn/">developerWorks
中国</A><SPAN class=bct> > </SPAN><A
class=bctl
href="http://www.ibm.com/developerworks/cn/linux/">Linux</A><SPAN
class=bct> ></SPAN><IMG height=1 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=1><BR>
<H1>如何为嵌入式开发建立交叉编译环境</H1><IMG class=display-img height=6
alt="" src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=1></TD>
<TD class=no-print width=192><IMG height=18 alt=developerWorks
src="如何为嵌入式开发建立交叉编译环境.files/dw.gif"
width=192></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width=10><IMG height=1 alt="" src="如何为嵌入式开发建立交叉编译环境.files/c.gif"
width=10></TD>
<TD width="100%">
<TABLE class=no-print cellSpacing=0 cellPadding=0 width=160
align=right border=0>
<TBODY>
<TR>
<TD width=10><IMG height=1 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=10></TD>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
<TBODY>
<TR>
<TD class=v14-header-1-small>文档选项</TD></TR></TBODY></TABLE>
<TABLE class=v14-gray-table-border cellSpacing=0 cellPadding=0
border=0>
<TBODY>
<TR>
<TD class=no-padding width=150>
<TABLE cellSpacing=0 cellPadding=0 width=143
border=0><IMG height=1 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=8>
<FORM name=email
action=https://www.ibm.com/developerworks/secure/email-it.jsp><INPUT
type=hidden
value=在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。
name=body><INPUT type=hidden value=如何为嵌入式开发建立交叉编译环境
name=subject><INPUT type=hidden value=cn name=lang>
<SCRIPT language=JavaScript type=text/javascript><!--document.write('<tr valign="top"><td width="8"><img src="//www.ibm.com/i/c.gif" width="8" height="1" alt=""/></td><td width="16"><img src="//www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="将此页作为电子邮件发送" /></td><td width="122"><p><a class="smallplainlink" href="javascript:document.email.submit();"><b>将此页作为电子邮件发送</b></a></p></td></tr>');//--></SCRIPT>
<NOSCRIPT>
<TBODY>
<TR vAlign=top>
<TD width=8><IMG height=1 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=8></TD>
<TD width=16><IMG height=16 alt=""
src="如何为嵌入式开发建立交叉编译环境.files/c.gif" width=16></TD>
<TD class=small width=122>
<P><SPAN class=ast>未显示需要 JavaScript
的文档选项</SPAN></P></TD></TR></NOSCRIPT></FORM></TBODY></TABLE></TD></TR></TBODY></TABLE><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- this content will be automatically generated across all content areas --><BR><!--END RESERVED FOR FUTURE USE INCLUDE FILES--><BR></TD></TR></TBODY></TABLE>
<P>级别: 初级</P>
<P><A
href="http://www.ibm.com/developerworks/cn/linux/l-embcmpl/#author">恩
梁元</A> (<A
href="mailto:sunix_yuanenliang@yahoo.com.cn?subject=如何为嵌入式开发建立交叉编译环境">mailto:sunix_yuanenliang@yahoo.com.cn?subject=如何为嵌入式开发建立交叉编译环境</A>),
软件工程师<BR></P>
<P>2005 年 9 月 01 日</P>
<BLOCKQUOTE>在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。</BLOCKQUOTE><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
<P>随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。</P>
<P>在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由
binutils、gcc 和 glibc 几个部分组成。有时出于减小 libc 库大小的考虑,你也可以用别的 c 库来代替
glibc,例如 uClibc、dietlibc 和
newlib。建立一个交叉编译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有一些编译好的可用的交叉编译工具链可以下载。</P>
<P>下面我们将以建立针对arm的交叉编译开发环境为例来解说整个过程,其他的体系结构与这个相类似,只要作一些对应的改动。我的开发环境是,宿主机
i386-redhat-7.2,目标机 arm。</P>
<P>这个过程如下</P>
<P>1. 下载源文件、补丁和建立编译的目录</P>
<P>2. 建立内核头文件</P>
<P>3. 建立二进制工具(binutils)</P>
<P>4. 建立初始编译器(bootstrap gcc)</P>
<P>5. 建立c库(glibc)</P>
<P>6. 建立全套编译器(full gcc)</P>
<P><A name=N10062><SPAN class=atitle>下载源文件、补丁和建立编译的目录</SPAN></A></P>
<P>1. 选定软件版本号</P>
<P>选择软件版本号时,先看看glibc源代码中的INSTALL文件。那里列举了该版本的glibc编译时所需的binutils
和gcc的版本号。例如在 glibc-2.2.3/INSTALL 文件中推荐 gcc 用 2.95以上,binutils 用
2.10.1 以上版本。</P>
<P>我选的各个软件的版本是:</P>
<P>linux-2.4.21+rmk2<BR>binutils-2.10.1<BR>gcc-2.95.3<BR>glibc-2.2.3<BR>glibc-linuxthreads-2.2.3</P>
<P>如果你选的glibc的版本号低于2.2,你还要下载一个叫glibc-crypt的文件,例如glibc-crypt-2.1.tar.gz。
Linux 内核你可以从www.kernel.org 或它的镜像下载。</P>
<P>Binutils、gcc和glibc你可以从FSF的FTP站点ftp://ftp.gun.org/gnu/
或它的镜像去下载。在编译glibc时,要用到 Linux 内核中的 include
目录的内核头文件。如果你发现有变量没有定义而导致编译失败,你就改变你的内核版本号。例如我开始用linux-2.4.25+vrs2,编译glibc-2.2.3
时报 BUS_ISA 没定义,后来发现在 2.4.23 开始它的名字被改为
CTL_BUS_ISA。如果你没有完全的把握保证你改的内核改完全了,就不要动内核,而是把你的 Linux 内核的版本号降低或升高,来适应
glibc。</P>
<P>Gcc 的版本号,推荐用 gcc-2.95 以上的。太老的版本编译可能会出问题。Gcc-2.95.3
是一个比较稳定的版本,也是内核开发人员推荐用的一个 gcc 版本。</P>
<P>如果你发现无法编译过去,有可能是你选用的软件中有的加入了一些新的特性而其他所选软件不支持的原因,就相应降低该软件的版本号。例如我开始用
gcc-3.3.2,发现编译不过,报 as、ld 等版本太老,我就把 gcc 降为
2.95.3。太新的版本大多没经过大量的测试,建议不要选用。</P><BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -