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的時候
$ V+ q6 c! R2 T+ X% b; l常用的作法是拿原廠的reference design當參考& C4 u+ K4 c1 V! v
上頭component常常會換掉
' G5 E! l7 k: w* N舊的平台和新的平台之間
6 a& N. _; O; O/ P. w) K常常某些部份只是位址的更動
) ^( i& {2 ]; t7 ?. p2 q例如:本來GPU的base address是0x80001000換到0x80002000
1 |. E8 Z6 f, ~/ V7 khardware的功能和行為是一樣的
$ K1 U7 t: K* g+ W# A5 T$ z: C$ g. {0 P$ |6 }
面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用4 _/ x1 L& }# S/ d, d  f: {
1) dynamical insert module 的方式將新的 base address 傳給 driver7 j& D$ G2 A  G$ s8 A3 H7 X
或者
5 V4 P# ?5 k/ Q2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address: a) f) y) K& _# M8 P) x1 l

; k. I5 f( V" ~在新一點的Linux的kernel導入的所謂的platform driver的概念
$ r. r* y* y( |6 B概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/)
, }+ c" \( M" f4 S( S$ ]+ M原本的driver放在./drivers/& F7 R' U0 u+ S* h" H
這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver
' w  z5 |! P- N1 t如此一來對developer來講就變得比較直覺9 u. a3 Z" W( ~' ?6 _; C2 g
driver本身只要針對不同的設定去動作- L! ]3 ^2 D; @' b9 w
不需要因為平台改變了% L# t5 R8 s# e. M" f5 ~* F) u
就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利9 ?* E/ N* r  }1 s" {$ n: }
因為不同的SoC經常需要對base address做調整' `7 V  `( t3 {) F; Z6 I; t' b; x
不同的SoC只要從platform level傳遞變更的資訊給driver) I& P) D0 \0 B8 s' `& A
新的平台就可以得到driver的支援
! y8 E) l' B' i! d* l+ Q0 ~而對下游的廠商來說6 v- h  L) b5 H! v
他們編譯新的kernel時,只要選擇對的platform
" y3 a7 c+ a3 [3 l9 J就可以得到對的結果
. y. o5 x1 l5 ^6 J+ @2 f
' Q, ^7 g" u/ e: ]2 w  [: }/ u由以上的介紹
6 D2 A# Q/ ^  P: H/ _6 L我們可以得知platform driver需要透過兩個部分的支援( T6 x1 I& j) a4 P, l; q
1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。
! P6 m: [/ q, o2 N6 u2) driver level - 控制硬體平台和實現功能。0 S: z% F1 G% I6 J! g
8 m8 v2 q/ F; x' R  j! p2 ]$ ?
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
% Y' I$ q% `/ jplatform_device_register( information ); 將所有platform用到的device和相關的資
3 L  \; Q( \& |1 D/ q: t5 x3 {訊註冊。) U. }6 q; `& c( U: w& H4 {, F

: z, }3 A3 \: D) h$ Estep 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統
" a1 f4 R7 z' B, ^) R( |5 L& p裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
6 x3 e( d" p- y! ^) q/ E2 J來服務這個device。
) t/ s6 P$ M+ v% H1 {; Q) [* Y% `+ N
明眼人應該不難發現- S, R5 {- S& |* n$ o8 q5 }, c: {
新的機制將hardware information和功能實作的分開了
; a8 H. A- P  f! v" D資訊放到platform level規劃. ^3 `# X- e' H% K
將driver功能實作獨立出來
% ?* W3 R% W- Y. z  ?" t(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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