Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3583|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:) T' ?2 C. i4 F% ~8 g
# ./bash4 Q2 h$ r2 T  e6 I5 W  w
Illegal instruction& o, m- ~$ Q$ g) ^" c0 [
搞了一下午始終沒有找到原因.
- t1 r# M! F4 X
! I* d" e. P, N3 D7 g/ t" G: B後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M% p. z( M4 _  P3 p' R$ b. i
(該文件可以在eMule裡面搜索/下載)- A' l' K" M/ S% e. a4 M( w
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行., L# S$ E7 x$ p7 U* h; q6 d6 B- S

$ ?1 V& P8 k5 B. Q& M5 y安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp); C  f; B  h$ g* @. j
1. 在 c:/tmp 下運行:
: e" q* f  R( v9 P7 n8 htar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz% i0 I, v/ p/ p* F8 L+ n. k- L
然後在tmp下會生成一個目錄usr,下面有如下子目錄:; f7 d' h4 P3 y! Z
arm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/" A; |4 v# ^9 ]8 ?
4 o! H& M8 D1 [& v% U9 ~0 b& N3 p
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;) ^7 P1 e7 k8 N1 L3 X. u
把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;
0 K. K- |6 V+ f- v8 X0 o. B把arm-linux/ include/ info/ libexec/  man/  share/
3 s" Y$ }7 j( C) G6 n幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.* A; s& G5 v# b  c( S9 z# ~) m
& N. o& e+ w' G6 l) U4 a* n
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器
  N' K/ _1 R# u- V. x! k' Marmv5l-linux-run,但是我沒有運行成功./ b- q8 t3 q/ o* n# q( o
% t/ l) M5 ]- m2 w
4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:, M6 S$ P$ g$ n! H
1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.
$ z: M2 w! Q# F+ r% y! |2)執行下列命令:
) }' G: K4 m3 S% \& Atar xvfz bash-3.1.tar.gz- X& v- ?  M9 N8 I6 v# F2 j
cd bash-3.10 v9 }3 D( p3 A( }( U2 Q, ^1 ~9 s
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)) V( k* ?. J* b; X- d( X
make, }$ v* ^8 p; {6 P& Q) k( e* x& F

0 s, O  V) [9 ?' U& Y3 T0 M2 j1 J3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
* @- x1 D) X0 q! g  f- wfile bash+ t* R. I* C' F3 u1 V9 L
顯示, @6 e3 z+ B5 v0 l
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
& m& V& I* H$ L證明編譯成功
) Q1 A- q! Y9 \/ O) a5 B3 Q9 f- V8 `& |
4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k.7 H' C" ?/ I, a# W( l: Y

4 R+ w3 H  B! t/ P) u; ?5)把編譯好的bash上傳到小I上就可以運行了.
8 R1 @. `9 |4 A6 S; O/ s- O' F' ]1 p3 C) x% |$ g

! d7 A1 j4 L+ k+ y3 L7 U進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I  n0 k6 X! t5 U! e/ _$ }1 T" f
/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?: W# h4 ~/ `+ E+ i7 M2 l* C% p1 s. B. X

" ~. o. N/ F/ s$ ?& e& @! n, b
# Y6 T" l3 Z4 \--------------------------------------------------------------------------------/ ?" ^0 L7 X6 n8 v5 w
從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,5 G4 q$ H' A" H+ q
雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
% L+ K1 p2 b% Q& @! V* Q完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
7 j' E6 ]6 ^/ l9 n- s~#df -h
) r5 U  u, [$ k0 z- {' p) \Filesystem                Size      Used Available Use% Mounted on7 Q- b; J! J6 J! M: ]2 v
/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language
8 s* [4 D4 c7 W/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup5 c' s; x' h$ ?. d/ K! o
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal
* c$ R; b' M+ l/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca1
( R2 p, {) ?6 ~) X5 w/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska
) r: L* ^6 R- V1 s* Z/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie
9 Z0 c! z0 O& N: d估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.
1 k5 Q8 z- q( D( @沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:1 p: {9 U2 e. _, {
& D' d6 y, F9 \' Q( R1 F
第1步.準備工作,下載如下軟件包:
& o' V2 X9 Y0 W; @* ihttp://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
" B* c3 c  y9 {3 V5 E
" m, p7 u. O  c/ C9 U* w7 s2 aftp://ftp.gnu.org/pub/gnu 下載如下包
# y$ y1 ?- n9 v0 ubinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2; i0 @2 Z! Z/ X3 |3 b6 {% M$ Y4 K. y
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
2 d$ ^  t. I7 F) w( R* f0 v
$ r" l( O1 P7 y+ n6 l! Dhttp://www.kernel.org/pub/linux/kernel/v2.4/ 下載( [( I" B& X1 c! {
linux-2.4.26.tar.bz2
- v9 j8 W$ s+ S" _9 V- y
5 K6 u1 J$ i, j8 B3 S- M( @$ w: Q以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話
2 L2 B: j# x( E1 J5 v就可以先不用下載' u, q2 S' b! T& D

8 v7 I8 ?1 o1 U* ?2 K第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:+ p" j0 t0 X1 F, k
tar xvfj ezx-crosstool-0.5.tar.bz2, n- Y' c, S9 O  C2 m# @$ I
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:
. h+ e$ ?" B- D9 s4 d) W' m7 x, \$ ~binutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz2
; |  C3 v. w6 r: q; ]7 Ggcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2* X/ i- l1 ]; C* a: E1 r; c- L6 b
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).
0 z% R# H. }- R4 u% k/ n5 O/ ^0 a# ~6 n/ C' N1 l  P; b+ v, [7 a9 M+ g
第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:; |) h' ]. m. m. Y3 \: o8 f3 J4 i
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt" f5 v0 Y; h6 j6 W/ _! \
改成你想要的安裝位置,比如要安裝在/usr/arm就改成:0 x% h. b; D! V7 P  O
RESULT_TOP=/usr/arm$ t, h0 D+ [: e- _! }, s  {

" w3 P7 H8 d2 n# `第4步.最後一步,也是最費時間的一步:
  i  i" }, }- O6 H) b0 w在ezx-crosstool-0.5目錄下運行:" n4 }8 z7 E2 g; n" s& a$ K3 g; U
./build.sh1 X% w9 g" j6 V

9 ]! T) f2 V4 g6 P2 S, |然後就慢慢等吧...: x$ J1 q" }+ T, Y) V. k
整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-12-29 08:43 AM , Processed in 0.161009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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