Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3381|回復: 0
打印 上一主題 下一主題

在大陸網站找的資料~~2

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-4-29 12:24:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
根據網上的資源介紹, 成功的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, 可是運行的時候問題出來了,運行的時候顯示:
1 Q+ H% j. Q% @+ T# ./bash0 l$ k* o$ s3 l+ y5 d4 }! U9 Q
Illegal instruction- l8 {& k2 Z& t9 x+ d7 I
搞了一下午始終沒有找到原因.
! p; \2 f0 s% W- i3 B6 {  w. \* d2 K! [/ K$ P5 E5 i6 W) s
後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M
8 A+ `- @5 ~6 T; F5 g; N(該文件可以在eMule裡面搜索/下載)! v) V' {5 d  @% ?$ Y
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.# `# u9 Q5 |/ t& U

5 y* A) d+ R4 ^0 x+ r安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)6 g  ^! Y2 l% G+ z: d$ M
1. 在 c:/tmp 下運行:
; `) R1 w' G2 B. }# I4 I# ]3 ntar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
( G. H) L( A9 o; @; B( C: U然後在tmp下會生成一個目錄usr,下面有如下子目錄:  G" l- Z# P8 n6 R* l
arm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/
  m  r0 F( ?# V3 k# N" C  S1 I0 K3 r; z: ]' }3 d) `
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
5 [1 _5 a6 _& m6 }3 [把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
9 O* r2 p  j  W0 y把arm-linux/ include/ info/ libexec/  man/  share/
% \. f% X/ n$ E  Q: x8 W幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是., L: T, U  C3 B$ X" D8 Q% j
5 m8 Z' X! y* }  l: j
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
# X. L' J/ u" m6 z/ q  y9 [  }armv5l-linux-run,但是我沒有運行成功.
3 r$ i0 j* y7 w6 Z8 S% K5 M" J1 B2 g; |' B! J5 M
4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
: g  ~* O- t# `; R7 J5 O4 T) h1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.% g. e: o; E/ s( ~: b+ c: L
2)執行下列命令:
8 d$ q6 K- \* i2 V" Mtar xvfz bash-3.1.tar.gz
' ]$ U& ?4 K/ o6 e0 @cd bash-3.1
$ o4 W  n9 J0 P* [) c7 C./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)4 m$ a% U# q" }# z0 m
make. v; h$ L, S/ |* i/ D! p8 P
" ]" R- P& L3 `
3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
8 b, S6 J; ^1 Jfile bash
, h& j7 C3 e- }( P' j8 i! B: \顯示+ s8 T* G7 b3 k5 K! V9 u& @( ?
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 stripped3 N* s0 k0 k9 \/ c# |
證明編譯成功
; m7 }! Z& M& X; \3 e. R" v' ?' G5 ]0 m8 g& }
4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.9 g0 A3 p% i0 t4 u
: s  Y& o1 R) @0 R
5)把編譯好的bash上傳到小I上就可以運行了.6 Z; G! ]2 W7 O7 i
+ H2 n, }0 K5 |5 r- w* K

% R; a/ n' l: C0 f6 T; B$ d+ `進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
% f1 @1 ]9 y* l, o' G7 ]2 l( T& J7 ^/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
# v$ k$ L' r- \" N: s% o% n- ?/ l& U! w7 {

; A' d( D. g% a--------------------------------------------------------------------------------
4 e8 d/ _0 x, k* f0 J, ?3 N9 K從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,# T) i+ ?/ T. F7 {" }( v' d. z
雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果/ V; l$ Z6 m. a; m5 h6 }
完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
$ F) V3 c5 v3 S! @: p; \: |~#df -h% I# Z# ~2 R5 x, @
Filesystem                Size      Used Available Use% Mounted on
6 q3 }. G1 Y' i# e* s1 [0 U/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language" T1 k; ?  U4 E+ f( Q: n; l
/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup2 {' @( ~4 R* ~/ m4 P
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal7 m: E1 _( y- Z5 _& ?9 `
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca13 {+ }- Q: D6 v9 D
/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
4 @' C) _( q, R/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie# _* e9 t; g4 ?/ \3 b. g
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.
$ p* b+ y7 a* B& V0 n) d: f沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
* s* ]4 r! C% C; t$ [% p1 m& x' q! I( i& v4 ?# P( s
第1步.準備工作,下載如下軟件包:3 E$ E" T% i' l/ U2 o4 G
http://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
7 l2 d6 ~9 r4 ]5 q+ g$ p  y/ J5 L. \
ftp://ftp.gnu.org/pub/gnu 下載如下包/ L( Z0 M: f" i
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2) g5 ]( Y( q  Q0 p7 [# h! P
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz23 K6 X  S$ I; B2 Y' ?

( o# M8 c' T, K, \http://www.kernel.org/pub/linux/kernel/v2.4/ 下載5 g9 h6 W) l4 H8 W' I7 D  p) K4 z% M
linux-2.4.26.tar.bz25 V8 ~" _2 Z% p; r! M' C

% F* O: J$ [0 ]3 X9 U以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話
$ \# p0 O8 h: Z1 b就可以先不用下載
- x$ l5 U9 H; g8 C* t  M- R! q3 A8 ]7 I' L
第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
+ \. l; i# ?9 itar xvfj ezx-crosstool-0.5.tar.bz2! a3 m2 V, O" O# s
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
% ^$ m* x; n5 x" I# s1 y) L3 gbinutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2
& `/ R/ ~$ S. `, r/ k9 cgcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2$ k) d& M  T2 D6 z
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步)., w0 X( p% u4 {; f

9 \; N  N3 l* Q  J第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:# H1 P! `" U% c6 v+ Q0 P2 O6 c
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
+ s; \+ w4 m; U6 a( r- \6 H改成你想要的安裝位置,比如要安裝在/usr/arm就改成:, x: K, G7 W! J) ~! V9 E
RESULT_TOP=/usr/arm
8 R8 m: t8 o4 P% D
2 W& H# V& z2 `" K0 m: }第4步.最後一步,也是最費時間的一步:
) K# _4 U; g5 f" U7 W* G' @在ezx-crosstool-0.5目錄下運行:5 h1 _6 Q) R5 T: B" G8 l
./build.sh
  R! }4 j+ g1 U( D* v, Z1 h) h! y/ M4 g
1 l3 h" W) r; D$ D/ b5 ~然後就慢慢等吧...
* ?3 x7 p' u" f: h! a& Z8 p整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

參與人數 1Chipcoin +3 +3 收起 理由
masonchung + 3 + 3 感謝經驗分享!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-4-30 11:40 AM , Processed in 0.111006 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表