Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-28 22:20:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這篇是版主前陣子所寫的一篇文章,如果各位網友有其他的獨特見解與看法,歡迎一起加入來討論。
- @- c' b$ T+ C. S: f! `. }) A8 g" E$ o3 `
在崁入式開發環境中 , 最常遭遇的環境之一就是編譯出來的footprint太大 , 而導致必須採用較大的Flash儲存而形成成本的增加。6 x$ G" t# v2 ?6 E: P- H; A
為了要解決此類的問題 , 一般會有以下幾種作法:
( s7 C# f; W) V- A6 G( ]  C" y1. 僅使用boot loader在Flash device , 將 Kernel/Application image儲存於硬碟或是USB Flash /SD等類似的儲存媒體。
0 }7 z7 A5 h" K2 a3 I9 O   此類的解決方案大多是以NAS相關的產品居多 , 並且有比較完整的配套方式。譬如網路儲存大廠群暉科技(synology)提供顧客所附加的工具程式 , 就具備將硬碟格式化後並將Kernel/Application image置於硬碟的固定位置 , Boot loader執行結束後就跳到硬碟去執行此image.
2 C6 }1 @0 H" i- l& o   + E  \& m6 {6 Z
2. 選擇適當的 C Library , 可以使編譯出來的image也同步縮小. 但這會有一些問題產生 , 也可能將開發時間加長。
* U% {2 }+ |3 ~7 Z   以下介紹三種不同的 C Library5 i8 k$ y. }1 g
   GLibc:一般稱之為 GNU C Library , 是目前在Desktop Linux最受普羅大眾所喜愛與採用
1 u+ l) n3 `6 p# P       Pros: 函式庫支援最多而且沒有相容性問題$ m6 e9 i' E/ F6 g" a" T3 V! R
       Cons: 編譯出來的footprinte過大 不適用於產品量產化* D0 w6 s% e9 S! w6 z
    2 `( L- l: b$ [2 t4 Q) n$ N
   uCLibc: 目前在崁入式Linux開發環境中 , 最常被拿來使用的C Libary. 一般而言 , 只要將source code在uCLibc重新編譯就可以在Kernel/Application執行 , 但open source並不一定會用uCLibc編譯 , 所以有時會花很多時間解決相容性的問題。( ?$ ~4 v+ D: |; ~% \0 n9 w6 \, t5 L
       Pros: 編譯出來的footprint很小 最適用於產品量產化
' @5 x; g8 Q% M, A, T8 ^       Cons: 函式庫支援較少而且會有相容性問題# l. I6 T% p# c, e4 d, g, _
   7 f5 y6 t) l8 N* E, |
   EGLibc: 全名為Embedded GLIBC , 是不同版本的GNU C Library 主要以崁入式開發環境為考量。目的是要將source與binary都能相容於GLibc.而且對縮小code size與結構劃設定都有比GLibc改善+ D# T1 B; ?- i% {2 |. `
       Pros: 函式庫支援最多而且沒有相容性問題4 X5 W3 v4 }, d4 h) T
       Cons: 編譯出來的footprinte過大 不適用於產品量產化   
/ l- h  a! F3 b! R/ f   
: c) b( L1 p' O: U   基本上 , 一樣的source code在此三種C Library中 , 編譯後所表現出的差異為:
9 t& D4 x6 D: Z( Y) v* m4 n   Footprint size(由大到小): GLibc > EGLib >  uCLibc
& Z, Y6 D% C- \6 y# ^, {   Compatibility (由最佳到次之): GLibc = EGLib >  uCLibc9 i: R- u8 s( z$ B
   
  ]0 Q7 N# |% v. Z) G  m3. 另外, 還有一些技巧可以應用在縮減footprint的大小. 在此列舉一些常用方式提供參考。& H# w) T) p. q" f4 l2 F# N8 a
   - 靜態連結 (Static link) vs.動態連結(Dynamic Link)
  w8 f) M7 d) V" y! e1 }8 L* F+ r0 @     Footprint size(由大到小): 靜態連結 (Static link) > 動態連結(Dynamic Link)! L8 _5 }5 m5 v& }
     Systemoverhead(由大到小): 動態連結(Dynamic Link) > 靜態連結 (Static link)
: u9 b2 L! W$ @, Y0 j5 l     取決於所需與目的所在.
0 x0 `8 m* x# F6 N( u      - w4 @: g0 r; A' u# s
   - 可以使用Linux Kernel 2.4 就不要用 2.6,雖然2.6提供較多的支援如IPv6與protocol ... etc.但相對的footprint就比較大.
! E/ l* |* b1 r7 V; ?   
! L* V  J0 {1 t" \   - 在Linux kernel Menu Configure將不必要的module都不要選, 減少footprint
# g! I7 z  F6 Q9 q9 }! i8 U# h+ x   : u; j9 h0 L8 @0 c* |6 r7 F6 l& Y
   - 透過壓縮率較佳的程式,將Kernel/Application image壓縮到極緻化.藉由解壓縮後,將file system解壓縮到memory,而此做法通常稱為RAMDisk.+ i9 z2 Z' L1 t. b1 b% e, I  R+ ~
     Pros: 減少footprint size' `0 d$ F% t% h& f! F4 G; s+ N+ O
     Cons: 浪費部分記憶體空間做RAMDisk虛擬磁碟使用,增加解壓縮程式的binary file size與解壓縮image時間. {! B$ p! \: a5 H
     3 N+ E. K6 O5 w
     折衷的取代方案為CramFS,可以即時運算壓縮後的資料儲存位置然後解壓縮到記憶體中執行. & J! b, C( x/ ?! \& m4 E+ X* e
     缺點為CramsFS是一個唯讀的檔案系統 ,系統須在Flash保留空間做儲存資料之用。& I5 K* H% c$ M- W
0 L: D7 j7 i% O; K, G
# B' d/ Q6 O7 l# H- }! j
   
6 X+ M6 z4 o7 `相關資料:
5 s- ?$ l$ \- W9 A! _; `( Nhttp://www.synology.com.tw/cht/index.php( C& r: E( l( J' H( }
http://www.eglibc.org/home% f$ s: s% K& J+ C6 ~
http://www.gnu.org/software/libc/
3 P& O% T" I# e7 {8 `http://www.uclibc.org/" w# z+ {+ C8 a- ^
  Z* {# e5 O: k8 d
[ 本帖最後由 jacky002 於 2008-1-28 10:21 PM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-12-29 02:48 AM , Processed in 0.155009 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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