Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3405|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:
7 _9 m$ V5 j9 Z: r: z: Q2 u) z# ./bash8 e( O: x* `: }' B
Illegal instruction
8 z) e/ V7 v, _! Q# w, V! ^: {搞了一下午始終沒有找到原因.6 |+ x6 j8 k: G) n

, G" B& F# K* o& ?2 U8 L  R後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M1 h/ s; @- q- V# s* j5 [1 \
(該文件可以在eMule裡面搜索/下載)
" N& Q1 }# h, j. Q2 o) s6 w經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.8 g, P5 e+ t2 H# n$ e! B

$ _) b6 _- n0 I% `1 m+ \, P安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)& y4 [( ~/ h7 _3 e
1. 在 c:/tmp 下運行:
( d( S" r1 J* a! ztar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
* q1 \5 g/ h  `* U# |* i然後在tmp下會生成一個目錄usr,下面有如下子目錄:
( o- l# g/ Y6 `* E5 [8 t: h0 earm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/6 Q- D9 g* |  |% C, V
7 B4 O$ @7 Q, ^. F* [
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;  `+ Y: g! k& F
把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;2 `2 \- a3 {+ t3 r; S
把arm-linux/ include/ info/ libexec/  man/  share/' u$ y" Q9 d7 w7 M3 H, m. q5 }4 c/ S
幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.. }& C6 e0 j1 \' \. ]) M
( ?# A3 Y- g7 w' T: n
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
6 [9 N' a0 @2 B3 U% [* x+ iarmv5l-linux-run,但是我沒有運行成功.
2 T4 \: B9 J% Y, e7 Q) |! m! ?" m2 t$ L* d
4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
8 ]7 [- Y9 @1 n# ?$ O6 S1 q! x1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.1 A) N) K/ |4 b6 D# r" N) F) A
2)執行下列命令:+ [0 F! h5 Y! F9 J
tar xvfz bash-3.1.tar.gz1 b- y- I! ~0 C( Q3 `
cd bash-3.1' n  M& h9 T8 A8 z# H
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)" P1 s! S6 g$ A; e! {; C$ |3 ]. L, o
make$ S0 y. K: [2 E4 _- m, ]! s
9 J1 h- A' }* _/ i" X
3)編譯完成後會生成arm-linux的執行文件bash,運行命令:2 p5 }  i* U* t) `; @
file bash
$ a! ~2 y, P  U顯示6 i( u) W' I7 z% X
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: w: q) j6 Q- ~6 f( v. s) y3 e# Q2 h/ S  S
證明編譯成功" H+ e% d- K0 n/ I6 Y% n4 A5 M7 ]

6 n$ \3 z5 N  m% C) m* x' y4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.
- m* h" ?; a% ?3 P- Y  G
* S6 @# {1 Z. A' s: _" n( s5)把編譯好的bash上傳到小I上就可以運行了.
+ O3 R$ r& H" t1 K: Y; [2 @! B+ D2 P  k
  Y3 E, m+ _% i2 e+ p
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
$ r6 Y! f9 P' X+ d/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
" X, v8 G% T( U$ i  ]  [0 A3 h( A2 i3 b5 R% a
2 Y$ a' t/ P" ]. j) p
--------------------------------------------------------------------------------+ G+ S  G- C! Q  \4 a
從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
8 b% g! _- q( p& j+ P雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
1 V+ L& |& t6 K3 U0 e完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
" o" X$ L* Z, V) w~#df -h1 U. v/ l  {' D- f3 H
Filesystem                Size      Used Available Use% Mounted on
" d* m& A; r& U7 m4 w* C/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language7 _% G1 U5 V8 C, i% g
/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup
7 t# R, O; s2 `+ }0 s/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal" \3 y3 q0 `8 W! h( T& K
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca10 b4 A- A6 d0 i' p
/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
$ H) ?+ V- o: t0 B* ^' N4 _  g/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie2 r0 ~) O' N& Y0 ]' E
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.' [0 a& q" W- X- p
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
, \1 S/ \2 X& Y( C# x  Q
  t1 [& ?7 l, @( Z1 u; e第1步.準備工作,下載如下軟件包:
" Y- C, O+ q/ phttp://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
/ H* i2 u0 ^5 i4 c$ s2 ?/ j$ Q9 G+ Y; m1 o2 }! ?7 q7 l
ftp://ftp.gnu.org/pub/gnu 下載如下包' [( a+ r+ F# F2 h# ~4 h4 l, @( D
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
1 f1 Q* e1 [& S0 H4 @1 Pgcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
, o; i# Z( K  E; z. \& F% h; f  D* H$ ^+ Y4 P; {0 I
http://www.kernel.org/pub/linux/kernel/v2.4/ 下載
+ Q$ Z: I) T( J3 F" a( hlinux-2.4.26.tar.bz2; T/ q$ J  ?5 v  v( Q
* i* o+ T  R5 g1 z0 O6 Z- A* r
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話5 S7 B1 U& ~( J5 s6 E9 s; w$ D* N
就可以先不用下載
% {- r, e8 V2 e- L7 c7 `! X3 b2 I4 P$ K% |
第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:- \* y& b7 W! J. D6 E0 }5 l
tar xvfj ezx-crosstool-0.5.tar.bz2
# b/ j6 m, K1 M: C會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
/ a/ n% D3 }  K9 `binutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2+ L$ \8 z: }" z& F: u
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2! @+ {7 C2 `7 T' |; X: r) [! d/ v
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
. k0 t+ Y3 ~  G$ |5 k. E+ ~, d6 i$ W
第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:
' l/ X. d* g  @) _# CRESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
0 ]/ }4 `$ D4 O1 |6 H' a改成你想要的安裝位置,比如要安裝在/usr/arm就改成:
- B+ K6 Z6 Y' r, z6 n# H# HRESULT_TOP=/usr/arm3 I, X% C- i0 i- _

- J8 W7 f( x# O& f* q# q, n第4步.最後一步,也是最費時間的一步:
. ~2 ~! e% X' u6 m1 ~* ?在ezx-crosstool-0.5目錄下運行:. m  h3 A& ?. u0 @+ e
./build.sh
+ f+ j, q/ x+ E1 E2 O! I1 v$ |/ p" M3 H# F  Z. y3 F
然後就慢慢等吧...! S& v+ c1 T8 ~) }
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-6-7 11:03 PM , Processed in 0.113515 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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