Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3387|回復: 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, 可是運行的時候問題出來了,運行的時候顯示:
* h+ x2 T5 W( l1 E# ./bash
- U1 {9 y8 W* _  TIllegal instruction
# b+ u9 D$ ]. X. S/ ^+ S- f搞了一下午始終沒有找到原因.
0 D  G# U1 O1 R5 c, m  r9 P2 K4 E7 X. u% e+ s1 m
後來在電驢上發現了一個編譯好的包:arm-linux-toolchain-cygwin-3.4.3.tar.gz,有86.4M
6 I/ c% {& j8 _" c0 [6 Z# m(該文件可以在eMule裡面搜索/下載)  e4 o: r7 i5 U% n* \* i9 C, q
經測試可以正常交叉編譯arm-linux程序,編譯好的程序在小I上也可以正常運行.) M0 `2 |4 i* T! M! j
7 Y" C! X8 e! O6 s# T1 X: s
安裝的步驟如下假設cygwin安裝在c:/cygwin,下載的包放在c:/tmp)- W& R- A/ g6 R0 ~6 R4 \
1. 在 c:/tmp 下運行:5 T8 D2 m; o6 Y
tar xvfz arm-linux-toolchain-cygwin-3.4.3.tar.gz3 y6 w( c( b8 p  u. f. g
然後在tmp下會生成一個目錄usr,下面有如下子目錄:
2 `( r* u" p% c  ?0 xarm-linux/  bin/  include/  info/  lib/  libexec/  man/  share/
' V3 L/ [& N+ K! J- I: }% ~1 ~" T, G. m- k( s$ A4 @" z
2.把c:/tmp/usr/bin下的所有文件拷貝(或移動)到c:/cygwin/bin;* t2 F3 X; \0 B( Z- S& k4 h$ Z7 S* ]
把c:/tmp/usr/lib下的所有文件拷貝(或移動)到c:/cygwin/lib;) d& I- u2 j$ r' T4 w
把arm-linux/ include/ info/ libexec/  man/  share/' M8 {$ C2 ~- o2 x! Y6 z& {
幾個目錄拷貝(或移動)到c:/cygwin/usr目錄下,拷貝過程中如果詢問是否覆蓋選擇全是.0 V3 l' D5 O. p' W  ^0 l1 N
  R8 `5 ?. `: c6 Q2 t7 y8 D  x
3.這時候運行arm-linux-gcc就可以編譯arm-linux的執行文件了,該包還帶了一個arm的模擬器& c7 l4 B, }3 K% ~  n
armv5l-linux-run,但是我沒有運行成功.
! ^& E7 @  x& i3 q' q5 t4 [* D
% ~9 L# _# n  C& x4.以bash 3.1為例介紹一下arm-linux軟件的編譯過程:7 A- H' }/ g- C! S9 R
1)在ftp://ftp.gnu.org/pub/gnu/bash下載bash-3.1.tar.gz.0 W9 d( _4 l+ T, u. `
2)執行下列命令:
$ {# g& `: _1 g& S$ m; m9 E' ktar xvfz bash-3.1.tar.gz5 Z" w! b" u1 Y, m/ V/ \+ u# y. V) |
cd bash-3.1" X  Y8 J! D: X
./configure --host=arm-linux (configure要簡單處理一下:刪除行9983到行10042間的內容)
: k! r. U. o. c& O5 d8 }! Tmake
7 _+ F6 S% a" n  C: q. U$ F' k
- V. R4 f% I9 n2 u; A( T- ]3)編譯完成後會生成arm-linux的執行文件bash,運行命令:
3 I8 W, P8 ?7 ~file bash; f  K5 S( G- p, R# N5 I
顯示
$ x& b1 Q$ o8 f( ^1 _, q9 xbash: 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: D- h6 g+ C0 W7 G) N+ i) H
證明編譯成功6 n. g5 _$ r1 ]
& B" f  A7 v  L# q2 k
4)運行arm-linux-strip bash, 去除不必要的符號信息,可以使編譯好的bash文件大小從3M多減少到600多k./ |8 n" s' @) v5 B5 B
2 }8 O6 h& Q5 Y* C) c/ M1 f
5)把編譯好的bash上傳到小I上就可以運行了.% w: q  f/ f2 d' N4 d) H

0 i5 ~' V; i/ p# s8 a- i+ `( t% M$ U' a9 @( W$ B& b$ i" S% \
進一步的想法:能否用busybox(http://www.busybox.net/)來代替小I& W2 \' k& ~! F5 r' N0 K8 `
/bin /usr/bin /sbin /usr/sbin目錄中的命令文件,這樣可以節省出幾M的空間?) _2 N! T. U8 m

