Chip123 科技應用創新平台

標題: 崁入式開發環境 - 減少footprint方式 [打印本頁]

作者: jacky002    時間: 2008-1-28 10:20 PM
標題: 崁入式開發環境 - 減少footprint方式
這篇是版主前陣子所寫的一篇文章,如果各位網友有其他的獨特見解與看法,歡迎一起加入來討論。8 W$ o7 A7 p( H. @+ m) a

9 p! P. b; g1 t! |# [在崁入式開發環境中 , 最常遭遇的環境之一就是編譯出來的footprint太大 , 而導致必須採用較大的Flash儲存而形成成本的增加。
' w0 k* ^: ~( p為了要解決此類的問題 , 一般會有以下幾種作法:8 d7 Y! h7 n6 j4 E% q0 i3 J
1. 僅使用boot loader在Flash device , 將 Kernel/Application image儲存於硬碟或是USB Flash /SD等類似的儲存媒體。
) |( I# }6 k' b& l" }   此類的解決方案大多是以NAS相關的產品居多 , 並且有比較完整的配套方式。譬如網路儲存大廠群暉科技(synology)提供顧客所附加的工具程式 , 就具備將硬碟格式化後並將Kernel/Application image置於硬碟的固定位置 , Boot loader執行結束後就跳到硬碟去執行此image.
4 y* t8 q. O2 w7 q5 u6 g$ ^   3 e7 g5 U4 P: |2 _* W; |8 W: m
2. 選擇適當的 C Library , 可以使編譯出來的image也同步縮小. 但這會有一些問題產生 , 也可能將開發時間加長。9 ^4 g% v. ]' S
   以下介紹三種不同的 C Library7 |& ~9 E" x1 f) v
   GLibc:一般稱之為 GNU C Library , 是目前在Desktop Linux最受普羅大眾所喜愛與採用
2 R! h' k5 I% m' U' c       Pros: 函式庫支援最多而且沒有相容性問題
" S) E) E  O( u' \8 ~+ g       Cons: 編譯出來的footprinte過大 不適用於產品量產化, ]: S; V/ m. O, j* h. a. f
    & W; v1 m; v4 j1 P
   uCLibc: 目前在崁入式Linux開發環境中 , 最常被拿來使用的C Libary. 一般而言 , 只要將source code在uCLibc重新編譯就可以在Kernel/Application執行 , 但open source並不一定會用uCLibc編譯 , 所以有時會花很多時間解決相容性的問題。
  M4 |9 J7 n% U, l" y       Pros: 編譯出來的footprint很小 最適用於產品量產化/ f; X& X) H8 S, V+ Y4 b
       Cons: 函式庫支援較少而且會有相容性問題
9 D+ b5 M4 b8 o  w5 H6 }4 P$ t   
+ @& b. V; X+ J   EGLibc: 全名為Embedded GLIBC , 是不同版本的GNU C Library 主要以崁入式開發環境為考量。目的是要將source與binary都能相容於GLibc.而且對縮小code size與結構劃設定都有比GLibc改善
3 D3 H3 u4 T6 U: K2 Z       Pros: 函式庫支援最多而且沒有相容性問題
; W  m6 J2 O) X+ F6 I2 F       Cons: 編譯出來的footprinte過大 不適用於產品量產化   $ j1 W8 ?1 O% x
   . s) Q9 N- ~" Z$ J
   基本上 , 一樣的source code在此三種C Library中 , 編譯後所表現出的差異為:
7 ^  M# C% `5 l9 m   Footprint size(由大到小): GLibc > EGLib >  uCLibc
, C$ }& X( o* C, p: O+ x* Z   Compatibility (由最佳到次之): GLibc = EGLib >  uCLibc
1 |8 f. V+ d, y" d& W   8 d$ L# v" t. a6 ]  |" b* I! A
3. 另外, 還有一些技巧可以應用在縮減footprint的大小. 在此列舉一些常用方式提供參考。' Q' _  _$ I! \& J8 d' S, ^
   - 靜態連結 (Static link) vs.動態連結(Dynamic Link). n+ R- U5 M' O0 \% l8 t, ^/ `
     Footprint size(由大到小): 靜態連結 (Static link) > 動態連結(Dynamic Link)) G0 ^2 K8 Z" j0 o( U0 h& s
     Systemoverhead(由大到小): 動態連結(Dynamic Link) > 靜態連結 (Static link)/ x9 M1 R* h9 T8 D
     取決於所需與目的所在.
. M$ c/ D" C2 O/ U( w" Q9 F      7 t8 X8 Z$ A6 f6 r6 f. {0 M. u" w3 ^& `
   - 可以使用Linux Kernel 2.4 就不要用 2.6,雖然2.6提供較多的支援如IPv6與protocol ... etc.但相對的footprint就比較大.
# {1 `* N7 e- G0 I( E- `& M( U   
. D, l- h: r- }, A! }0 S5 N9 \; c   - 在Linux kernel Menu Configure將不必要的module都不要選, 減少footprint
4 p( T: k7 ^( d) ^) O3 b   
" w& y" e' s! g" j   - 透過壓縮率較佳的程式,將Kernel/Application image壓縮到極緻化.藉由解壓縮後,將file system解壓縮到memory,而此做法通常稱為RAMDisk.
( [( x& b. ~% w1 i* L     Pros: 減少footprint size7 o8 q+ \% v/ d8 x' u
     Cons: 浪費部分記憶體空間做RAMDisk虛擬磁碟使用,增加解壓縮程式的binary file size與解壓縮image時間2 l" P! x2 ]; P. u' F- r
     1 }/ R( `8 e. O2 S! p
     折衷的取代方案為CramFS,可以即時運算壓縮後的資料儲存位置然後解壓縮到記憶體中執行.   M7 D) L# z1 Y' C! ?/ `
     缺點為CramsFS是一個唯讀的檔案系統 ,系統須在Flash保留空間做儲存資料之用。
, C8 d: z" r" r* @+ z
& f9 q- l, e4 N( P& G7 j7 B" t0 `3 q3 b+ q8 ], ], F" {
   
* [( x, @8 |2 K& {& T相關資料:! B) }/ o: f" K0 M& y3 e" B0 t
http://www.synology.com.tw/cht/index.php
# p( n# }. V: X$ F& uhttp://www.eglibc.org/home
* H5 v7 p$ l; \7 q  @: m' y9 _http://www.gnu.org/software/libc/
5 E; V) B$ W, B3 c) ^# l& C* vhttp://www.uclibc.org/
  q  |2 |3 v3 j, C3 D  R
) x6 j4 t6 d' S2 N9 `  h[ 本帖最後由 jacky002 於 2008-1-28 10:21 PM 編輯 ]




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2