Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 3648|回復: 0
打印 上一主題 下一主題

崁入式開發環境 - 減少footprint方式

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-28 22:20:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這篇是版主前陣子所寫的一篇文章,如果各位網友有其他的獨特見解與看法,歡迎一起加入來討論。& Y, }7 P# ~8 X5 V+ [# F

% {# U6 [+ t9 n在崁入式開發環境中 , 最常遭遇的環境之一就是編譯出來的footprint太大 , 而導致必須採用較大的Flash儲存而形成成本的增加。& O5 l" V+ D9 I& T; H4 I3 N
為了要解決此類的問題 , 一般會有以下幾種作法:7 R2 [& l! U( L0 O6 X+ W
1. 僅使用boot loader在Flash device , 將 Kernel/Application image儲存於硬碟或是USB Flash /SD等類似的儲存媒體。3 x/ R: O; E" Q  Z4 D
   此類的解決方案大多是以NAS相關的產品居多 , 並且有比較完整的配套方式。譬如網路儲存大廠群暉科技(synology)提供顧客所附加的工具程式 , 就具備將硬碟格式化後並將Kernel/Application image置於硬碟的固定位置 , Boot loader執行結束後就跳到硬碟去執行此image.
: J1 G, l6 j3 n   ; Z. Z+ T% c9 N( m) ?% N
2. 選擇適當的 C Library , 可以使編譯出來的image也同步縮小. 但這會有一些問題產生 , 也可能將開發時間加長。
4 t( q3 d: n8 i8 }   以下介紹三種不同的 C Library4 O& H! p& n$ q+ O' v) b
   GLibc:一般稱之為 GNU C Library , 是目前在Desktop Linux最受普羅大眾所喜愛與採用
& V' d/ h5 W: w+ x8 D* g0 q0 y# G+ Y       Pros: 函式庫支援最多而且沒有相容性問題
+ G0 L+ T5 a" n7 m1 \       Cons: 編譯出來的footprinte過大 不適用於產品量產化
* i" Q4 f$ Z2 L# y    ; O) ^* B& v" m$ G) `; }$ _
   uCLibc: 目前在崁入式Linux開發環境中 , 最常被拿來使用的C Libary. 一般而言 , 只要將source code在uCLibc重新編譯就可以在Kernel/Application執行 , 但open source並不一定會用uCLibc編譯 , 所以有時會花很多時間解決相容性的問題。6 j8 j0 Y4 E$ c: C& {# }' Z
       Pros: 編譯出來的footprint很小 最適用於產品量產化
. i1 s* ^0 X  F3 {       Cons: 函式庫支援較少而且會有相容性問題* {" c4 z( B, Q! Z9 u: u( F; Z
   
8 T- ~9 y9 G( w0 O$ L   EGLibc: 全名為Embedded GLIBC , 是不同版本的GNU C Library 主要以崁入式開發環境為考量。目的是要將source與binary都能相容於GLibc.而且對縮小code size與結構劃設定都有比GLibc改善
0 ?; P- `/ ~/ y: E" M       Pros: 函式庫支援最多而且沒有相容性問題
8 T- d/ [5 b" R& v6 C1 _+ {/ @( {! t       Cons: 編譯出來的footprinte過大 不適用於產品量產化   - M9 D( N$ }8 j% t, M
   3 e4 T3 Q/ q2 S, e* {/ w
   基本上 , 一樣的source code在此三種C Library中 , 編譯後所表現出的差異為:
5 ?3 g& D' h1 W. S   Footprint size(由大到小): GLibc > EGLib >  uCLibc
4 @; y  t- r0 Q9 j, i, B   Compatibility (由最佳到次之): GLibc = EGLib >  uCLibc* `! i! n; o) c( t
   
$ ]0 ^$ Q% n: v: [3. 另外, 還有一些技巧可以應用在縮減footprint的大小. 在此列舉一些常用方式提供參考。
, [! A3 F( Q/ t; T   - 靜態連結 (Static link) vs.動態連結(Dynamic Link)% I3 t7 Y# ^4 {- A, k% f/ ]
     Footprint size(由大到小): 靜態連結 (Static link) > 動態連結(Dynamic Link)
! @( p; W, O( i; _     Systemoverhead(由大到小): 動態連結(Dynamic Link) > 靜態連結 (Static link)
3 y3 h$ B* P) |     取決於所需與目的所在.
; x" e/ K3 P, I4 k. p7 g      " T) i6 S0 l' a. D  Q
   - 可以使用Linux Kernel 2.4 就不要用 2.6,雖然2.6提供較多的支援如IPv6與protocol ... etc.但相對的footprint就比較大.
" }) i# E1 z: h1 P8 R3 U9 k   5 b6 @; L1 S$ O8 v7 u* Y* a
   - 在Linux kernel Menu Configure將不必要的module都不要選, 減少footprint
5 k( w+ ?, n! y0 B  l/ n( V   6 y5 |" I0 e, l& a' [  e. E: b* Y
   - 透過壓縮率較佳的程式,將Kernel/Application image壓縮到極緻化.藉由解壓縮後,將file system解壓縮到memory,而此做法通常稱為RAMDisk.
" T- O" m& Y: b! N: C  {) A4 w     Pros: 減少footprint size8 s9 i% b- Y' s8 [6 |
     Cons: 浪費部分記憶體空間做RAMDisk虛擬磁碟使用,增加解壓縮程式的binary file size與解壓縮image時間- n$ ]$ b! C) n+ P5 S
     
+ \7 u$ ?9 F9 A/ p9 w2 w, M' r. B     折衷的取代方案為CramFS,可以即時運算壓縮後的資料儲存位置然後解壓縮到記憶體中執行.
( o3 e* `+ h& l2 x0 e+ c     缺點為CramsFS是一個唯讀的檔案系統 ,系統須在Flash保留空間做儲存資料之用。
! \7 y, |5 B- G- k  Y. o8 h! D9 x 4 G) O2 E  D, Q7 e2 t  o
/ A" o9 E5 I, o6 `
   
$ e* T1 W7 Q/ v2 B/ n) E7 j相關資料:
* I/ U9 b- c' ihttp://www.synology.com.tw/cht/index.php* i3 c3 s' u+ Q8 M1 p1 N5 R8 ^- [
http://www.eglibc.org/home
* C( t) F7 {4 a1 z- z& U1 A/ }2 hhttp://www.gnu.org/software/libc/: m# l0 I# B4 @$ c! Y
http://www.uclibc.org/9 N3 U) ]: J. n7 Y2 k

; M' {* |+ p9 V$ N, b0 A, o& A[ 本帖最後由 jacky002 於 2008-1-28 10:21 PM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-16 07:06 AM , Processed in 0.144008 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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