Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3462|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:* N5 |1 ^5 v( ]5 p
# ./bash+ C  X& i: B$ L( |
Illegal instruction' J. o& X8 j, y0 L5 |: Z( Z
搞了一下午始終沒有找到原因.2 {* d1 Q6 n7 C( G! L; ^

$ b0 g) U  m9 c; m6 w. w; A後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M6 X$ ^7 H$ c( n. g) D
(該文件可以在eMule裡面搜索/下載)1 S# P( M: B9 Y# z* B
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.
6 i& l+ T- d$ I% ~# h" y9 Q( b! @4 N) G+ d  i3 E5 I2 V9 y6 n
安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)) G% f" @& O  P- M" T
1. 在 c:/tmp 下運行:
/ C& W, Q0 C% t) [: N& ]$ E) D+ N- Wtar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz2 _1 F0 X! ~7 Z9 s8 B3 I6 `4 Q* t3 p
然後在tmp下會生成一個目錄usr,下面有如下子目錄:
  @' N$ J8 z. U0 d+ G. farm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/
, q. F3 g/ b( B0 L
6 V* ?9 j! W1 Y) u5 E& G4 J! L4 Z; V2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
& b) l' y7 G& {把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;4 I0 _, O4 s& A, D5 h
把arm-linux/ include/ info/ libexec/  man/  share/, h( C1 k, }7 A( _0 G1 g
幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.
0 b  W) q" z- Z; p# ?& D/ I" d" T! f1 x5 U3 b
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
0 a" L. X  n3 p7 c; ]5 y4 warmv5l-linux-run,但是我沒有運行成功.
: M3 u8 ^6 _+ ~
4 ^- d5 N. |7 G2 o! z4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
7 X1 X3 h$ A" v! N1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.
6 Q( |+ Q/ U' M  X8 |& U2)執行下列命令:
) V1 j4 V: j+ b5 p) w0 j/ Rtar xvfz bash-3.1.tar.gz
$ l. Z# `; l% s, G+ h( `cd bash-3.16 V, H0 y4 M* }4 {3 B. U
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)' x$ E( j7 O* o; N6 D* Y
make
+ ]4 V! P$ o% Z
5 j  h6 D1 ^/ `9 X3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
; y. a$ E& [$ j7 n; Ufile bash
: `% t$ S$ r& p顯示; a. o3 G) l" @; w
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 stripped6 R' `3 P3 d2 i! {5 n) Y6 v0 \& H
證明編譯成功
2 b; j1 y/ A9 y$ N+ W& h5 r$ t1 y( h; \8 a' n* U
4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.. ?( y) d) I: K8 D% Y

6 z% X' v- Y9 P1 {( |3 U5)把編譯好的bash上傳到小I上就可以運行了.
  ^( I. ]# W* F+ y' w4 Q$ P
- I8 a0 e% X2 r6 I, J2 A& U5 b5 K6 l5 `9 J+ o' y2 Y
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
: i4 [; b- ]. b. c; B/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
, ^" W. r& M" c! F$ l- B7 n4 P
& ?: P0 @( R; q! \- D( _$ O+ U+ v* K( b
+ |- m2 L$ n( N- f& f* y--------------------------------------------------------------------------------
7 U1 b2 H5 N* {7 H( }從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,! s1 f3 h3 ?" k+ [
雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
( d1 W4 Q5 R! ^* c/ t+ q完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
6 N, ?: h; A; B8 J3 q& y~#df -h
2 L& m: A9 [6 {, I& l% `Filesystem                Size      Used Available Use% Mounted on
( d1 Q( m3 w7 d0 B  T/ R' {/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language
* p  z0 Z, E& @8 }, l/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup  {3 |# k1 D& c  k
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal
/ E5 d0 X& [3 {3 s/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca1
2 S# X( L- \' I, |/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
. [6 @$ N; Q9 V& h% A/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie
5 K2 X, \* n' U8 r估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.8 u3 A3 T2 b/ x# d& I: j: r
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:+ N! P/ E& p: |/ n( m
7 d: c6 M$ ?. h
第1步.準備工作,下載如下軟件包:
9 K. p* ?3 d5 Ihttp://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2 , R8 [/ I+ z( o: M

" z% h9 s6 H3 `; Y6 f2 C9 ~5 P, U% Iftp://ftp.gnu.org/pub/gnu 下載如下包/ a. X' A; q2 L/ A  W6 l
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
, V. z6 U; D2 Y# I- Q; }& ?& o  B% A# dgcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
6 w& M6 G+ E3 U
# u2 L6 l1 ]) p, O7 r) k- Ihttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載
: h2 t, P$ U- t6 u& |linux-2.4.26.tar.bz2
% y$ a4 w: V' p2 u0 l" F% k4 c, G! r) i3 W# [) M5 ^1 l  g$ O
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話  ]2 z' `: d( j8 [
就可以先不用下載
& y  i! J1 {, w; b, g
2 @9 ]/ i" g7 [  a; @5 y  L# B第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
" x4 x" r) l7 g1 C! t7 e) d% t" `0 Ytar xvfj ezx-crosstool-0.5.tar.bz26 d1 q! h! t2 c/ f
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
! a( W1 P! T' Jbinutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz25 X# S1 K4 T2 Q" B- A6 |
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2
+ o- d* Z% v, w) h+ o拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
5 U1 K# q, c9 a# I8 K- m
+ J$ g3 b6 i& m- {( N第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:' |/ k2 {9 I" N8 G( n
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt/ A/ m- R( b. Z- y% v
改成你想要的安裝位置,比如要安裝在/usr/arm就改成:
! s$ ^6 K2 v" A  m, ?+ W6 m- g; f2 i, XRESULT_TOP=/usr/arm
' [0 @# u/ m6 i, R# P. C9 ?/ P/ J8 [1 a4 W* J
第4步.最後一步,也是最費時間的一步:( f4 z+ w+ l! ?1 x6 {6 ~
在ezx-crosstool-0.5目錄下運行:
- ^% t% J' ?2 g2 k' N" b./build.sh
5 S1 f5 s8 [1 ]% Z8 x' G( `4 k8 `
4 _: e4 j4 G( a* ^然後就慢慢等吧...
8 x( Y% Y: s) R1 _整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-9-22 05:17 PM , Processed in 0.154008 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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