Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候
; B  n6 D# |# v3 x8 |常用的作法是拿原廠的reference design當參考2 ^( z$ a. |" U% Y
上頭component常常會換掉
2 p; N. k% C; L% X4 C* j9 n/ B舊的平台和新的平台之間; b, k/ r3 S9 U9 C" s4 M; I
常常某些部份只是位址的更動/ r4 N. z) ?% Z# B/ R/ C! M
例如:本來GPU的base address是0x80001000換到0x80002000- [& D6 u* b* s3 _  _. d6 ^
hardware的功能和行為是一樣的. s( `! H4 I' i) j( a- q

/ a8 i2 V1 d. O* ]2 J) ]6 X; k面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用  ]- j6 w3 O  }' j& Q4 k/ U  d2 E
1) dynamical insert module 的方式將新的 base address 傳給 driver
5 {6 J" I8 g# K1 ]" _& d或者
/ p3 ]  P3 e) v1 s, A2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address
5 {1 h0 O- o( P+ Y. S9 L1 h; q9 E$ T- A8 ]
在新一點的Linux的kernel導入的所謂的platform driver的概念9 K5 I0 W5 l8 ]4 p2 ]
概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/), l( V0 D3 M$ t( P" i; b- D
原本的driver放在./drivers/
& n' A: `6 m2 j6 I: T; s2 t' N這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver
5 n  ]( B1 q* R6 s# [6 H; U1 w) b6 L如此一來對developer來講就變得比較直覺
2 F. p" C5 R! U: {1 I  S/ udriver本身只要針對不同的設定去動作9 G8 u3 D: I4 F: E
不需要因為平台改變了- K9 ~$ h( e. A
就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 顯示全部樓層
這樣的機制對於生產SoC的vendor相當便利
8 Q! {+ ~! `# Q; ^) W5 s因為不同的SoC經常需要對base address做調整
) h7 J- V% d% [6 x5 Q不同的SoC只要從platform level傳遞變更的資訊給driver
2 o3 T" O. b" x) l* n1 u6 a新的平台就可以得到driver的支援
, D6 v$ s3 }) W, B/ a而對下游的廠商來說
# ?0 _8 P, i  c8 O" i' y7 `他們編譯新的kernel時,只要選擇對的platform+ z( t! T6 F; Z! S9 b, R" N& Q
就可以得到對的結果
" l: Z+ c2 ?- X2 L5 m' F% B3 K# ?4 N
由以上的介紹% y4 f2 R7 @% W, a$ `! B
我們可以得知platform driver需要透過兩個部分的支援* z: j; w3 l& t& }- F( Q% G
1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。7 j5 y' R, h  k% ~! v% d; m
2) driver level - 控制硬體平台和實現功能。
; h/ T1 V. q& b8 W7 J- Z; H8 f, p, x* r+ w! X
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
& F9 S6 x" e  V7 |  J6 R) yplatform_device_register( information ); 將所有platform用到的device和相關的資7 b1 H6 M, ]/ Q# E# U2 x- C
訊註冊。
  g! _5 h$ |% @' d! Q) t+ d# r# I/ {  Y( D+ w# x
step 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統: A1 P* M1 {9 {, F3 |8 y1 T
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
. F0 w# O, F/ a6 W! y( s( N% S; q來服務這個device。( r. w  c( c  s6 [3 ?0 Y8 v

5 v% J; J' N& j3 E0 y# D明眼人應該不難發現  ^9 l/ e3 f9 e
新的機制將hardware information和功能實作的分開了, Q7 b  S0 H1 K  l
資訊放到platform level規劃
7 ?) R% `- Q/ u- h" w5 ^" s將driver功能實作獨立出來* u, U% u2 j; j4 A: [
(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-19 02:53 PM , Processed in 0.101513 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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