|
2#
樓主 |
發表於 2009-12-20 15:19:34
|
只看該作者
這樣的機制對於生產SoC的vendor相當便利
. Q9 ]: x4 r9 \2 x因為不同的SoC經常需要對base address做調整
5 Q0 L' @: l1 m X! ?. B不同的SoC只要從platform level傳遞變更的資訊給driver' a: i: t. ^* c/ y" J
新的平台就可以得到driver的支援4 P$ u! u' i" B2 D% r8 O" @
而對下游的廠商來說
0 P2 r, X6 p$ y2 p) Q他們編譯新的kernel時,只要選擇對的platform
4 s! Y) G |/ K就可以得到對的結果% a+ D; l& h% F! y3 r. N
& h8 T6 _) F/ ~3 o1 Q7 X由以上的介紹
& N# v; @( k4 {% r我們可以得知platform driver需要透過兩個部分的支援
! ?% C1 e, R$ m# c3 t/ b1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。# d- F( a8 }7 m5 j, o3 v
2) driver level - 控制硬體平台和實現功能。
( X' L# [2 j8 u' ]1 d* W0 _1 b2 i, o3 {& T2 |# k: w% Z
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫" X$ y" u: x5 s+ v$ P) D
platform_device_register( information ); 將所有platform用到的device和相關的資' N) ^1 a) x- L$ G1 o3 @1 E7 Y
訊註冊。4 \) o, ?6 g" h7 V( B& A' y
; b7 `) Z! K/ Z* P4 ^# x
step 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統0 J" M: ^- Q5 f" K8 o' j7 V) n% K1 `+ w
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
2 o9 {) J- O9 g# J5 A& G+ {* O來服務這個device。
+ H% X- K& K+ W* k
/ `/ t9 ^2 d3 z! r明眼人應該不難發現 L: j6 ^/ s1 o) O, a* U
新的機制將hardware information和功能實作的分開了
7 g, R& m! y4 K- `( j/ n" [" k" L資訊放到platform level規劃
, Y- h1 J. E: {5 c7 Y將driver功能實作獨立出來. w( t: |# i" }/ g3 n& p/ ^4 Q
(其實有點像是C++導入了template的概念,將資料型別和演算法分開) |
|