Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 2850|回復: 1
打印 上一主題 下一主題

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候8 h" I! d/ B# X% y9 l1 `5 g* B
常用的作法是拿原廠的reference design當參考$ B. t& k6 r  u2 ~; \/ r5 l: R
上頭component常常會換掉/ s; J: S' g6 F% G$ b! F# \& ]7 B
舊的平台和新的平台之間
4 N" M) A+ L8 e9 [% e常常某些部份只是位址的更動
5 ]! D4 f- y% o" w( D1 ~例如:本來GPU的base address是0x80001000換到0x80002000
- A4 `5 Z- w) M. X5 P0 xhardware的功能和行為是一樣的0 n, s) U. S  r
7 b1 s6 a* d# H/ Z* Z9 G7 W
面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用
& C( b) E7 N! B. C% D+ T. s6 `1) dynamical insert module 的方式將新的 base address 傳給 driver
+ X9 u% c1 {/ U或者
8 k  K$ w1 h. r2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address
, p& w# B2 |2 W$ Q* M3 l' }( J( ~2 {: ]3 o" J: z% J
在新一點的Linux的kernel導入的所謂的platform driver的概念+ t1 K: z1 D: t0 C" N% J
概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/)
& [8 g1 A/ S7 f# T% j原本的driver放在./drivers/$ G! _' M+ |( y' P% Q) B
這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver
8 l9 o% E1 Q' z- L3 M1 `$ ~2 p6 F如此一來對developer來講就變得比較直覺
! [; {6 I0 o' f1 U4 S7 kdriver本身只要針對不同的設定去動作
) G0 Q# {) ~) \! h( [4 e/ B不需要因為平台改變了* c( a  V3 G+ x6 U* `
就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
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的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-11-16 10:47 AM , Processed in 0.146008 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表