Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候
/ {( T! X1 L; g. c4 }2 V常用的作法是拿原廠的reference design當參考
3 I. O: v/ O5 [1 W- A1 T上頭component常常會換掉
' k, l* R0 m# D* j舊的平台和新的平台之間6 _1 J* @- i  X+ K
常常某些部份只是位址的更動, e8 G: d. V9 d. i! u4 U
例如:本來GPU的base address是0x80001000換到0x80002000
: O. \  G0 Q4 V* M: @* Mhardware的功能和行為是一樣的& A9 C" S' U" i, I
- S0 H- q( |+ k' M3 T
面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用
' t. O$ t6 d+ ]" l1) dynamical insert module 的方式將新的 base address 傳給 driver0 V- {" X  S7 C8 ?' _2 X: [) I
或者
4 y) e2 I, u3 X+ ]& J2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address" v. u3 q3 a/ d" m+ J; Y& E6 C: y
1 C  S! s' H, G* C4 `( L3 p* A
在新一點的Linux的kernel導入的所謂的platform driver的概念
, m2 g' b5 \  t# `3 r8 E+ u概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/)0 c8 E: w2 w$ n' ]  @7 C
原本的driver放在./drivers/- N  e& X9 j; [. {0 i8 D4 E- U$ D
這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver! ^  y/ d& H  H, K* x2 E( V
如此一來對developer來講就變得比較直覺3 Y$ P+ h  j4 H: |+ y6 O
driver本身只要針對不同的設定去動作9 Y+ S. ]3 W- w7 e. u
不需要因為平台改變了
. |  \! j5 q9 Z2 D就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利
. Q9 ]: x4 r9 \2 x因為不同的SoC經常需要對base address做調整
5 Q0 L' @: l1 m  X! ?. B不同的SoC只要從platform level傳遞變更的資訊給driver' a: i: t. ^* c/ y" J
新的平台就可以得到driver的支援4 P$ u! u' i" B2 D% r8 O" @
而對下游的廠商來說
0 P2 r, X6 p$ y2 p) Q他們編譯新的kernel時,只要選擇對的platform
4 s! Y) G  |/ K就可以得到對的結果% a+ D; l& h% F! y3 r. N

& h8 T6 _) F/ ~3 o1 Q7 X由以上的介紹
& N# v; @( k4 {% r我們可以得知platform driver需要透過兩個部分的支援
! ?% C1 e, R$ m# c3 t/ b1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。# d- F( a8 }7 m5 j, o3 v
2) driver level - 控制硬體平台和實現功能。
( X' L# [2 j8 u' ]1 d* W0 _1 b2 i, o3 {& T2 |# k: w% Z
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫" X$ y" u: x5 s+ v$ P) D
platform_device_register( information ); 將所有platform用到的device和相關的資' N) ^1 a) x- L$ G1 o3 @1 E7 Y
訊註冊。4 \) o, ?6 g" h7 V( B& A' y
; b7 `) Z! K/ Z* P4 ^# x
step 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統0 J" M: ^- Q5 f" K8 o' j7 V) n% K1 `+ w
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
2 o9 {) J- O9 g# J5 A& G+ {* O來服務這個device。
+ H% X- K& K+ W* k
/ `/ t9 ^2 d3 z! r明眼人應該不難發現  L: j6 ^/ s1 o) O, a* U
新的機制將hardware information和功能實作的分開了
7 g, R& m! y4 K- `( j/ n" [" k" L資訊放到platform level規劃
, Y- h1 J. E: {5 c7 Y將driver功能實作獨立出來. w( t: |# i" }/ g3 n& p/ ^4 Q
(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-16 05:33 AM , Processed in 0.140400 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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