Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3391|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:# n8 [, e5 Y4 s
# ./bash
# W  ?1 b! u# i* ~* K% n  JIllegal instruction
. F6 ^" q$ C# \& y1 g$ a# e- P搞了一下午始終沒有找到原因.7 X/ @' y. b9 H- m% Y3 n

1 l5 ^& x$ j. }' {2 P5 Y' Y後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M4 O, [$ }6 R/ M) J
(該文件可以在eMule裡面搜索/下載)
: v2 g; ?3 a/ @) \, y+ h. {經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.
* F% \1 G$ B/ o8 B) F  V* J8 a# F3 X) M
安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)3 q% Y, c  I+ ?$ W
1. 在 c:/tmp 下運行:
& u2 A& m% }4 c: C9 ctar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz6 |+ d( c# B# R; \4 h
然後在tmp下會生成一個目錄usr,下面有如下子目錄:. B& {* M" q+ O( n
arm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/
9 v* T/ E5 M9 w; c+ A! ^4 u6 w9 T: J9 ^! D, @$ I4 E
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
: P0 N0 K# B9 ?3 I8 Q5 v  p把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;) Y/ c1 ]* z+ O( f9 Y  U# a5 G: U
把arm-linux/ include/ info/ libexec/  man/  share/5 L: g: Z8 Q3 i7 R4 y
幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.1 H9 p- p0 u+ W" l1 W

; o  X; L# C" e5 D1 t3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器1 m/ }3 |- X# t, |0 s( C" h$ T
armv5l-linux-run,但是我沒有運行成功.7 i- g7 m* x5 _- [3 x; h; y

2 j5 Q& u0 ^9 b9 I# ~( s4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:" s1 `2 H% }. K2 h! y
1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.% a8 [3 F% Q8 e2 C5 s$ G
2)執行下列命令:" V; Z; q1 o( ?
tar xvfz bash-3.1.tar.gz& g% S$ |1 J( S$ q
cd bash-3.1
) S' w- {5 R2 _( H% g8 l* e./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)2 O* T6 k% H) Y1 J  b
make
/ O9 z" V3 x/ C. a0 L; l- E
' S3 O8 A# v7 @8 ]3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
: ~4 L; }  l6 _7 jfile bash, M. |, U/ _$ a' P# V
顯示
, I2 V( I6 G; \! d& fbash: 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+ z2 y% a' c: Q) g: t  A
證明編譯成功
* g' f  [4 M( l* Q+ B4 [) W3 l4 m! w" |3 X' _, c4 T
4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.
6 R% ^' K* [$ Z# J+ d" M( |. \/ g, Z1 r
5)把編譯好的bash上傳到小I上就可以運行了.
6 ~6 @" u* G% I9 i% e4 t
8 M5 ]) N( G0 B# u6 I1 c1 ?6 _+ ?5 p, g5 K4 ?- Z# y! Z" @
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I% Q" {; q  c1 z7 r  {
/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?* [  @) }- M7 B, d

. w. ~* I1 b* z/ s* T$ Q) j5 u+ b0 O/ }. A6 ]# m
--------------------------------------------------------------------------------0 S' Q- X7 c% M
從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
9 |- ?9 D* j4 ]* R雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
2 v% g+ W: h3 ~9 f8 N! }0 l) }完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
9 x0 i9 b+ ?5 ]: i, ^~#df -h5 @& ]  V. h8 J/ C1 q( y$ ]
Filesystem                Size      Used Available Use% Mounted on: G/ D: ~" ~# h3 z' I  ?0 W. h
/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language9 |" s$ g  H7 o" I
/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup
. l. h8 ]; g# E  M! S7 E/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal, ]3 O! T# L# Y( m& Z! |5 e3 w
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca1
0 k8 d  Y5 B# P2 E# O/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
  k8 j: l" g- J4 N/ Z/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie7 R' z* `# h; Z, N' y8 R
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.4 S6 q1 `. ~2 m6 z. c
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
3 k* B, C; \8 A$ r$ r: I. q) N; B0 i+ j! C" u# ?( u) Y
第1步.準備工作,下載如下軟件包:) E, _: g# M3 ~& a4 D
http://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
2 H$ R1 g8 v& c9 `( L  b# I. ?* j" c* b1 G* |8 ?% Z" j, i
ftp://ftp.gnu.org/pub/gnu 下載如下包5 G" A& X5 N6 X5 t2 o" O
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz27 L& k7 K! s* R* \
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
7 c. }: ]3 O' k8 h- E* H
/ g7 ^% S' M4 \' T( {http://www.kernel.org/pub/linux/kernel/v2.4/ 下載+ a$ U, p  C. c8 U, E- `; G0 r
linux-2.4.26.tar.bz2: V6 ?9 }& v6 j. B( e! I

. h0 V1 o6 Y- o  _( X以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話
1 A2 Z1 s  c2 s就可以先不用下載3 p1 I* K. C2 p( I
" V6 a$ V4 w1 B5 ]0 k# e  }
第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:1 x* }) G$ H# W4 R
tar xvfj ezx-crosstool-0.5.tar.bz2
  `# H$ a- V% L% g- g8 j會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
( @- M2 m. v3 nbinutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2/ d4 n: k. g6 ?( j- a
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2
% _  O5 u) E( J' z9 G拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
# W3 F  `7 X, {/ X
% N  ^% i( V4 L0 W8 w) h' n0 [- E第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:7 r: b- @6 e1 c: K% r1 t
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
" D) P4 T% \( X: \# q改成你想要的安裝位置,比如要安裝在/usr/arm就改成:1 E) S. q. i  C  m. S) ^2 a
RESULT_TOP=/usr/arm) q& W: I" b, s
0 b' ?4 s( u' F9 J) ~: J
第4步.最後一步,也是最費時間的一步:& N5 @3 Q, l# ^& B* m# o, C8 M
在ezx-crosstool-0.5目錄下運行:
1 ^. u2 ?% v+ t) [- A./build.sh
! S* a' @4 ]7 a5 H( J5 }7 R8 D0 h, n( p( u- p2 f4 S* ]; y
然後就慢慢等吧..." r2 Q5 z1 [$ G6 E+ O
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-21 07:10 AM , Processed in 0.106014 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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