Chip123 科技應用創新平台
標題:
在大陸網站找的資料~~2
[打印本頁]
作者:
chiohsin
時間:
2008-4-29 12:24 PM
標題:
在大陸網站找的資料~~2
根據網上的資源介紹, 成功的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, 可是運行的時候問題出來了,運行的時候顯示:
( n/ v1 s ~0 |+ k
# ./bash
( g! ?, h# x$ N. t5 ?
Illegal instruction
% W4 \3 [' Y+ A& X2 J( e
搞了一下午始終沒有找到原因.
# v9 A8 n" c' X% ?3 T
& s# T. j$ J {! i
後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M
$ s3 k. l( }. g
(該文件可以在eMule裡面搜索/下載)
2 t1 B) W" v. v Q: [" P" N! m) B$ Z
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.
L4 D8 _2 h0 m3 w
. S# Y* K T$ G) @
安裝的步驟如下
假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)
' p0 S7 P) C8 e5 d. R- U) t }0 o6 m
1. 在 c:/tmp 下運行:
$ g! R# p7 G& }* V! a6 B4 ^
tar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
! {* V" Z4 N8 b b
然後在tmp下會生成一個目錄usr,下面有如下子目錄:
1 f* I" y( Q6 C; L! n+ u# h
arm-linux/ bin/ include/ info/ lib/ libexec/ man/ share/
; _, v3 S* s. | n2 z' h2 b$ m
- t6 V# Z9 s6 l9 m; u5 V% ~* q/ J
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
- q6 f& T9 K! T% f0 ~
把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
* R2 q1 u- O# P: J Z' H& X+ o3 V
把arm-linux/ include/ info/ libexec/ man/ share/
6 q" U7 y2 W I' I7 s
幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.
: B5 {; |; j" y/ l
9 v2 |, w5 n( D. R& v
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
3 _- A8 e. p' F, ?2 o
armv5l-linux-run,但是我沒有運行成功.
7 E- q: l4 Q: N* x" B- {/ [7 ]
' H( }1 K# W& A+ r5 f! h
4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
& O$ i( |/ g7 C8 }' L6 ?3 Y
1)在
ftp://ftp.gnu.org/pub/gnu/bash
下載bash-3.1.tar.gz.
& k( m2 ]# Z n7 w j0 H
2)執行下列命令:
$ X {8 s! B; m
tar xvfz bash-3.1.tar.gz
* i& z L9 Y# V, E) ?$ D, I; o
cd bash-3.1
/ R& O# C& [, g# C
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)
+ }7 d- ^; X% H @2 F. R
make
& M! ^, U0 K/ R, ? {% ]3 W0 {7 d
$ X# g$ X- I2 v V; i; Z4 w) x
3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
$ _2 G1 c4 j9 I, D c
file bash
, p& X0 l4 c+ |% }! P2 c3 N- B9 G% C
顯示
0 e3 H, o" C$ u9 h6 u' F: Z2 I
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
$ |9 c2 d( t3 ?: W
證明編譯成功
- _5 L7 l8 ?) c8 c& M
0 h0 T& Z) h3 p$ B. Y& Z' Z
4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.
( S8 A [: V, A; V9 B
( n$ g* A, g: V- [% s" `" ]: `
5)把編譯好的bash上傳到小I上就可以運行了.
0 m( c C# |6 i5 f" y
+ |" K; Y! ~/ h D/ [) F: C# V% G5 B& e
8 F! q6 K0 G2 D5 [3 F" T
進一步的想法:能否用busybox(
http://www.busybox.net/
)來代替小I
( J- T6 ], |4 ~0 D ]% H
/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
! y& q. q, `/ ]: ?2 e- ]- z$ @
[" O1 {/ ]1 t1 | x& D$ J! Y7 I
& g% Z. ~1 n' ], l2 V: `
--------------------------------------------------------------------------------
3 h* A2 T9 r4 D9 m, p. t! ^ b. E4 k
從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
! B) w4 V" o, i, K# u8 i, n
雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
5 {% b/ O1 w5 ~
完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
3 n1 I; c8 A8 Q' w7 ~
~#df -h
- i/ K. h# j/ J
Filesystem Size Used Available Use% Mounted on
6 B/ ~. P% [% f+ f" x+ w
/dev/tffsa 64424509455.4M 64424509455.4M 0 100% /usr/language
S1 L f5 h! R- j2 V% W
/dev/roflash2 1786706395552.0k 1786706395552.0k 0 100% /usr/setup
9 R; o/ l) O9 O' H' h5 _- e
/dev/mtdblock2 21474836485.2M 4294967297.8M 12884901891.4M 34% /ezxlocal
. C8 b4 J3 `0 G) u
/dev/mmca1 4088808866744.7M 996432412904.4M 3092376453840.3M 24% /mmc/mmca1
# ?1 E% d$ d% N& t! ?$ N( d
/dev/tffsb1 201863462959.9M 12884901891.8M 188978561068.1M 8% /diska
7 q" [/ X) f+ `5 X. h6 |6 X6 V
/dev/loop0 223338299444.3M 223338299444.3M 0 100% /ezxlocal/opie
' |+ [* t8 ^) N( ^/ n; k9 F+ N% |
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.
! @" ^5 Y0 B6 q. y
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
! Z# i1 c2 M0 J5 v; m
9 e3 _+ h) R: q- t2 w
第1步.準備工作,下載如下軟件包:
- @; n* D' ?& E
http://lsb.blogdns.net/ezx-crosstool
下載ezx-crosstool-0.5.tar.bz2
; [0 B: k) @4 M% \. Q$ [) s( V; W
# E% l; q4 \" _+ H# o/ ~, W
ftp://ftp.gnu.org/pub/gnu
下載如下包
- y0 S) q$ H, V- {9 R
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
( ]6 S+ |4 n% L9 N) H
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
8 g! ^' T) J: c9 U( R
3 {+ s: c8 l7 M& n# K3 D k
http://www.kernel.org/pub/linux/kernel/v2.4/
下載
4 @2 D% `& k- L+ C/ U! K
linux-2.4.26.tar.bz2
* f4 B* ~1 D, a7 {
, G, l/ u c0 b; k2 t
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話
' x: Q# q K' j7 t( L* Y/ ]) E
就可以先不用下載
2 q; W+ {7 i$ m( z; z5 j
\' m& q9 \* z7 Y' o
第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
+ }; A9 D- h! G
tar xvfj ezx-crosstool-0.5.tar.bz2
8 a4 u3 v0 I% k! v
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
5 k. V' |# A; w& L1 u+ E
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2 linux-2.4.26.tar.bz2
( Y' E N2 n A- a( r
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
$ ]9 V& K* }3 v9 a4 V
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
7 T8 Y( P3 ]+ W9 W J" [# \& r5 a
U H& g1 O. i# m7 C) a
第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:
6 n+ k/ c* O' t
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
9 G l% F8 Q" p
改成你想要的安裝位置,比如要安裝在/usr/arm就改成:
, X. f4 i- }, y, R( S1 u3 U* ?# m2 @7 j
RESULT_TOP=/usr/arm
, c" U: b( M2 S9 j: E
6 D1 a0 N0 f1 R b/ {4 Z* h
第4步.最後一步,也是最費時間的一步:
; G% u, A$ a2 f; J; Y) J
在ezx-crosstool-0.5目錄下運行:
; S/ J+ W) v0 `; L6 r' j
./build.sh
0 w0 w/ h/ S9 Z; n+ |7 b
0 r# x/ `0 G+ e8 P
然後就慢慢等吧...
' d# V# f; V T/ [. e5 j% l
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram
歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/)
Powered by Discuz! X3.2