|
2#
樓主 |
發表於 2009-12-20 15:19:34
|
只看該作者
這樣的機制對於生產SoC的vendor相當便利
i- |& O# k1 k, D因為不同的SoC經常需要對base address做調整
, L" j. z5 l5 s8 H8 \! S不同的SoC只要從platform level傳遞變更的資訊給driver4 T- p( Y8 I! ]; R
新的平台就可以得到driver的支援
- R+ a2 j6 [+ e, d+ Q3 D而對下游的廠商來說# f" f* u a6 ~ d1 q! _8 Y
他們編譯新的kernel時,只要選擇對的platform
) [1 s2 h0 G7 f" j就可以得到對的結果% d) k2 {+ m+ C8 }' X/ Z9 b' C
1 c4 ~1 U$ A% J; ?1 o/ V
由以上的介紹
0 ~' J$ p1 h" `$ x" \/ F" [我們可以得知platform driver需要透過兩個部分的支援
; V7 Q8 T- I r2 N1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。4 N2 A8 E( Z* e- b
2) driver level - 控制硬體平台和實現功能。
% K, x& A& H0 s$ [* U/ {7 K. ?
0 p! ?: u: A9 C3 }step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫" P' M& } q/ c' Z
platform_device_register( information ); 將所有platform用到的device和相關的資8 x! V0 H/ M# p& p @; `
訊註冊。
# g8 J0 t' W7 C8 m) L
9 s/ ^% k. T7 ?) v3 xstep 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統
0 c i9 ~& m1 g' x+ O+ N( @, \% f裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
+ S4 R: [0 [3 q; [$ B4 E' q5 i來服務這個device。+ U) }6 |% c1 H3 Q! P8 _
$ u. a g$ \/ T B) d: |
明眼人應該不難發現
2 G4 J. g3 a9 c( Y$ t$ z0 Y新的機制將hardware information和功能實作的分開了9 c- H; m& h' A ?
資訊放到platform level規劃& z9 y, R0 u( F6 ?5 B# ^
將driver功能實作獨立出來7 Y3 }' ^% T# U1 r2 C) r: P
(其實有點像是C++導入了template的概念,將資料型別和演算法分開) |
|