Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3581|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:8 R3 w7 c+ s) P- D8 o: i
# ./bash8 N& y- I4 i0 [5 n5 h% p8 m
Illegal instruction
/ @4 Z3 {' W: k+ F& N, `搞了一下午始終沒有找到原因.0 c: ~+ h/ L4 Q2 k( h

& d: i. J" B; U5 c' k2 u後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M
/ n$ I9 {6 g% q# G9 w2 c(該文件可以在eMule裡面搜索/下載)
+ X  R- E, ?% v+ N$ q經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.
- J8 a4 |( ?: _! D# Y$ G& E! v! ], F6 p6 O' B) e2 P
安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)
$ I3 Q- l) s% T6 T+ P1. 在 c:/tmp 下運行:9 \  p4 K# k+ h
tar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
8 ?. H; `( R  k, b) R: G# l# \然後在tmp下會生成一個目錄usr,下面有如下子目錄:7 E7 l, [# O8 x( l" T! ~# @  }+ a5 r% H
arm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/; }' v+ Y! Q4 w: v# J, J: B/ }

! i8 j0 O. z- p6 j) `; F2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
+ L9 z0 ?, y+ _把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
$ W1 Y8 ?! j- ]5 ?把arm-linux/ include/ info/ libexec/  man/  share/
, P& v* D) W9 y; v' T幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.) m. e9 ?. X' B5 d
5 U! n# \# q3 |/ f4 {1 M! ~
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器$ n9 T' i# C( F) J+ W* O4 n6 ]
armv5l-linux-run,但是我沒有運行成功.7 o: w& J, Q5 G2 f6 a. R  k) z
  E/ U  S: X, X$ j! E8 s. @; s0 q
4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
' k4 ^) m# w2 s1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.
' n5 M5 `( _' R& d# @6 s6 ^2)執行下列命令:  P+ j  `* ]! ?" J/ ~% R4 X1 T
tar xvfz bash-3.1.tar.gz8 V, q- D+ Z" h; {) {5 E- T
cd bash-3.1
( k& p5 [8 {$ S8 H/ M1 {9 z/ p./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)
9 @/ o2 R4 F3 m3 t6 jmake4 J" d% f: S/ C% u$ w, x: |2 f
1 a- C9 o% I: p* f9 C
3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
/ E" q0 L. h8 c, @5 afile bash+ ]2 e1 k6 H4 O# s; N' X2 I
顯示
- g2 e; J& _$ f9 |; L* ^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! e' k1 y' V% F  _2 r- I) B
證明編譯成功
+ N6 Y, _2 o6 _4 u6 H: c
3 v5 U3 T0 ?/ Z$ ^6 _6 z4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.
6 r) A1 F! U* M: U+ b0 N& |1 S% {0 {! o& `, `5 f6 u  E" X( x
5)把編譯好的bash上傳到小I上就可以運行了.: f% y2 b, q( Q

6 `. ?& a" O$ b1 S. d/ O, p% C4 I3 ~; Q' x+ u, u! B) O! R
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I# G3 O3 R+ l' ?0 l
/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?6 V, X& }; E& q
. n* I: g+ Z" A; ?, W' r- K
! C+ f) S8 s( e/ l/ f1 Q
--------------------------------------------------------------------------------
; S" n# i: D: A$ o( _# h; x9 P從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
/ v; L2 b& R' Y  z$ F$ R雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
( t( s3 Q+ U4 ^; `) |# h- y完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
6 m$ _/ u  N- A~#df -h! W" |* B8 X/ ~+ z* L% F$ q9 k
Filesystem                Size      Used Available Use% Mounted on9 n: p5 [3 a- l8 X- n0 J# n
/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language
: o- f, i' v) O2 i" ^/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup9 ~/ N  }7 ]$ e& T6 ]
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal5 A' ~! q5 z9 Y/ l8 q, q  m- t7 h
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca14 u3 @/ I7 t. q
/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
( c4 x6 [7 u, ?0 X# g/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie! E; m3 {& Y8 Z4 T& `* s3 i; v
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.. U/ I* P+ r/ {( a: Z" c
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
- Z# j! x- G" C* n/ U: R. w
  l) |$ Y. _; |' Q! Z0 h( B第1步.準備工作,下載如下軟件包:
2 z3 C/ L6 k% `1 S! Y/ B2 p7 Z6 ]http://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
/ ]. ]$ ?3 g5 s& ?. ?8 k
" @  l, {3 e( |1 qftp://ftp.gnu.org/pub/gnu 下載如下包
- V/ A- n0 K7 P1 K' w8 pbinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
/ k0 i# @1 r" ggcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
2 P: Q" F+ @- X6 ?
4 V! N$ c+ R. u! Lhttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載
* W' Z8 ]- U# ^* g" `linux-2.4.26.tar.bz2  v3 H6 e, r6 L! i/ |: C
. s! M' K. r. a3 ?3 L& C0 l- K/ r
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話3 `& }+ H+ j) R3 C* b
就可以先不用下載
% A) U4 g; ]3 N! k& j1 H' R. b. f6 D0 R7 @
第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
3 R! ?! i5 q+ P$ U; B; x- x9 ltar xvfj ezx-crosstool-0.5.tar.bz26 y4 s" O! ?6 x  X& ^- u( V* h
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:( U$ g' q" k7 P0 v& _3 @: n6 @
binutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz24 Z' E* S3 y. i8 c2 D" [( h  ^/ ^
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz28 e: W! u5 ~8 I7 D8 s
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).' f, o; ^; ?) W  s* r
0 n: b! s+ N6 r- ^
第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:
1 y& }' b9 V0 S: TRESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt. ~9 o  j9 q, K, A$ L3 a% Z
改成你想要的安裝位置,比如要安裝在/usr/arm就改成:3 T$ E7 n& m7 p1 `
RESULT_TOP=/usr/arm' a- N. H6 ?: @* B
" P( j! U2 \1 z4 I/ f$ p6 R2 c% T
第4步.最後一步,也是最費時間的一步:
+ n1 G- k$ ~, Z2 E在ezx-crosstool-0.5目錄下運行:
. B1 ]9 T% v& f. a./build.sh
' F6 B: ]3 d# o. e# r' I5 n9 W* f# C, I- `! b
然後就慢慢等吧..., J& }- z- H$ W6 z. l
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-12-28 06:46 PM , Processed in 0.157009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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