|
2#
樓主 |
發表於 2009-12-20 15:19:34
|
只看該作者
這樣的機制對於生產SoC的vendor相當便利
V5 L5 }/ P$ z& o& o0 A因為不同的SoC經常需要對base address做調整
8 f! s# `$ H) f不同的SoC只要從platform level傳遞變更的資訊給driver$ s8 u: V; B: a! N0 ]: d
新的平台就可以得到driver的支援
2 Q) j, T' P8 r& E而對下游的廠商來說0 G+ i) F7 x- H' M$ J; D
他們編譯新的kernel時,只要選擇對的platform1 i. j: E( \! N2 |
就可以得到對的結果9 w( k! ~% w3 C* }
* M, e% ] H# g1 |由以上的介紹
4 J8 G* o8 j2 C- c# n8 }5 g L我們可以得知platform driver需要透過兩個部分的支援, P9 b* ]0 ?1 Z, R/ R) ?& ^
1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。 q+ n0 x6 C% f9 x" x: P: x
2) driver level - 控制硬體平台和實現功能。
% T: n8 [0 m/ r" a$ k; j9 F* `. Q! g8 ~+ V2 x
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫+ N. y" B0 {! E! e$ y B' S6 ^! t
platform_device_register( information ); 將所有platform用到的device和相關的資
3 K5 z. J, [8 ?$ {訊註冊。* Q- E9 H( E! i5 s, c
, J# q+ g. Q* h+ y3 t/ X2 Istep 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統! P( n) o$ K/ ]+ E1 g3 g
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
1 g& `4 n' i1 H T7 Y3 g5 B0 v來服務這個device。
$ j0 Q$ e8 i7 ]. M U" [; \5 B/ x/ p8 S
明眼人應該不難發現- n. g/ S8 \9 X, v( m/ X& }
新的機制將hardware information和功能實作的分開了, \' j8 \' B( l. A7 A
資訊放到platform level規劃
1 I, ]) j4 b- U0 R* l5 }* [- D將driver功能實作獨立出來 h3 |7 O$ | J) n- W
(其實有點像是C++導入了template的概念,將資料型別和演算法分開) |
|