|
當我們在重新規劃新的system or hardware platform的時候
9 g3 {- T8 z( _. r常用的作法是拿原廠的reference design當參考
* B/ c+ ]+ }0 P4 B% ?上頭component常常會換掉9 A2 @( o4 }' K# e
舊的平台和新的平台之間7 |, H' J- T( n% p7 O- `$ B O
常常某些部份只是位址的更動$ {/ j5 o. b) j9 w) J) y0 ?
例如:本來GPU的base address是0x80001000換到0x80002000
; P4 l; z2 p$ K8 v0 F7 ~hardware的功能和行為是一樣的% @: T* X* B% g4 o- t
# T, U1 H( J0 _" `
面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用
7 s; C) L! _1 @$ O! B, v% u1) dynamical insert module 的方式將新的 base address 傳給 driver
7 N; i/ A. G2 D `$ |" l或者. m; I+ G6 z7 u- v! c
2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address: F& J) @8 v* u3 g# T2 {/ l
p. K5 Z1 e, n3 A. x! }, P
在新一點的Linux的kernel導入的所謂的platform driver的概念
8 ?' R( t3 K" m; K b概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/)' t- T' z( K, o; j7 {3 Y% U; n
原本的driver放在./drivers/
% |; d- y7 E. F' N" m; H這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver0 H" y4 r( V5 j, I }3 O8 n
如此一來對developer來講就變得比較直覺7 E( s; G* F1 w- ]
driver本身只要針對不同的設定去動作# P* j) r8 `5 N6 |7 g. x8 e
不需要因為平台改變了4 n! K/ w. `- F+ J$ D6 {; R7 R
就改寫driver |
|