Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-28 22:20:10 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
這篇是版主前陣子所寫的一篇文章,如果各位網友有其他的獨特見解與看法,歡迎一起加入來討論。
4 F- d) c! A! f! S" c5 E) b) P+ ^
7 E& `1 ]1 _5 i- G! H; u在崁入式開發環境中 , 最常遭遇的環境之一就是編譯出來的footprint太大 , 而導致必須採用較大的Flash儲存而形成成本的增加。
4 ~& Q- S- c4 M1 x+ t3 W; b為了要解決此類的問題 , 一般會有以下幾種作法:
  q$ y. q9 X  p: E1. 僅使用boot loader在Flash device , 將 Kernel/Application image儲存於硬碟或是USB Flash /SD等類似的儲存媒體。% s  K6 T8 C' Y7 J) f' a% F2 E: A
   此類的解決方案大多是以NAS相關的產品居多 , 並且有比較完整的配套方式。譬如網路儲存大廠群暉科技(synology)提供顧客所附加的工具程式 , 就具備將硬碟格式化後並將Kernel/Application image置於硬碟的固定位置 , Boot loader執行結束後就跳到硬碟去執行此image.
! |  ~8 {8 c- D: ?   7 U9 p, M7 h5 F1 E& g/ w
2. 選擇適當的 C Library , 可以使編譯出來的image也同步縮小. 但這會有一些問題產生 , 也可能將開發時間加長。
  q  ]: z+ E$ M; `  A. ~" r# s& C& h   以下介紹三種不同的 C Library
2 I# p' O# X* q, D! a   GLibc:一般稱之為 GNU C Library , 是目前在Desktop Linux最受普羅大眾所喜愛與採用  g6 _% f" M2 M6 t  a
       Pros: 函式庫支援最多而且沒有相容性問題! j) N. f- m. f% `$ d
       Cons: 編譯出來的footprinte過大 不適用於產品量產化
: x/ v. {& N- q7 U. i   
9 z' ^/ N, H; F. ^2 W5 ^   uCLibc: 目前在崁入式Linux開發環境中 , 最常被拿來使用的C Libary. 一般而言 , 只要將source code在uCLibc重新編譯就可以在Kernel/Application執行 , 但open source並不一定會用uCLibc編譯 , 所以有時會花很多時間解決相容性的問題。7 X/ e+ ~4 j' K8 T. N1 G
       Pros: 編譯出來的footprint很小 最適用於產品量產化
( m, {2 `0 D& P8 ^$ R5 ~  }       Cons: 函式庫支援較少而且會有相容性問題
" ^0 `' ]+ A  K  [0 w' \/ ?! z9 f4 _   - H3 y  r: C& b' q. d1 v7 L8 \9 g* W
   EGLibc: 全名為Embedded GLIBC , 是不同版本的GNU C Library 主要以崁入式開發環境為考量。目的是要將source與binary都能相容於GLibc.而且對縮小code size與結構劃設定都有比GLibc改善  f0 z- T& F! n+ t# |' o
       Pros: 函式庫支援最多而且沒有相容性問題
. V' e0 h4 \# [9 O       Cons: 編譯出來的footprinte過大 不適用於產品量產化   
4 T$ `  r" o/ s4 U& s   
. ^/ d5 K+ j$ v. r   基本上 , 一樣的source code在此三種C Library中 , 編譯後所表現出的差異為:
6 b" {5 p' x& X% n   Footprint size(由大到小): GLibc > EGLib >  uCLibc
: f4 R) X& r; R8 f   Compatibility (由最佳到次之): GLibc = EGLib >  uCLibc5 S( T3 @& T! U+ I# @
   9 i: v: D' `3 H& w5 p; x+ c' J
3. 另外, 還有一些技巧可以應用在縮減footprint的大小. 在此列舉一些常用方式提供參考。
5 |3 R, N& E6 E& ?   - 靜態連結 (Static link) vs.動態連結(Dynamic Link)1 G2 {4 e1 h5 m" V. q  E7 q
     Footprint size(由大到小): 靜態連結 (Static link) > 動態連結(Dynamic Link), z5 l, C7 I# C8 Z: L3 W
     Systemoverhead(由大到小): 動態連結(Dynamic Link) > 靜態連結 (Static link)  D" s: K& ^* W' m
     取決於所需與目的所在.
8 j3 e$ {1 K; R4 D6 l7 q  [7 J* t3 ~      ! D; k2 W: P/ |+ q" k+ W5 i
   - 可以使用Linux Kernel 2.4 就不要用 2.6,雖然2.6提供較多的支援如IPv6與protocol ... etc.但相對的footprint就比較大.
5 @4 B1 v" B# y0 g+ Z  e9 g   1 N5 J) x1 d! F: ~% C5 l" ?; t
   - 在Linux kernel Menu Configure將不必要的module都不要選, 減少footprint2 B* V% K" e  y. s% v% F
   
) K; B$ a3 b9 u+ M   - 透過壓縮率較佳的程式,將Kernel/Application image壓縮到極緻化.藉由解壓縮後,將file system解壓縮到memory,而此做法通常稱為RAMDisk.: G4 a& z0 |8 ^' w4 ]
     Pros: 減少footprint size
6 ]$ B+ p  q) ~7 h) `     Cons: 浪費部分記憶體空間做RAMDisk虛擬磁碟使用,增加解壓縮程式的binary file size與解壓縮image時間
2 H  R+ e/ q( q; b- z+ V     2 ^8 p. @- ]5 `9 F+ z
     折衷的取代方案為CramFS,可以即時運算壓縮後的資料儲存位置然後解壓縮到記憶體中執行.
8 o+ Y! O* P5 _! V     缺點為CramsFS是一個唯讀的檔案系統 ,系統須在Flash保留空間做儲存資料之用。$ C4 Z5 U) p! z8 U
  L9 \5 s6 x' `

/ w3 x0 x( A3 w& E( h  m   1 m6 n, m! g' @- S/ ?" c) r
相關資料:3 T1 \/ M: x, h8 f0 \
http://www.synology.com.tw/cht/index.php& S8 P1 G5 ]5 J; \& p
http://www.eglibc.org/home
2 A" d8 C8 l: w4 K0 F1 S# ahttp://www.gnu.org/software/libc/* Q) H( b5 T7 }. s
http://www.uclibc.org// I% o7 o+ {9 |* S( D* q- o5 g

. `8 O5 t7 ?  _: Z1 ?3 P- Z4 u[ 本帖最後由 jacky002 於 2008-1-28 10:21 PM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-12-29 02:15 AM , Processed in 0.157009 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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