# ?+ d5 J% g+ y5 f: v) S6 V
! y' R' F  Q- E- `$ Z--------------------------------------------------------------------------------
" M" \0 v: E$ Y/ [/ _- [從電驢上下那個arm-linux-toolchain-cygwin-3.4.3.tar.gz用了幾天以後發現還是有問題,
: x0 z) _( @, t" S: Z) ?* t雖然能夠正常編譯,編譯出來也能正常運行,但是只要一涉及浮點數有關的處理, 出來的結果
( v. x6 {6 r& X; s) ?6 D完全是錯誤的,比如我用busybox替換了系統的df,運行的時候結果如下:
+ c* ~7 i+ S) \% g' ^, }5 o& P- [~#df -h0 s0 X0 F" L9 _# y
Filesystem                Size      Used Available Use% Mounted on9 m% C7 e0 i- ]( ~) c
/dev/tffsa           64424509455.4M 64424509455.4M         0 100% /usr/language% C5 N6 r5 W7 U: i
/dev/roflash2        1786706395552.0k 1786706395552.0k         0 100% /usr/setup4 I# [3 L& {8 s, j7 \
/dev/mtdblock2       21474836485.2M 4294967297.8M 12884901891.4M  34% /ezxlocal% E. f, j' @+ ]0 k- s( p
/dev/mmca1           4088808866744.7M 996432412904.4M 3092376453840.3M  24% /mmc/mmca1
- `% b+ G; H) z9 f; K0 N- S/dev/tffsb1          201863462959.9M 12884901891.8M 188978561068.1M   8% /diska# a. f) j5 m, [/ c
/dev/loop0           223338299444.3M 223338299444.3M         0 100% /ezxlocal/opie
7 \* l  ~% d3 H, q8 r  C估計是這個包在編譯的時候沒有加進軟件模擬浮點處理器支持, 而小I本身沒有硬件的浮點處理器.
- F5 \& `9 r9 D( g* m4 j3 C( F- U1 Y沒辦法, 還是只得自己動手編譯了, 後來又查了些資料,做了些實驗, 發現自己動手編譯建立toolchain最簡單的方法如下:
& H6 z& W: J  Q; h" n/ M
/ T; c2 v; @8 m% Y" Y第1步.準備工作,下載如下軟件包:
' Z0 \2 c0 c! {http://lsb.blogdns.net/ezx-crosstool下載ezx-crosstool-0.5.tar.bz2
! `3 Y6 l) C$ m1 M4 |; ~9 r0 k! P' g# P, C8 U1 u$ B
ftp://ftp.gnu.org/pub/gnu 下載如下包
) d2 I, B0 A8 D+ V  F1 A% R% X9 c" Pbinutils-2.15.tar.bz2 glibc-2.3.2.tar.bz2, G7 d! o3 W5 t) J
gcc-3.3.6.tar.bz2 glibc-linuxthreads-2.3.2.tar.bz2
8 |+ [' c9 a7 u& |) Y* @3 _+ b+ N6 Z
http://www.kernel.org/pub/linux/kernel/v2.4/ 下載
5 B. w4 N3 B; x3 u3 ^; Llinux-2.4.26.tar.bz2
* c, }4 S9 ]9 R& C: ~6 I# d/ P9 y+ Z* Y
' I/ p- W$ }5 i* Z9 H; \以上幾個包只有第一個是必須的, 後面幾個編譯的時候如果沒有會自動下載,如果你網速夠快的話
" E. Y: `4 b+ z2 }就可以先不用下載7 u% g9 w+ B8 C1 t! Z4 G3 i0 B( i2 M

% K( G) e+ m5 r: i9 B: I- H% [+ d7 |4 O6 {第2步.把下載來的ezx-crosstool-0.5.tar.bz2解包:
8 F2 ~* p; Z# [8 q% W! G' U2 p/ y8 \tar xvfj ezx-crosstool-0.5.tar.bz2# e1 O. @; i; R  G0 y( L3 X8 G
會生成一個ezx-crosstool-0.5目錄, 然後把預先下載的:% Y/ v5 \, I1 K* d
binutils-2.15.tar.bz2  glibc-2.3.2.tar.bz2                linux-2.4.26.tar.bz20 b+ h: }8 Q0 \# s
gcc-3.3.6.tar.bz2       glibc-linuxthreads-2.3.2.tar.bz2  U. t4 `/ o* b3 t; R
拷貝到ezx-crosstool-0.5目錄的子目錄下(沒有預先下載則跳過此步).$ V& I! ?: I0 Y6 w1 A6 [) ^: Q
4 I+ k& S* N! p& t) [/ [5 Z% ^
第3步.編輯ezx-crosstool-0.5目錄下的build.sh文件,把第5行:7 T; j# O; Y( g, f9 u  L- P
RESULT_TOP=$CROSSTOOL_DIR/gcc-arm-iwmmxt
5 T( s6 r5 g# P, g4 r! x( ?2 H+ d4 F改成你想要的安裝位置,比如要安裝在/usr/arm就改成:
- Z" w7 f) m: A9 q/ _& iRESULT_TOP=/usr/arm* I* H) \' P( i0 a$ a" H4 }% p

! j, F( V+ ^% T/ S第4步.最後一步,也是最費時間的一步:
7 p5 m3 V4 E3 N0 L+ G5 G在ezx-crosstool-0.5目錄下運行:, c" I3 {' O2 \$ X
./build.sh3 k; l5 T% a9 u9 @
" c& ]- W8 E% M- U6 C- L6 _
然後就慢慢等吧...
7 D8 u5 I% {( R4 L3 `: D: b整個過程在我的機器上大概用了兩個來小時.我的機配是XP2600+ , 1G ram

評分

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

查看全部評分

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

本版積分規則

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

GMT+8, 2024-5-18 12:38 AM , Processed in 0.108013 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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