Windows+cygwin下構造arm-linux交叉編譯環境最簡單的方法

來源:互聯網
上載者:User

小I入手剛三天, 還在門口探索, 以下內容還請高手指正
根據網上的資源介紹, 成功的telnet登入到了小I內部, 但是發現shell只有一個ash, 用起來非常的不爽,於是想自己弄個bash用,先是參考了OopsWare大蝦的文章:http://club.ccmove.com/nclub/top ... &TopicID=397292, 整個編譯的過程很順利, 編譯好以後用產生的arm-softfloat-linux-gnu-gcc編譯了一個簡單的hello,world程式,傳到小I上運行, 一切正常!於是開始編譯bash 3.1, 編譯成功後把產生的bash傳到小I, 可是啟動並執行時候問題出來了,啟動並執行時候顯示:
# ./bash
Illegal instruction
搞了一下午始終沒有找到原因.
後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M
(該檔案可以在eMule裡面搜尋/下載)
經測試可以正常交叉編譯arm-linux程式,編譯好的程式在小I上也可以正常運行.
安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)
1. 在 c:/tmp 下運行:
tar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
然後在tmp下會產生一個目錄usr,下面有如下子目錄:
arm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/
2.把c:/tmp/usr/bin下的所有檔案拷貝(或移動)到c:/cygwin/bin;
把c:/tmp/usr/lib下的所有檔案拷貝(或移動)到c:/cygwin/lib;
把arm-linux/ include/ info/ libexec/  man/  share/
幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行檔案了,該包還帶了一個arm的模擬器
armv5l-linux-run,但是我沒有運行成功.
4.以bash 3.1為例介紹一下arm-linux軟體的編譯過程:
1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.
2)執行下列命令:
tar xvfz bash-3.1.tar.gz
cd bash-3.1
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)
make
3)編譯完成後會產生arm-linux的執行檔案bash,運行命令:
file bash
顯示
bash: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
證明編譯成功
4)運行arm-linux-strip bash, 去除不必要的符號資訊,可以使編譯好的bash檔案大小從3M多減少到600多k.
5)把編譯好的bash上傳到小I上就可以運行了.
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
/bin /usr/bin /sbin /usr/sbin目錄中的命令檔案,這樣可以節省出幾M的空間?
--------------------------------------------------------------------------------
從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
完全是錯誤的,比如我用busybox替換了系統的df,啟動並執行時候結果如下:
~#df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language
/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca1
/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie
估計是這個包在編譯的時候沒有加進軟體類比浮點處理器支援, 而小I本身沒有硬體的浮點處理器.
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
第1步.準備工作,下載如下軟體包:
http://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2       
ftp://ftp.gnu.org/pub/gnu 下載如下包
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
http://www.kernel.org/pub/linux/kernel/v2.4/ 下載
linux-2.4.26.tar.bz2
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話
就可以先不用下載
第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
tar xvfj ezx-crosstool-0.5.tar.bz2
會產生一個ezx-crosstool-0.5目錄, 然後把預先下載的:
binutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
第3步.編輯ezx-crosstool-0.5目錄下的build.sh檔案,把第5行:
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
改成你想要的安裝位置,比如要安裝在/usr/arm就改成:
RESULT_TOP=/usr/arm
第4步.最後一步,也是最費時間的一步:
在ezx-crosstool-0.5目錄下運行:
./build.sh
然後就慢慢等吧...
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

轉載:http://bbs.512530.com/thread-529494-1-1.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.