Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3499|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:
% B2 `0 X! v3 P9 z6 p# s6 }# ./bash: O6 Z9 N, o8 N- ~2 l+ B
Illegal instruction& t) U: j" Q( q  q9 ~7 C0 Z
搞了一下午始終沒有找到原因.
/ K6 {4 `, a3 `) B6 e9 T1 D: q0 O: }% k+ \, J' Y3 K7 [
後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M9 y! Y3 R1 H2 c6 A4 A
(該文件可以在eMule裡面搜索/下載)
7 J$ q) ]  H( [  u8 F2 S9 r" z經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.
2 ]+ M, K8 u# J) u  E$ c3 N( L7 v" v9 j8 U3 S
安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp). J% |/ _- r& x4 S5 H, M
1. 在 c:/tmp 下運行:
9 J* [! X$ {% a+ ~; q8 G' B' ltar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz4 ?  ^8 h5 `( V4 t
然後在tmp下會生成一個目錄usr,下面有如下子目錄:5 H& o9 f6 I0 R) _
arm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/
9 X7 n/ ]4 N1 ^7 J* b
! G  x' y; O, K, R1 R3 C2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;% T1 w& d: D$ H2 Q
把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
5 d0 K7 g7 l7 |2 l0 `# ]* K- R把arm-linux/ include/ info/ libexec/  man/  share/
* j. A2 |: B& \/ f, w9 Y; v幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.4 E0 u5 E6 `5 e2 l3 x
2 ^$ ~% Y4 d$ X- ?4 I6 C! e$ {
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器, s4 C+ g! j5 o: D6 {
armv5l-linux-run,但是我沒有運行成功.
8 u, }$ Y: F/ ?% a7 G- D  B9 t# [' e0 Q# @
4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
5 l0 C4 ~8 H6 L% p* S1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.
8 i. ]  B; f! {! G: J2)執行下列命令:
7 L7 `  L3 h8 r) X" R# ^7 otar xvfz bash-3.1.tar.gz
3 A9 E/ z5 k# ^# u; Scd bash-3.1
" @. z7 X/ r! y) t. `: q4 P) {./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)
/ {1 a! y; w$ T/ o( tmake5 e- _2 g$ m( t' r

! z% d# a/ F3 Z% l: V/ U3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
0 E, \& v6 X4 mfile bash
7 ~4 w% q2 K: _  F) }顯示
) z* n1 T+ h+ w8 S7 L6 }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 stripped3 r0 F& U3 ^" w1 i1 n( L( F
證明編譯成功5 [3 W( z/ J& g( Z& ?. I7 R

* R7 P$ p  v+ q2 ~* K7 l- h4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.* D! F& l# G' A8 E

1 b' C/ ~5 @* Q5)把編譯好的bash上傳到小I上就可以運行了.
: {3 S% E! X8 g- F6 {7 t* `; P* R& e, ?* V9 I# o

; z6 l/ s) ?& p6 ]/ O- [/ L5 X3 \進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
  c$ H" ~) P4 K8 w7 a" `* E/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
: M4 L% ?4 Z3 {
9 y% F/ z0 Q) D  v) H
1 v5 f7 F% y1 ?+ C* I) o$ {" t--------------------------------------------------------------------------------
  _0 D% a% W5 l) A* _從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,. U8 V. w: c! S/ h1 T- \% t
雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果3 W1 p: b; _+ C' ?" A8 Z5 M+ m
完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:( v2 d  C0 V" G% E( |  `3 I
~#df -h- q  y' t) z7 E9 x, X
Filesystem                Size      Used Available Use% Mounted on* o! |; ]0 E4 G! [8 O4 B+ H: D
/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language
  ~4 R9 A  H0 V$ ]/ m0 H/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup  P; T# U; _* L+ g7 [
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal9 S3 t. P. Y/ u0 K) F
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca1
2 f. F, t$ B, \/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska  D! p4 Y" o, O, U3 M, Z
/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie5 z& r; R/ c* e" y' T# ?8 F
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.! L' n7 t  P, B& ]& n/ `
沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
2 t' j6 q2 u3 M7 {0 q8 L! D1 c) Z/ O6 q' h. S& A' }! e4 b
第1步.準備工作,下載如下軟件包:
5 b5 }6 ]/ G& J# q( T  |* B' Hhttp://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
/ f  u8 @. w" V2 y+ _3 i" T& J% y$ ^+ @8 \7 _8 f
ftp://ftp.gnu.org/pub/gnu 下載如下包. ~  ]% n. c# p9 f3 l
binutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2' \6 K! c& m3 L' Z. ?
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2/ k0 }! [) f% J' f$ `. T7 G

. }" z: r8 ]+ x) j! Chttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載/ N+ v6 H: e* i$ Q4 y/ r
linux-2.4.26.tar.bz2, b$ I' X& M6 p. L5 Z

$ u! I1 A1 O- Q+ ~以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話
% w1 T8 ?( r/ ~0 E' k/ `- l# ]; J就可以先不用下載* g2 M; }8 h1 `6 t$ u7 Q2 Q1 E

9 Z8 h% T" D# [7 ~( I5 D第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
" {, k, s' q( D6 O3 C" ~; J4 ]tar xvfj ezx-crosstool-0.5.tar.bz2$ U+ ^% N3 \# D  M) ~& K& F
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
% s% W) j) _' F# cbinutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz28 D+ x$ A; B+ {( ?; W. G+ m
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2
8 J: X$ ?  y9 B8 _/ \. y拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
( r4 x# _; L$ J
+ M0 u. F( z2 b3 U% ~& D4 T第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:
) U0 \" O: }8 MRESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
; k. I& D; H0 |8 a  `1 z改成你想要的安裝位置,比如要安裝在/usr/arm就改成:
4 ~) Q0 U  T& h- ARESULT_TOP=/usr/arm
' }/ o1 d+ I0 d$ [! O3 S
% y& c4 G7 A$ K* l- B第4步.最後一步,也是最費時間的一步:
5 c0 u$ F, v+ }在ezx-crosstool-0.5目錄下運行:$ b( d. u3 a; A5 R) o
./build.sh- q) j, [8 s" l% Z

5 M" H4 D! @, I7 B- i- S0 f& S% d1 `0 x然後就慢慢等吧...4 G3 c/ ]7 G. Q; e+ F' _# b8 E
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-11-16 06:18 PM , Processed in 0.148008 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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