|
2#
樓主 |
發表於 2009-12-20 15:19:34
|
只看該作者
這樣的機制對於生產SoC的vendor相當便利
4 p1 F; y" l0 _5 r9 Q因為不同的SoC經常需要對base address做調整
) y9 j- V" V% M8 z; k1 o- ]" m8 r/ @- F不同的SoC只要從platform level傳遞變更的資訊給driver
1 a, g/ q( V+ [" ], x" d1 ^新的平台就可以得到driver的支援
* `- u! ]. [1 a% M$ Y而對下游的廠商來說
. G f, l& H6 e8 i他們編譯新的kernel時,只要選擇對的platform$ k- \" p8 s; k) s
就可以得到對的結果
2 I- f: g- x$ C3 G, e' o/ N* P
/ N0 b# ~0 b3 [由以上的介紹: v' V" `6 {. e
我們可以得知platform driver需要透過兩個部分的支援
( q- l$ R4 U8 }$ V/ N1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。
' r6 w. q/ ~$ `* O/ W! ]2) driver level - 控制硬體平台和實現功能。0 D6 Z% {% ^* Y; ^" P1 S' m
2 J9 ?8 S; Z5 f* ]
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
' f# N- {' [& d& J; \; B* m& Cplatform_device_register( information ); 將所有platform用到的device和相關的資% }' q# s9 }3 t3 p ^, k7 r: Z& n
訊註冊。5 ^5 i* p* f9 q) ~. N
) g/ W( w% ^, L8 _2 p# A
step 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統2 Y* r& D0 b+ _: q' D$ b. Y
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
6 {2 r9 m- k9 i2 ]8 U5 \ B C來服務這個device。0 f2 }' }3 M+ T: K- J8 u# I' e- q
' r3 e; M/ s# Q* `# p
明眼人應該不難發現+ x/ D" |1 E" c
新的機制將hardware information和功能實作的分開了
# F) V* X; j' b. i/ f. }. i資訊放到platform level規劃
# M" i7 J n& |5 K$ B將driver功能實作獨立出來! ?3 ]5 d# ?$ w: K
(其實有點像是C++導入了template的概念,將資料型別和演算法分開) |
|