Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3382|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:
: O8 M: x7 L' h: O4 v* b# ./bash1 _/ h2 j. F8 O) W
Illegal instruction3 |8 X. B* |& s& i! S  N
搞了一下午始終沒有找到原因.* \& c% y- p; c  k( R' Y% q5 U
: d4 y; i9 O" }* B$ U% ?- A/ j2 o
後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M) s1 u" q" G/ ^% O' P! ]
(該文件可以在eMule裡面搜索/下載)
# Q% q& u& C# X; v6 Z+ N1 Y, _" x經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.
4 }/ A6 _/ G0 i6 H/ e# i' V6 `
, U* _7 u1 X0 l" `/ A, N, V安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)
  g4 z& I- i' Q3 E1. 在 c:/tmp 下運行:
9 g/ Q. f5 n, U' \+ e. \tar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
) K/ U9 a/ i# t1 z5 y( L" G然後在tmp下會生成一個目錄usr,下面有如下子目錄:. n: Q  M. V. T5 k: A
arm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/
3 `6 \# Z# p3 g" L
0 a# i! e) [! r  A. m2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;+ H* |6 `+ {5 W4 g* x
把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
8 F) p' P- F( e( v8 T7 y1 N6 |; {把arm-linux/ include/ info/ libexec/  man/  share/0 j3 ?1 v, z/ s9 R% ]! x/ y
幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.  G! @- p$ L7 j% A1 j. H" E

2 c0 E; a+ R& }2 {& G3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
: V; E& A, T6 Rarmv5l-linux-run,但是我沒有運行成功.
5 k3 ?6 V% J  A/ D/ j: M! k5 @
8 v( X% H! ]. t7 i" W% D4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:1 ]* c( ]0 p5 W+ N+ n
1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.
; v" |3 b3 v1 O4 X* Z2)執行下列命令:
1 O) [2 T1 _+ b) S- i% Mtar xvfz bash-3.1.tar.gz8 R& j1 [- J* e. j9 Z' c
cd bash-3.1
, v  a1 _; R6 D./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)
8 y" v6 j7 @, o9 X4 J% E" n& kmake
0 r" k! q& l! v* g1 b
% m, l7 R8 h: l& z" I% e3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
6 I. L3 F& O, k) E6 F: ~" [file bash
$ S; [9 d  \" \2 M5 s7 H顯示
) N. M( o/ |4 H$ Z; Vbash: 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 stripped1 F% r$ k4 _7 R' p+ E( F$ Z
證明編譯成功
; Z0 d0 I( ~- G# @0 X. w2 o# ?. M" E& j! b& M/ W
4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.
+ i" E- n) M$ K6 A9 t
2 |$ U- x5 g, ?5)把編譯好的bash上傳到小I上就可以運行了.
/ ~. e  X% w( U' t' F, R3 C" E7 }4 O% P0 D% q" W7 W- n

  e3 m: }) m0 D" A( y6 |進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I$ O% I, M$ {: q( {: d7 y4 R1 t: j
/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
9 \7 H/ ?. I9 ~2 b/ P1 e( z: A; N
1 m! M7 T% @: l7 G4 ?8 N
' C" E3 @0 Q$ D' H" F1 k--------------------------------------------------------------------------------" t+ @9 D* r, g  f% L
從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
: o# E- T: Q4 _1 l# e. v  a雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果' D4 c) l) W! s: a3 c
完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
2 R8 w, }1 T+ g: a9 b~#df -h
& @% p- L) W2 h2 y+ w- ?5 ]Filesystem                Size      Used Available Use% Mounted on
7 V; e- P" m/ R" m6 G/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language
# j- k0 |+ ~7 l# R9 U* r# R/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup& T2 }. g2 ?& ]1 _4 E/ K8 C# h
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal- Q( ~' [) F, [. P9 C1 i
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca1: s9 x; \/ q9 B. T, F
/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
' f9 P  ^; a$ }# q/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie/ x) ?1 f, [  A0 k* ~& x
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.6 o0 M( K8 Q7 A  a) ]
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
# N$ f  C7 z' F
4 A: G- T9 S. R* f第1步.準備工作,下載如下軟件包:
4 i& S0 H9 [0 Q! V* M3 e. o4 Fhttp://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
1 s1 C% @- B% x- }( @( K; Q6 A
: B2 Y) a# b% _3 cftp://ftp.gnu.org/pub/gnu 下載如下包
) L! M3 ]! o2 i, Z4 dbinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
) P* C+ ?- s( H# H, W% ^* j: Rgcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz25 u& b' P0 F) Z1 }, v+ `8 {9 `
4 g# S" B  K9 l0 E1 q
http://www.kernel.org/pub/linux/kernel/v2.4/ 下載+ ^0 L- P; n" j& m* _! a0 }% l( s
linux-2.4.26.tar.bz29 E3 z( ^$ y3 u, o
; c/ ^* i5 ^8 `$ i8 C0 f
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話
1 H' |: V3 c. L; s3 R就可以先不用下載
" j$ r, L" T% Q( Z( B
5 M& K- }7 u* O% U, U7 ?. x第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:, F6 I  N, n3 q6 U. Q% V' b! m; ?7 [
tar xvfj ezx-crosstool-0.5.tar.bz2
* Q* H0 r+ c4 d7 e$ T, U) U/ s會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
! B0 x8 R; w& v1 E- g# u$ zbinutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2! h- i4 Z5 z" E# G5 A( H
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2$ w) A. a* T8 D9 {3 K
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
% a* T% k% B. o2 L$ M' O* z
9 m. y3 t( \9 d0 h% P& T4 J第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:" R6 o; e0 j; S8 a5 k
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
3 _5 J+ c- K* w改成你想要的安裝位置,比如要安裝在/usr/arm就改成:0 L) C  E0 r$ R1 I( L$ z
RESULT_TOP=/usr/arm; q1 V& f7 Z0 L; y' J

0 U' X7 o5 W( m4 r0 x) J0 }第4步.最後一步,也是最費時間的一步:
+ T3 F( q. k2 ]  Q! ^% v在ezx-crosstool-0.5目錄下運行:$ V1 a2 O) _8 Z* }" m- P1 o
./build.sh5 ^* _5 z1 A/ E# o/ I. W: d

7 U  ]) _! }4 [- ~( {8 Q+ q然後就慢慢等吧...& ]" ]! g9 U2 ~6 h1 [3 |
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-3 06:47 PM , Processed in 0.103006 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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