|
2#
樓主 |
發表於 2009-12-20 15:19:34
|
只看該作者
這樣的機制對於生產SoC的vendor相當便利+ t* m3 Y4 G* Y" V8 U
因為不同的SoC經常需要對base address做調整0 p& a7 U; [" a, _/ A
不同的SoC只要從platform level傳遞變更的資訊給driver
* b- [4 C' d& ~* I2 G新的平台就可以得到driver的支援
_7 F0 k) E, J: @8 F' ]而對下游的廠商來說* U% m; J: h; F) K; B' c
他們編譯新的kernel時,只要選擇對的platform
# [" i6 ~) G- i- r1 [就可以得到對的結果. h$ E+ V8 x$ y! d. }
?$ L: q4 b) O" R" G5 x由以上的介紹
* t6 @% i: o+ m2 t: r0 q/ r/ i我們可以得知platform driver需要透過兩個部分的支援
' U% S6 e9 V' d% z5 d1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。9 U* [1 j6 ]; [8 W
2) driver level - 控制硬體平台和實現功能。
' [! ^! R6 R2 K
/ @+ V/ C: l# d% J* Y' T6 Lstep 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
7 Y! L( a! J+ _" A, k* @% q. Kplatform_device_register( information ); 將所有platform用到的device和相關的資
v5 F0 _/ U& S& T: g% N訊註冊。3 \" I( R; D9 |2 A
7 a) ~5 m* s) o! Ostep 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統
C F) k5 {8 F2 U裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
$ T0 {1 J) L& @來服務這個device。
! \0 i' I5 \7 f* @ x6 O0 f5 \* j: o" b# a1 T
明眼人應該不難發現. H& f' @; Q. J& V" u4 M
新的機制將hardware information和功能實作的分開了( m: a' E0 ?) A% q% Q$ S( A; {. a
資訊放到platform level規劃# U! [1 v; G0 W, h6 C, d& ?
將driver功能實作獨立出來' l. ?5 ]- g+ T# p( I& v4 J
(其實有點像是C++導入了template的概念,將資料型別和演算法分開) |
|