Chip123 科技應用創新平台

標題: 在大陸網站找的資料~~2 [打印本頁]

作者: chiohsin    時間: 2008-4-29 12:24 PM
標題: 在大陸網站找的資料~~2
根據網上的資源介紹, 成功的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, 可是運行的時候問題出來了,運行的時候顯示:: x: A8 e& y9 u" d& {
# ./bash' a/ K( a$ E+ ~" @
Illegal instruction
( W8 d) R3 ?6 P* Z+ C搞了一下午始終沒有找到原因.
0 p2 ^1 U" R$ P+ L0 @3 L# o/ q& C  b, Z5 L6 T% O# S; ]1 x0 r
後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M$ `$ u4 h/ u1 c" ?
(該文件可以在eMule裡面搜索/下載)% @) R6 h( ^% R2 M2 F7 Y' u* f8 N7 Q- C
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.3 y# M/ j3 c3 a8 H9 [
! x$ E% z  N+ w) P2 F! E* q
安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)6 w$ h1 \( `. \/ e
1. 在 c:/tmp 下運行:
% X# D. Z9 f9 D3 ?# M) w8 \tar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
6 ~+ Y# q" M) c4 d. R. V然後在tmp下會生成一個目錄usr,下面有如下子目錄:
1 J1 H& Z9 ^0 p6 harm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/6 z% A% S) Z6 @; u% C
& ]. j$ P( v+ |# S: a
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
  u) P+ U7 L" \" a( z8 A8 Q( R把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
/ P! P3 l8 g5 ~5 S& |& c' s3 O把arm-linux/ include/ info/ libexec/  man/  share/
7 t4 K% o! F' r' L幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.
  \$ ?' O3 ~; s# h7 r, i4 `0 ]) o; g& X  i
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
1 H) e' d4 h# v3 d) sarmv5l-linux-run,但是我沒有運行成功.
* f1 b' ?3 l$ K. Z+ m! M$ ~! U0 b$ |  F. V
4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
! Z) }' M  e# a2 h1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.+ ~& O) g: I8 ]8 P4 z0 B$ ]
2)執行下列命令:
* s6 V8 s% f; }4 L+ a. R. Z0 Ntar xvfz bash-3.1.tar.gz! a# {& R2 @) Z) L
cd bash-3.1* D, ?/ V4 m( Q# j6 c
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)
. P: J( E2 z4 rmake
, i! i- g: g* i' O3 a' Y
. z( g2 L# {$ W+ G' ]$ }3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
# r; w7 d2 n/ F% Vfile bash7 R, {- a( ^6 X& _& b, L+ v
顯示
7 P6 y$ ?- y2 Z! b& B2 i4 w( ~: ~: Bbash: 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
. K5 e, g9 j9 c- C證明編譯成功
- v. V0 Q  h4 d2 e: E! Z% Z* |# l
% Z$ k5 w) d1 y* y4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.5 K! }, ]# ]- C: k' @& L7 T: `

' w/ H( g1 P9 `5)把編譯好的bash上傳到小I上就可以運行了.
' [1 l5 P( G! c
) X, E8 ]& ^& R( F, U9 ]" O
4 i: G- v  _- p2 q1 c: B: x' q進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
) ^9 f& O" ^* o: O/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
+ E# v/ M1 _/ q% V6 I- ]: D: J  f! c# i3 T* j+ D2 g: m

; q0 k1 g6 V- P2 T* u! M  ^3 r--------------------------------------------------------------------------------
& c: z0 S. w0 t) d2 M從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
+ S7 F* g. }# W/ p雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果0 M2 |2 u7 o0 z6 m" p6 y
完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:0 M! b, z# |: M2 n: W; f" V  Q
~#df -h6 F  E# M4 x! F/ M' P1 _: ?
Filesystem                Size      Used Available Use% Mounted on1 `& N  B4 w- c( D; V% B% z7 a
/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language4 n" Z7 I: D8 U3 E: m2 B1 F) t8 x
/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup7 d+ d" e' N5 p! z3 k* L
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal
' r( S1 n9 S( T* T/ K/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca19 P7 E, P, m/ V- {
/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska$ q+ o$ A/ _4 c* U
/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie
+ Z- e' G' M7 i4 n8 P8 N, {* q5 h估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.
( ~8 \4 h4 }0 G沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
6 |+ ~- D+ d3 a$ F- v5 W/ O4 p6 L: }! f5 O
第1步.準備工作,下載如下軟件包:
- v, \; [! J4 P) j& mhttp://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2 0 ~( M; l* O) n, o) V
# u8 F4 }$ ]. }# |
ftp://ftp.gnu.org/pub/gnu 下載如下包
0 L* o/ s& N/ `, A% z! |/ Obinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2. A3 \/ h/ w4 n9 U1 m# m& ~, v
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz23 `7 w( U/ O* g3 U& U$ Q

( O) F0 V: G( I/ Dhttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載
; `" ?8 z* J0 T  x  N6 C1 h6 Vlinux-2.4.26.tar.bz2& a9 l: p, j/ j$ m; K9 ~& h

1 U/ Z4 @% Z  Y/ B, T  d以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話" l( U# L! a+ n7 T
就可以先不用下載
. K' j- o3 z4 n; N8 I# H; k
: {# _. z" |' s2 s第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:, G# ?) R* U* X8 O  l: q# ~
tar xvfj ezx-crosstool-0.5.tar.bz2
1 E" [4 E0 A+ Q6 V會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
2 F2 E$ d+ [1 K5 u! F, o9 c. mbinutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz25 G, p; h% m% Q- x4 {
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2) K3 j1 n; y) _3 h- d" {. a
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
) F6 w$ C0 K$ a7 m6 u
! H9 E; m6 B5 C% W- C! o+ y第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:
' N3 [& Y; A, pRESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
- B2 Y. `+ m8 }" |. B改成你想要的安裝位置,比如要安裝在/usr/arm就改成:
1 B6 _! ^% [5 Y3 x# uRESULT_TOP=/usr/arm, Z. I0 s8 ?$ ?! J5 Z
% u& p' q5 ], P8 Y2 v
第4步.最後一步,也是最費時間的一步:/ s; F3 D/ W/ U# R# ?
在ezx-crosstool-0.5目錄下運行:
( i5 E, U+ R8 n, e9 T4 W; g( p& N./build.sh
7 C6 y7 {) s' f/ \0 U2 T( a( d# }& V) s# I2 O& S3 j9 x6 |$ P
然後就慢慢等吧..." g4 c* a9 `. w8 ]2 r* z- |4 S8 Q
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2