|
根據網上的資源介紹, 成功的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, 可是運行的時候問題出來了,運行的時候顯示: w4 F' J3 G. \9 F
# ./bash; R9 N5 L( z9 ~7 a& |( E4 k0 _) F
Illegal instruction1 l5 y9 `. Z. `; C
搞了一下午始終沒有找到原因. m% m8 f! p$ K8 M/ p, S
. T6 P! T7 Y0 o% n+ y0 h/ t! `後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M
/ Y* R8 r, T3 ]7 `" ~1 Y/ p(該文件可以在eMule裡面搜索/下載)
0 r" R$ E B$ I8 Y經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.
! ~$ c$ J2 \$ {- C4 y, q$ W7 }
O6 z, }+ }% I/ v安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)* D0 r# ~1 l# `) F/ N+ n, K
1. 在 c:/tmp 下運行:3 O0 r% K, x/ B1 Z8 M/ n
tar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
0 T: e+ h9 A C/ [/ p然後在tmp下會生成一個目錄usr,下面有如下子目錄:
" ]" I( B7 P% u6 R+ u2 ^( {! Uarm-linux/ bin/ include/ info/ lib/ libexec/ man/ share/5 B; ]( k) F: o2 h; d
2 s& b$ `- H$ R" n7 r" I
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;- r) u. M+ }! n$ ~' @2 u
把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
0 R4 p$ w, I1 H0 h& K" R$ Q7 ?把arm-linux/ include/ info/ libexec/ man/ share/
1 a2 x4 `% | X3 o! `幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.
+ f& Y4 J! w* R3 ?1 @' y8 m$ S$ g) {( V+ m' u1 Q6 B" h
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
2 {* J" Q' n6 E) u/ ?8 c; jarmv5l-linux-run,但是我沒有運行成功.
) Z# M' i1 N4 a0 F: V: ^8 J R( W, f/ |8 H; v' I$ I
4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:3 I# J6 U* L1 y4 T: z8 {2 N
1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.
9 b' R! M6 D3 r9 V7 @2 X5 {2)執行下列命令:2 L% s. @- u5 N n
tar xvfz bash-3.1.tar.gz- b4 N( ^( L6 C! P
cd bash-3.1$ e# s# Q8 N& I* ?3 L
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容): P- \5 ^9 [1 E
make
- y: l2 C" x! n- w& N5 K( s! _/ Z, u$ D5 N! \
3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
/ d& N0 p, x: F$ H" Ofile bash
% t* m8 H: [2 ~/ L, h, A+ @顯示
3 {; _2 A; }% H A! v! a3 wbash: 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
; Q# V+ R9 a* N8 g3 f' e證明編譯成功
. W. x# c' b1 x v5 T. _3 V
& I0 [; |& ?; o4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.
; A, Y% O; Q# V# `* | v4 s6 M2 `: `( l# x' z8 D& \
5)把編譯好的bash上傳到小I上就可以運行了.& W3 G7 }/ U {" i' P/ R, F# X; u( c9 b6 p
# B: x8 m$ J* H: h( t
% R1 [, q0 |) _% P) b* n9 Q. Y進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
4 m* t% j0 O. Q( c/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
. |; D, X# T! g+ U) O+ F) {' f, t1 G, m) g
+ X9 E/ H9 n, q* S% w
--------------------------------------------------------------------------------
: X# |# h# n( I3 `, E( V4 a' s從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,. q. r, I" e$ r. {, W e
雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果. |+ \# \1 j5 G
完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:0 y" R& X8 A" M/ z2 K# D
~#df -h# Y5 V. `0 @$ O! F8 s
Filesystem Size Used Available Use% Mounted on
2 `$ E% O) H- q* D/dev/tffsa 64424509455.4M 64424509455.4M 0 100% /usr/language
) M" \! t- V* M! M/dev/roflash2 1786706395552.0k 1786706395552.0k 0 100% /usr/setup
4 g R( g' \' a/dev/mtdblock2 21474836485.2M 4294967297.8M 12884901891.4M 34% /ezxlocal% z, _2 a! R0 y+ P- n& G+ W
/dev/mmca1 4088808866744.7M 996432412904.4M 3092376453840.3M 24% /mmc/mmca1
/ q ^% r# P" v/dev/tffsb1 201863462959.9M 12884901891.8M 188978561068.1M 8% /diska+ m7 l( _! C2 B: [, t( Y+ Z& k
/dev/loop0 223338299444.3M 223338299444.3M 0 100% /ezxlocal/opie8 ~4 X7 E2 ?/ W% H* o
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器." f# t/ R' s- `! `+ i
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:4 H4 X ], q) g2 C8 C$ q6 T
" k- D4 ~) B/ b* z# S& @
第1步.準備工作,下載如下軟件包:
4 Y% |6 q0 L" A& N5 Uhttp://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2 8 Z+ A* b- W$ w$ M+ ]! N
$ ~4 V; v" ?9 K! o ?/ r6 Uftp://ftp.gnu.org/pub/gnu 下載如下包1 N% C2 o8 z7 T" r6 e2 [0 _
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz20 o( o) G0 l* p; [/ K9 T' N: Z6 x
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2% z: @* l* \5 N2 s% C
8 Q1 ^8 K% ~7 h4 h/ z" Rhttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載
2 O$ ^% S. D, G. Rlinux-2.4.26.tar.bz26 U% U9 @' h; C; |& @2 s/ A$ } X
* g% E+ H' v# `7 d% R3 X0 \2 e
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話# `. d/ C. V' N' E! J) i* O3 \
就可以先不用下載
2 j) ^; Y* v9 R+ v1 B& f- |$ _: E7 k# I( @8 A, C1 X; @! v
第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
# t+ z! l) w) k& Y7 K Z( |3 u( I% Ftar xvfj ezx-crosstool-0.5.tar.bz2
$ c" r" Y# S; E! ^3 ?會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
9 Z* v2 c6 G$ `" }. C+ O wbinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2 linux-2.4.26.tar.bz2
9 v: G- z3 E2 p, Wgcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2 r S3 A0 Z4 m( ^
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
. p" W- ^+ y# l4 t2 Y- i/ h6 [5 }* C
3 d$ f+ K! N3 y) ]第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:
. c$ q% p) O, F$ L iRESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt% W9 U) O- v7 r" R
改成你想要的安裝位置,比如要安裝在/usr/arm就改成:
/ S1 h, [& J9 |: [# oRESULT_TOP=/usr/arm" _% ]& G! [6 \$ W. m
% L, @" a! t* l! Q第4步.最後一步,也是最費時間的一步:
. K: V" p! y8 C# L% N0 d0 r' i在ezx-crosstool-0.5目錄下運行:
. e7 O+ V9 _: Z, G$ ]! Z./build.sh
: K0 u, U+ F3 b0 c, b9 ]/ }+ Q/ b$ X& y$ x, z
然後就慢慢等吧...
) s8 K3 f6 s( O& E整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram |
評分
-
查看全部評分
|