Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3461|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:
4 q. p; X2 k4 J( F# ./bash
* j- ?! R( D9 [, D+ d0 t3 |Illegal instruction
% S! W- h" l  E7 h; d搞了一下午始終沒有找到原因.9 A& \3 k# M, P! ^- _( ?

% M# K, K. C4 B$ ]  W) u後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M
) h' G4 e% u) |. y; @7 h(該文件可以在eMule裡面搜索/下載)  [6 J- v+ z, S* n
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.5 }; B! p% A% K5 ~9 d% M

1 G8 ?1 @# _3 {安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)3 ^' a. P2 \$ @! c
1. 在 c:/tmp 下運行:
2 ~5 ]: T# ?; U1 Atar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz
1 T( g5 d  S) k$ I2 w' ~/ G然後在tmp下會生成一個目錄usr,下面有如下子目錄:
. L* W  q  e& E2 j- C) qarm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/. m6 T- ?. d7 k. `" I
5 D! G1 V$ m. l% l  y
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;
; h( ^( I0 e6 Q  `1 ]! D4 f* @  p1 f把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
" C( W. e, D8 ~* [2 f+ x) B: \% T把arm-linux/ include/ info/ libexec/  man/  share/
% t. f& ]* l5 D3 F1 L幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.
0 N2 b4 x) x2 C& s- F! I
3 m9 Z/ O$ u/ r3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
( r; J% Y- E: s0 G9 Z: Harmv5l-linux-run,但是我沒有運行成功.3 b  q4 @. ~; @% V0 V

; _- t; ?7 R* j2 \- N4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:
+ R$ B) n9 D) r& y- H1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.; l9 U1 f* ~" L, @
2)執行下列命令:! x" a8 ^. [9 |! O- Q. h
tar xvfz bash-3.1.tar.gz3 D" u" d, C6 A3 W
cd bash-3.1
5 v* j' @, C+ h  S; s4 s./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)9 H7 O+ r8 _! r# l# h2 m2 m' L
make
; u6 U( S4 w8 a, m9 N  t5 T- {! W4 w, H- S6 w+ A- k8 B5 P( @0 e
3)編譯完成後會生成arm-linux的執行文件bash,運行命令:* J' R) Y8 n3 W( `
file bash; J4 X: f# ]5 n* c; J
顯示
/ ?. f( N. a7 G$ P( Q6 nbash: 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
6 ~9 t; N- F9 o! ]9 G9 [7 T" w  V證明編譯成功
2 ?2 X& o+ E# q* v& e& @
" ^+ i, Y, I# y9 {" V4 t# G" C4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.9 Q2 `3 _  |1 M6 s" {
. O9 ~, N1 U" L8 A9 k8 B4 w3 t
5)把編譯好的bash上傳到小I上就可以運行了.
" Q# D9 w( W  C: H, B* X8 t5 ^1 X, Y) u+ T' A' q% i, c- x, s
& O; H$ Q% B; x9 }5 s% q
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I
: a' S. F: D$ n/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?
% w5 G) j8 x3 C' n; _& x6 Y
3 A% C$ T- i# u* h" o
% A8 z; i6 S2 t" }8 g9 n3 ]--------------------------------------------------------------------------------
4 x6 N4 |5 k8 b3 E( P4 `) ^! I從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
' h9 L) h) o  y& a" l雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
! `; L6 w, d& s4 {% l, a完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:3 K- s- |7 r9 A7 ?6 X( U5 y( n* e  {
~#df -h2 H5 m7 ]* H8 r
Filesystem                Size      Used Available Use% Mounted on
- }+ E1 M' v) [( F; q/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language
3 O7 R" ]7 y0 p  E% }$ `0 O$ Q/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup
$ d2 X$ Y! @( Q" F5 u9 e; d, C/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal
( }. n1 ~" W8 o, a9 g2 X2 [/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca11 V0 _7 h1 E# e& _# \9 R. E
/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska8 h' A9 w0 Y3 q% c& k0 C
/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie  V/ @7 l3 L$ S2 V; g* ^
估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.
: Q- v- L$ N: E9 C" T; @. Y沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
9 P1 [7 g: r! J( S- U
+ O. f! ]0 p9 M7 S第1步.準備工作,下載如下軟件包:/ L) _; A2 G/ [, ?, K' U9 I
http://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
$ H1 K6 N- w/ X9 X5 m2 L0 z  x. Y( y
% u1 F0 m  K6 n. e6 l1 cftp://ftp.gnu.org/pub/gnu 下載如下包
4 B2 F. c% N0 ?/ Q6 Wbinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2
& O1 A, \% ]  [6 Dgcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2. h7 `( G9 z$ r, K. h9 P# C, Y/ J

8 [5 E0 c( x6 W. ]  X; ]- Nhttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載
: _( ^* x4 e  f- flinux-2.4.26.tar.bz2' t9 {6 S! [0 e, Y2 j2 g
  a$ E1 X+ W/ y# \% ?$ p" K
以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話  ?# V' C. A1 p7 b; o3 O
就可以先不用下載
: x7 W  s" |& q0 J) H9 C
- Q/ I3 u) S& L8 V8 _6 m第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
/ S9 l" X6 W7 l/ ktar xvfj ezx-crosstool-0.5.tar.bz2% u7 k+ z4 P2 p
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
* w9 ^& S% }- ~+ d+ V. N9 bbinutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2; d. E2 n! j2 e% ]4 E: |% r7 S+ Z
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2' [( f* [+ G6 S$ u
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).+ ~, `* b7 L' k2 Q0 f! n
' ~+ K0 e! o, L& w' B; W! V6 s
第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:( g- {1 r" {% P! d9 D0 }/ |
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
% {4 J7 `5 D9 ?! `5 z& U改成你想要的安裝位置,比如要安裝在/usr/arm就改成:, r( y' g" F3 y- L
RESULT_TOP=/usr/arm
) |' c4 T3 V9 l& y* c. f. {* }3 @/ Z9 v) c- ~
第4步.最後一步,也是最費時間的一步:
7 g5 v: A  m/ X9 \$ Z: f在ezx-crosstool-0.5目錄下運行:
+ Y  |. R$ G% H2 v+ c( J./build.sh
3 X* E1 u% h* W5 C2 D+ I
% s( i9 [7 c, k7 a! U4 m7 z5 ~) R/ u4 k然後就慢慢等吧...) n3 j  C" k3 M1 i; l; W! H
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-9-22 12:56 PM , Processed in 0.173010 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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