|
2#
樓主 |
發表於 2009-12-20 15:19:34
|
只看該作者
這樣的機制對於生產SoC的vendor相當便利( {( A8 f, N6 e7 h) z8 O: X* _9 K
因為不同的SoC經常需要對base address做調整) s/ j: E' e6 [* m! U0 |3 ^
不同的SoC只要從platform level傳遞變更的資訊給driver4 o) Z) h% s7 S2 h
新的平台就可以得到driver的支援
9 v7 @# H, e% c而對下游的廠商來說
( o, m! d. l& J5 V他們編譯新的kernel時,只要選擇對的platform7 m7 y3 P% Y% W8 d& h
就可以得到對的結果0 q, N, b% d! E9 I
9 O8 P( \3 I& }0 m/ w* f
由以上的介紹
# O1 h v6 ]# r! M$ @我們可以得知platform driver需要透過兩個部分的支援
4 b/ [3 S) d; X% D1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。0 u8 [. ~* Y" j
2) driver level - 控制硬體平台和實現功能。9 b" m. W1 }2 o: O
, d& u$ t6 D* Z2 c% ystep 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫, ~7 D2 z) [1 j* A9 h
platform_device_register( information ); 將所有platform用到的device和相關的資$ L3 \4 G' o; w- c
訊註冊。
t% F. n( Y4 E$ I9 J* k+ q
3 O( ?$ ~3 r- g2 s, T7 K' dstep 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統1 N- F- k8 [+ U& v8 P
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
, ^% J" @/ p) `9 T A6 ^$ {5 c來服務這個device。- S" _0 t. d, {. B4 h2 c: q' C
7 t+ \8 @- j' @* A; r9 h3 j" k明眼人應該不難發現8 ^1 q/ Q; g' l4 z
新的機制將hardware information和功能實作的分開了
$ T" m, \: p1 Q6 O7 @# u資訊放到platform level規劃* W7 | p3 Q. F! z
將driver功能實作獨立出來
3 x2 i# H+ E8 r- [(其實有點像是C++導入了template的概念,將資料型別和演算法分開) |
|