Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候
, `( r$ Z1 k  A+ A3 t: r' m% s常用的作法是拿原廠的reference design當參考0 c2 y2 |# h9 b  Z
上頭component常常會換掉* {! z5 I5 N8 N( z# b7 T
舊的平台和新的平台之間* U/ F& h% A( y3 J5 M0 Y
常常某些部份只是位址的更動: Y% T) y; e+ W1 Y$ s
例如:本來GPU的base address是0x80001000換到0x80002000: ~$ w6 I( V0 Q, l5 `
hardware的功能和行為是一樣的  O+ d; ]/ X1 C, ]0 p) h9 @+ p( [

1 u% Q; ]1 I' h3 g. i面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用4 z6 [7 U  K0 n! i1 e
1) dynamical insert module 的方式將新的 base address 傳給 driver& R5 @: \; @1 U; {# u
或者
1 Q6 O6 p$ H) \+ P  z1 a2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address) @1 v- V% ^% Z
7 ]+ w  S/ B6 Q; ^1 J
在新一點的Linux的kernel導入的所謂的platform driver的概念
# D( h+ n6 j5 e0 @- o3 V概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/)/ h$ y- b- ]! f( w0 x7 K) \/ B, ?
原本的driver放在./drivers/& [' ^8 [$ O& t; X8 X7 o
這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver
, G* v0 x4 P% k! ?1 f+ y如此一來對developer來講就變得比較直覺
' `% o9 E* l* C' T) N1 zdriver本身只要針對不同的設定去動作* M/ k* q6 P9 X# F
不需要因為平台改變了. _$ m1 u7 q. Y: {- T- C
就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利
4 p1 F; y" l0 _5 r9 Q因為不同的SoC經常需要對base address做調整
) y9 j- V" V% M8 z; k1 o- ]" m8 r/ @- F不同的SoC只要從platform level傳遞變更的資訊給driver
1 a, g/ q( V+ [" ], x" d1 ^新的平台就可以得到driver的支援
* `- u! ]. [1 a% M$ Y而對下游的廠商來說
. G  f, l& H6 e8 i他們編譯新的kernel時,只要選擇對的platform$ k- \" p8 s; k) s
就可以得到對的結果
2 I- f: g- x$ C3 G, e' o/ N* P
/ N0 b# ~0 b3 [由以上的介紹: v' V" `6 {. e
我們可以得知platform driver需要透過兩個部分的支援
( q- l$ R4 U8 }$ V/ N1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。
' r6 w. q/ ~$ `* O/ W! ]2) driver level - 控制硬體平台和實現功能。0 D6 Z% {% ^* Y; ^" P1 S' m
2 J9 ?8 S; Z5 f* ]
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
' f# N- {' [& d& J; \; B* m& Cplatform_device_register( information ); 將所有platform用到的device和相關的資% }' q# s9 }3 t3 p  ^, k7 r: Z& n
訊註冊。5 ^5 i* p* f9 q) ~. N
) g/ W( w% ^, L8 _2 p# A
step 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統2 Y* r& D0 b+ _: q' D$ b. Y
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
6 {2 r9 m- k9 i2 ]8 U5 \  B  C來服務這個device。0 f2 }' }3 M+ T: K- J8 u# I' e- q
' r3 e; M/ s# Q* `# p
明眼人應該不難發現+ x/ D" |1 E" c
新的機制將hardware information和功能實作的分開了
# F) V* X; j' b. i/ f. }. i資訊放到platform level規劃
# M" i7 J  n& |5 K$ B將driver功能實作獨立出來! ?3 ]5 d# ?$ w: K
(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-1 08:33 AM , Processed in 0.104513 second(s), 15 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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