?? 如何為嵌入式開發建立交叉編譯環境 wimax寬帶無線網絡技術論壇 - www_wimax_org_cn.htm
字號:
<TABLE class=i_table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word"
cellSpacing=1 cellPadding=0 width="99%" align=center>
<TBODY>
<TR>
<TD
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"
vAlign=top width="20%" bgColor=#ffffff height="100%"><FONT
face=Gulim color=#000066><B>emthqred</B></FONT><BR>
<TABLE cellSpacing=0 cellPadding=0 width="98%">
<TBODY>
<TR>
<TD
align=middle><BR><BR></TD></TR></TBODY></TABLE><BR><BR><!----><IMG
src="如何為嵌入式開發建立交叉編譯環境 WiMAX寬帶無線網絡技術論壇 - www_wimax_org_cn.files/5.gif">
<BR>級別: <FONT color=#555555>論壇版主</FONT><BR>精華: <FONT
color=green><B>0</B></FONT><BR>發帖: <FONT
color=green><B>29</B></FONT><BR>論壇積分: <FONT color=#984b98><B>32
分</B></FONT><BR>論壇貨幣: <FONT color=#984b98><B>169 元</B></FONT><BR><!---->好評度: <FONT color=#0033ff><B>11
點</B></FONT><BR><!---->注冊時間:2006-02-10<BR></TD>
<TD vAlign=top width="80%" bgColor=#ffffff height="100%">
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word"
height="100%" cellSpacing=0 cellPadding=6 width="99%"
align=center><TBODY>
<TR height="100%">
<TD vAlign=top bgColor=#ffffff colSpan=6><!----><A
href="http://www.wimax.org.cn/profile.php?action=show&uid=399"><IMG
alt=查看作者資料
src="如何為嵌入式開發建立交叉編譯環境 WiMAX寬帶無線網絡技術論壇 - www_wimax_org_cn.files/profile.gif"
align=absMiddle></A> <A
href="http://www.wimax.org.cn/message.php?action=write&touid=399"><IMG
alt=發送短消息
src="如何為嵌入式開發建立交叉編譯環境 WiMAX寬帶無線網絡技術論壇 - www_wimax_org_cn.files/message.gif"
align=absMiddle></A> <A
href="http://www.wimax.org.cn/sendemail.php?uid=399"><IMG
alt=發送郵件
src="如何為嵌入式開發建立交叉編譯環境 WiMAX寬帶無線網絡技術論壇 - www_wimax_org_cn.files/email.gif"
align=absMiddle></A> <A
href="http://www.wimax.org.cn/sendemail.php?action=tofriend&tid=354"><IMG
alt=推薦此帖
src="如何為嵌入式開發建立交叉編譯環境 WiMAX寬帶無線網絡技術論壇 - www_wimax_org_cn.files/emailto.gif"
align=absMiddle></A> <A
href="http://www.wimax.org.cn/post.php?action=quote&fid=16&tid=354&pid=&article=0"><IMG
alt=引用回復這個帖子
src="如何為嵌入式開發建立交叉編譯環境 WiMAX寬帶無線網絡技術論壇 - www_wimax_org_cn.files/quote.gif"
align=absMiddle></A> <A
href="http://www.wimax.org.cn/post.php?action=modify&fid=16&tid=354&pid=&article=0"><IMG
src="如何為嵌入式開發建立交叉編譯環境 WiMAX寬帶無線網絡技術論壇 - www_wimax_org_cn.files/edit.gif"
align=absMiddle></A> <!----><BR><BR><SPAN
class=tpc_title>如何為嵌入式開發建立交叉編譯環境</SPAN><BR><!----><BR><SPAN
class=tpc_content>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width="100%">
<H1>如何為嵌入式開發建立交叉編譯環境(轉自IBM)</H1><IMG class=display-img
height=6 alt="" src="" width=1></TD>
<TD class=no-print width=192></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="" 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=""
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="" width=8>
<FORM name=email
action=https://www-128.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=java type=text/java script>
<!--
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="java script:document.email.submit();"><b>將此頁作為電子郵件發送</b></a></p></td></tr>');
//-->
</SCRIPT>
<TBODY>
<TR vAlign=top>
<TD width=8><IMG height=1 alt="" src=""
width=8></TD>
<TD width=16></TD>
<TD width=122>
<P><B><FONT color=#5c81a7
size=2></FONT></B> </P></TD></TR><NOSCRIPT>
<TR vAlign=top>
<TD width=8><IMG height=1 alt="" src=""
width=8></TD>
<TD width=16><IMG height=16 alt="" src=""
width=16></TD>
<TD class=small width=122>
<P><SPAN
class=ast></SPAN></P></TD></TR></NOSCRIPT></FORM></TBODY></TABLE></TD></TR></TBODY></TABLE><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><BR><!--END RESERVED FOR FUTURE USE INCLUDE FILES--><BR></TD></TR></TBODY></TABLE>
<P><A
href="http://www-128.ibm.com/developerworks/cn/linux/l-embcmpl/#author"><FONT
color=#996699>梁元恩 </FONT></A>, 軟件工程師<BR></P>
<P>2005 年 9 月 </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=N1005A><SPAN class=atitle><FONT face=Arial
size=4>下載源文件、補丁和建立編譯的目錄</FONT></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站點<A
href="ftp://ftp.gun.org/gnu/"
target=_blank>ftp://ftp.gun.org/gnu/</A>
或它的鏡像去下載。在編譯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>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD><IMG height=1 alt="" src=""
width="100%"><BR><IMG height=6 alt="" src=""
width=8 border=0></TD></TR></TBODY></TABLE>
<TABLE class=no-print cellSpacing=0 cellPadding=0
align=right>
<TBODY>
<TR align=right>
<TD><IMG height=4 alt="" src="" width="100%"><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=center><IMG height=16 alt="" src=""
width=16 border=0><BR></TD>
<TD vAlign=top align=right><A class=fbox
href="http://www-128.ibm.com/developerworks/cn/linux/l-embcmpl/#main"><B><FONT
color=#996699>回頁首</FONT></B></A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR>
<P><A name=N10080><SPAN class=atitle><FONT face=Arial
size=4>2. 建立工作目錄</FONT></SPAN></A></P>
<P>首先,我們建立幾個用來工作的目錄:</P>
<P>在你的用戶目錄,我用的是用戶liang,因此用戶目錄為
/home/liang,先建立一個項目目錄embedded。</P><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#eeeeee border=1>
<TBODY>
<TR>
<TD><PRE><CODE class=section>
<FONT face="Lucida Console">$pwd
/home/liang
$mkdir embedded
</FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR>
<P>再在這個項目目錄 embedded 下建立三個目錄 build-tools、kernel 和
tools。</P>
<P>build-tools-用來存放你下載的 binutils、gcc 和 glibc
的源代碼和用來編譯這些源代碼的目錄。</P>
<P>kernel-用來存放你的內核源代碼和內核補丁。</P>
<P>tools-用來存放編譯好的交叉編譯工具和庫文件。</P><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#eeeeee border=1>
<TBODY>
<TR>
<TD><PRE><CODE class=section>
<FONT face="Lucida Console">$cd embedded
$mkdir build-tools kernel tools
</FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR>
<P>執行完后目錄結構如下:</P><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%"
bgColor=#eeeeee border=1>
<TBODY>
<TR>
<TD><PRE><CODE class=section>
<FONT face="Lucida Console">$ls embedded
build-tools kernel tools
</FONT></CODE></PRE></TD></TR></TBODY></TABLE><BR>
<P>3. 輸出和環境變量</P>
<P>我們輸出如下的環境變量方便我們編譯。</P><BR>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -