小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