|
根據網上的資源介紹, 成功的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, 可是運行的時候問題出來了,運行的時候顯示:
4 q. p; X2 k4 J( F# ./bash
* j- ?! R( D9 [, D+ d0 t3 |Illegal instruction
% S! W- h" l E7 h; d搞了一下午始終沒有找到原因.9 A& \3 k# M, P! ^- _( ?
% M# K, K. C4 B$ ] W) u後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M
) h' G4 e% u) |. y; @7 h(該文件可以在eMule裡面搜索/下載) [6 J- v+ z, S* n
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.5 }; B! p% A% K5 ~9 d% M
1 G8 ?1 @# _3 {安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)3 ^' a. P2 \$ @! c
1. 在 c:/tmp 下運行:
2 ~5 ]: T# ?; U1 Atar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
1 T( g5 d S) k$ I2 w' ~/ G然後在tmp下會生成一個目錄usr,下面有如下子目錄:
. L* W q e& E2 j- C) qarm-linux/ bin/ include/ info/ lib/ libexec/ man/ share/. m6 T- ?. d7 k. `" I
5 D! G1 V$ m. l% l y
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
; h( ^( I0 e6 Q `1 ]! D4 f* @ p1 f把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
" C( W. e, D8 ~* [2 f+ x) B: \% T把arm-linux/ include/ info/ libexec/ man/ share/
% t. f& ]* l5 D3 F1 L幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.
0 N2 b4 x) x2 C& s- F! I
3 m9 Z/ O$ u/ r3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
( r; J% Y- E: s0 G9 Z: Harmv5l-linux-run,但是我沒有運行成功.3 b q4 @. ~; @% V0 V
; _- t; ?7 R* j2 \- N4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
+ R$ B) n9 D) r& y- H1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.; l9 U1 f* ~" L, @
2)執行下列命令:! x" a8 ^. [9 |! O- Q. h
tar xvfz bash-3.1.tar.gz3 D" u" d, C6 A3 W
cd bash-3.1
5 v* j' @, C+ h S; s4 s./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)9 H7 O+ r8 _! r# l# h2 m2 m' L
make
; u6 U( S4 w8 a, m9 N t5 T- {! W4 w, H- S6 w+ A- k8 B5 P( @0 e
3)編譯完成後會生成arm-linux的執行文件bash,運行命令:* J' R) Y8 n3 W( `
file bash; J4 X: f# ]5 n* c; J
顯示
/ ?. f( N. a7 G$ P( Q6 nbash: 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
6 ~9 t; N- F9 o! ]9 G9 [7 T" w V證明編譯成功
2 ?2 X& o+ E# q* v& e& @
" ^+ i, Y, I# y9 {" V4 t# G" C4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.9 Q2 `3 _ |1 M6 s" {
. O9 ~, N1 U" L8 A9 k8 B4 w3 t
5)把編譯好的bash上傳到小I上就可以運行了.
" Q# D9 w( W C: H, B* X8 t5 ^1 X, Y) u+ T' A' q% i, c- x, s
& O; H$ Q% B; x9 }5 s% q
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
: a' S. F: D$ n/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
% w5 G) j8 x3 C' n; _& x6 Y
3 A% C$ T- i# u* h" o
% A8 z; i6 S2 t" }8 g9 n3 ]--------------------------------------------------------------------------------
4 x6 N4 |5 k8 b3 E( P4 `) ^! I從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
' h9 L) h) o y& a" l雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
! `; L6 w, d& s4 {% l, a完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:3 K- s- |7 r9 A7 ?6 X( U5 y( n* e {
~#df -h2 H5 m7 ]* H8 r
Filesystem Size Used Available Use% Mounted on
- }+ E1 M' v) [( F; q/dev/tffsa 64424509455.4M 64424509455.4M 0 100% /usr/language
3 O7 R" ]7 y0 p E% }$ `0 O$ Q/dev/roflash2 1786706395552.0k 1786706395552.0k 0 100% /usr/setup
$ d2 X$ Y! @( Q" F5 u9 e; d, C/dev/mtdblock2 21474836485.2M 4294967297.8M 12884901891.4M 34% /ezxlocal
( }. n1 ~" W8 o, a9 g2 X2 [/dev/mmca1 4088808866744.7M 996432412904.4M 3092376453840.3M 24% /mmc/mmca11 V0 _7 h1 E# e& _# \9 R. E
/dev/tffsb1 201863462959.9M 12884901891.8M 188978561068.1M 8% /diska8 h' A9 w0 Y3 q% c& k0 C
/dev/loop0 223338299444.3M 223338299444.3M 0 100% /ezxlocal/opie V/ @7 l3 L$ S2 V; g* ^
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.
: Q- v- L$ N: E9 C" T; @. Y沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
9 P1 [7 g: r! J( S- U
+ O. f! ]0 p9 M7 S第1步.準備工作,下載如下軟件包:/ L) _; A2 G/ [, ?, K' U9 I
http://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
$ H1 K6 N- w/ X9 X5 m2 L0 z x. Y( y
% u1 F0 m K6 n. e6 l1 cftp://ftp.gnu.org/pub/gnu 下載如下包
4 B2 F. c% N0 ?/ Q6 Wbinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
& O1 A, \% ] [6 Dgcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2. h7 `( G9 z$ r, K. h9 P# C, Y/ J
8 [5 E0 c( x6 W. ] X; ]- Nhttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載
: _( ^* x4 e f- flinux-2.4.26.tar.bz2' t9 {6 S! [0 e, Y2 j2 g
a$ E1 X+ W/ y# \% ?$ p" K
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話 ?# V' C. A1 p7 b; o3 O
就可以先不用下載
: x7 W s" |& q0 J) H9 C
- Q/ I3 u) S& L8 V8 _6 m第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
/ S9 l" X6 W7 l/ ktar xvfj ezx-crosstool-0.5.tar.bz2% u7 k+ z4 P2 p
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
* w9 ^& S% }- ~+ d+ V. N9 bbinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2 linux-2.4.26.tar.bz2; d. E2 n! j2 e% ]4 E: |% r7 S+ Z
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2' [( f* [+ G6 S$ u
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).+ ~, `* b7 L' k2 Q0 f! n
' ~+ K0 e! o, L& w' B; W! V6 s
第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:( g- {1 r" {% P! d9 D0 }/ |
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
% {4 J7 `5 D9 ?! `5 z& U改成你想要的安裝位置,比如要安裝在/usr/arm就改成:, r( y' g" F3 y- L
RESULT_TOP=/usr/arm
) |' c4 T3 V9 l& y* c. f. {* }3 @/ Z9 v) c- ~
第4步.最後一步,也是最費時間的一步:
7 g5 v: A m/ X9 \$ Z: f在ezx-crosstool-0.5目錄下運行:
+ Y |. R$ G% H2 v+ c( J./build.sh
3 X* E1 u% h* W5 C2 D+ I
% s( i9 [7 c, k7 a! U4 m7 z5 ~) R/ u4 k然後就慢慢等吧...) n3 j C" k3 M1 i; l; W! H
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram |
評分
-
查看全部評分
|