Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的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
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利
9 |" Q7 n3 ]% U* \/ ]- T因為不同的SoC經常需要對base address做調整5 o) r3 H8 b8 }: L) k+ f
不同的SoC只要從platform level傳遞變更的資訊給driver
; c8 `0 I( D7 R) ]1 Q0 j新的平台就可以得到driver的支援
0 O+ g% K* A( p2 h" y5 T3 r1 h而對下游的廠商來說6 G$ @$ J) I3 Q, a# e/ Z
他們編譯新的kernel時,只要選擇對的platform' W; i) B/ h$ [/ {/ ?% ?/ ~1 @  |
就可以得到對的結果
$ T5 Z' \+ ~/ F8 M4 X/ n1 _6 j  A* q/ _. `" s( N
由以上的介紹
% T* I' K$ {% f2 m! ^/ M% l# w2 k我們可以得知platform driver需要透過兩個部分的支援
9 ~$ x5 U6 a% F1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。
. ^( Q0 _) S9 [; v' g1 k: J2) driver level - 控制硬體平台和實現功能。+ l9 H3 l, O/ \+ m* v9 y& V
! G) \7 Q2 q1 m+ X/ {7 `* O/ N; c
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
4 B  m& E4 Q- f; Z1 Qplatform_device_register( information ); 將所有platform用到的device和相關的資- D% y3 ]# _# i# f
訊註冊。$ h: E% c9 X" p
# V  P+ ?6 l* r# C0 i) p3 z
step 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統
' L8 m7 b# V7 A9 A  ^/ s裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
+ Q  ?& s; y" m( P% W* g來服務這個device。& f! _8 X. A) M1 K

( O3 |  N$ T' `& q明眼人應該不難發現; Z- S2 B) l0 g$ q3 A# U1 ?7 \
新的機制將hardware information和功能實作的分開了
' @" \2 M. z9 j6 I& j# E; t資訊放到platform level規劃+ M9 v! |- y( C
將driver功能實作獨立出來' w! m  X( v; @$ ~% t% j
(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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