Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-28 22:20:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這篇是版主前陣子所寫的一篇文章,如果各位網友有其他的獨特見解與看法,歡迎一起加入來討論。
* g3 |( Z4 {% O2 @- p! f7 d# X" j
1 X5 N9 l. l# ]在崁入式開發環境中 , 最常遭遇的環境之一就是編譯出來的footprint太大 , 而導致必須採用較大的Flash儲存而形成成本的增加。
9 Z% P+ F; z6 h為了要解決此類的問題 , 一般會有以下幾種作法:; S4 L3 _+ Y' z- V# X3 D. k
1. 僅使用boot loader在Flash device , 將 Kernel/Application image儲存於硬碟或是USB Flash /SD等類似的儲存媒體。% ?1 j& u9 t4 r0 b6 l
   此類的解決方案大多是以NAS相關的產品居多 , 並且有比較完整的配套方式。譬如網路儲存大廠群暉科技(synology)提供顧客所附加的工具程式 , 就具備將硬碟格式化後並將Kernel/Application image置於硬碟的固定位置 , Boot loader執行結束後就跳到硬碟去執行此image.
& B- @) w7 ^3 F3 [4 U   5 B6 i- j0 y  F( V) w
2. 選擇適當的 C Library , 可以使編譯出來的image也同步縮小. 但這會有一些問題產生 , 也可能將開發時間加長。
, d+ q9 a+ n7 f   以下介紹三種不同的 C Library
  M7 T+ k/ E: }   GLibc:一般稱之為 GNU C Library , 是目前在Desktop Linux最受普羅大眾所喜愛與採用9 ?5 w* |6 F( z: w6 d
       Pros: 函式庫支援最多而且沒有相容性問題5 S. X8 m  D6 Z) n) ^) N
       Cons: 編譯出來的footprinte過大 不適用於產品量產化, S& l9 g) ~5 S9 Z# X
   
( H" I  _. y; {: }. Y   uCLibc: 目前在崁入式Linux開發環境中 , 最常被拿來使用的C Libary. 一般而言 , 只要將source code在uCLibc重新編譯就可以在Kernel/Application執行 , 但open source並不一定會用uCLibc編譯 , 所以有時會花很多時間解決相容性的問題。" U$ Z: @! s: u5 y- M* V
       Pros: 編譯出來的footprint很小 最適用於產品量產化1 {/ D: t: E4 l: p
       Cons: 函式庫支援較少而且會有相容性問題
/ r" i& p1 N/ Z5 C6 c   
6 l0 x) ]" Z* {9 }# \9 x/ w, b. u   EGLibc: 全名為Embedded GLIBC , 是不同版本的GNU C Library 主要以崁入式開發環境為考量。目的是要將source與binary都能相容於GLibc.而且對縮小code size與結構劃設定都有比GLibc改善0 q9 x* R. t9 I) o; q8 U
       Pros: 函式庫支援最多而且沒有相容性問題4 k! n" T! @# [4 A& R# x
       Cons: 編譯出來的footprinte過大 不適用於產品量產化   
  g! f: O" a6 b' c+ ?; x   / X! R; T8 `- t/ P7 O% r
   基本上 , 一樣的source code在此三種C Library中 , 編譯後所表現出的差異為:" s! @( P: k& r+ o6 Y- p# V* ~# d
   Footprint size(由大到小): GLibc > EGLib >  uCLibc; _% w+ E/ r, @1 x3 m; B! H' f  A% p
   Compatibility (由最佳到次之): GLibc = EGLib >  uCLibc( W% A+ S7 c8 C. \4 v. L
   
) ^& T% L1 x  }% C5 c5 e9 ]3. 另外, 還有一些技巧可以應用在縮減footprint的大小. 在此列舉一些常用方式提供參考。
$ h5 ^4 E" d. r# T& e   - 靜態連結 (Static link) vs.動態連結(Dynamic Link)% N+ a  l% P* S7 e7 W
     Footprint size(由大到小): 靜態連結 (Static link) > 動態連結(Dynamic Link)
9 g( {! \' v( |6 L5 T7 n     Systemoverhead(由大到小): 動態連結(Dynamic Link) > 靜態連結 (Static link)0 a7 M, O* Z0 K& _; B- \
     取決於所需與目的所在.( w5 v5 _, V+ n" X! Y! v: _
      
/ `' }0 W+ k+ P+ I: U   - 可以使用Linux Kernel 2.4 就不要用 2.6,雖然2.6提供較多的支援如IPv6與protocol ... etc.但相對的footprint就比較大.
2 w+ J% i' i- @. G4 |' x$ c   - f/ o' b4 V8 p$ S6 e% s
   - 在Linux kernel Menu Configure將不必要的module都不要選, 減少footprint( a% b% I! H1 E+ w8 O
   6 }- ~4 `, `: u% M
   - 透過壓縮率較佳的程式,將Kernel/Application image壓縮到極緻化.藉由解壓縮後,將file system解壓縮到memory,而此做法通常稱為RAMDisk.
' w" U$ _/ t' t( v$ g/ J     Pros: 減少footprint size
) X5 g1 a8 Y. J/ i/ }* E     Cons: 浪費部分記憶體空間做RAMDisk虛擬磁碟使用,增加解壓縮程式的binary file size與解壓縮image時間
2 S: X9 N; N) U     
" c+ V7 r; k& x! D     折衷的取代方案為CramFS,可以即時運算壓縮後的資料儲存位置然後解壓縮到記憶體中執行.
8 T4 `  _  I2 L6 B     缺點為CramsFS是一個唯讀的檔案系統 ,系統須在Flash保留空間做儲存資料之用。/ v- K6 k/ u! T5 H3 O/ w5 u

1 [1 P* G% g  m( V6 g; ^
& K; V! L. j2 K/ D% |# j% t5 m   
" |; [8 l% w. q3 h/ @7 Q相關資料:
# t0 U6 a. }2 Rhttp://www.synology.com.tw/cht/index.php$ v8 t  P- ~! `3 y) i9 `9 @% p
http://www.eglibc.org/home
- }/ m0 K+ ~4 M3 _  X0 J$ h0 ahttp://www.gnu.org/software/libc/
" a! \" Q, X+ jhttp://www.uclibc.org/
: j% M- F$ N: T- P9 C1 X
. ^6 m& {/ w% s/ r[ 本帖最後由 jacky002 於 2008-1-28 10:21 PM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-21 05:44 PM , Processed in 0.156009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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