Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3813|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:
4 {. c+ H5 l9 d1 P+ h$ r# {# v$ @# ./bash
2 E/ Z- h$ L9 a1 `! EIllegal instruction" A# _% r4 S$ q* i) m. |' K
搞了一下午始終沒有找到原因.: D. s6 I( @6 C" \; @7 W. s* K

/ n5 ^8 t7 q5 j後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M; ~6 E9 O) z; U7 d
(該文件可以在eMule裡面搜索/下載)8 P( U9 u( P# B* U+ v$ p
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.- Z1 b7 S* M. |$ ~# D; c

# g- A# y/ l0 z4 z安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)
# c- p0 [) s3 ]+ l% u; M' W1. 在 c:/tmp 下運行:
1 K: s+ c  J+ j+ t- L  |2 i( gtar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz; c- T- I' u" U! ?) a
然後在tmp下會生成一個目錄usr,下面有如下子目錄:
& j7 O3 @: Q* A, u) h8 \arm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/3 k' ^' {. D! g* P0 T$ Q! [6 T; I

9 O( a* D6 U* S2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
  L& |6 \; ]& n( B. j* B把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;/ {) V8 p2 {; _! K& T  i: C# h* A
把arm-linux/ include/ info/ libexec/  man/  share/
) T* H- v, M0 W, g5 v- a: X4 T幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.
5 g$ M4 Y) U2 X
" s9 e+ V8 q3 T7 M% g3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
, E! D  o0 t. R4 x* n- x0 Iarmv5l-linux-run,但是我沒有運行成功.
+ t: @3 q- @$ O. q0 q  r; ^! j( i
0 v$ q/ y: p8 Q- w( B: y4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:5 D: [) \6 y8 l* S- Y: I" P) n
1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.
2 ]6 @- W6 }" k2)執行下列命令:$ ^7 }  G. r3 W
tar xvfz bash-3.1.tar.gz
) S- |! \; h8 R' Q" u; M: }cd bash-3.18 X  H+ _/ `3 x# H
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)0 l. Q% A2 a' X  {% w; N" k4 P$ S8 k
make# ]8 }, @' G$ l* p$ B, y& z. ?

  G7 O1 n2 B+ g  T6 f2 n) r3)編譯完成後會生成arm-linux的執行文件bash,運行命令:6 b: w  ~+ p8 ?8 Y! i4 j: A
file bash
( S1 O- b) @6 i顯示& I+ ~& o5 p$ p
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* a. A, v2 Q0 A6 X' a
證明編譯成功8 G4 C3 J+ B% y  F( Z( H9 L% `. c) b

; P2 {1 P$ C6 m$ H; m% T8 T# D' C6 `4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.
- y3 z' g8 n9 Q6 T+ P; ~" _2 f* E8 Z
5)把編譯好的bash上傳到小I上就可以運行了.1 t% [: b: {7 j! J7 |5 c0 G
  a. H9 {% b5 M/ f
4 i% }6 D1 i1 k8 _5 I) b
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
" B6 i- z. B4 @* S/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?' [1 n& N/ N/ F9 U' M4 B9 C: M
' r' e- l1 X) `! i/ \) H

# m# m, u, Y& z--------------------------------------------------------------------------------
- X& a' V) {/ Z5 M從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
& }2 u: F' j0 g雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果9 K- V5 a8 @/ y( P
完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
: r! t3 Z: z5 T( Z~#df -h
4 S( F4 k( L. Y" xFilesystem                Size      Used Available Use% Mounted on# {! I/ E9 M+ h3 L7 ]2 v, a
/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language  }. t  \; `6 r0 [
/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup
, K# \/ c$ f6 F% f/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal2 m2 q: h$ i$ x5 ^
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca1+ K# J+ m) p! k4 ^% N7 A' q
/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
* K$ i' I5 V# N1 n/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie
9 n4 d& T4 D- |估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.
; j% Q5 h' Z/ `! L9 r( f+ L沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
% k; o% ?) F5 O4 m9 m4 h, h$ `. k7 @9 {5 T4 L% d  x; o
第1步.準備工作,下載如下軟件包:
1 @3 ?% D# F3 f5 o: Whttp://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
8 |) p1 ?" ?! T1 B7 B( ?
" t, J; I4 d! W2 `ftp://ftp.gnu.org/pub/gnu 下載如下包
/ B3 s' W2 _0 S+ A) Zbinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
! u* u' z3 j! @) G# V. W# ugcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
8 x! K- |$ m' r
$ Y( w  t4 A/ Fhttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載
9 W) H# W( u( B( U- _0 f1 Ylinux-2.4.26.tar.bz2
# r0 l- `: \3 ^6 q) n( c2 u4 f* }4 b1 Q3 b+ t$ x
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話' H% }7 c' }0 P/ a' Q. t
就可以先不用下載
: O( Q: z; \) [- y& {% ?0 X
' O; A3 V" |& c4 Z+ e- ?第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:1 L5 b9 t0 A, a# ~
tar xvfj ezx-crosstool-0.5.tar.bz23 y' l8 e+ t4 g( Q
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
$ q7 w2 m+ k7 Q( L7 Q: r6 rbinutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2
" W4 W0 g4 u: C+ d" Rgcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2# t2 c, O; D: C
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).: \# J3 F, `$ Y, t

( B( A" U" q! @6 |* u8 e- U9 ?第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:. b- S6 Y! A6 ~: n# z, P  H
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt! D  J* u+ j/ b& N
改成你想要的安裝位置,比如要安裝在/usr/arm就改成:+ |; G2 q, Q: x1 o4 C+ }) G9 W
RESULT_TOP=/usr/arm* w* v$ {  ^+ Z; B5 O5 N

* q$ f' _( r3 Z! f第4步.最後一步,也是最費時間的一步:% E7 q/ h$ G" m9 e" U
在ezx-crosstool-0.5目錄下運行:3 N( q/ X+ D& Y- m
./build.sh  s, j. b5 |6 ?* k5 w8 P8 O
3 V5 z' y! W- d
然後就慢慢等吧...( j8 H% o! }1 u% A' g8 q' x
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2025-4-3 09:11 PM , Processed in 0.268016 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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