Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候. o9 A3 \0 E9 s: `
常用的作法是拿原廠的reference design當參考+ T$ [0 t! u8 Q
上頭component常常會換掉8 u9 U/ |1 W- C5 J7 u2 `
舊的平台和新的平台之間3 e, k/ @' M( ~* P- k! p$ o
常常某些部份只是位址的更動
$ k+ r7 @% e9 \( ~% r例如:本來GPU的base address是0x80001000換到0x80002000
# i" n9 {) A" chardware的功能和行為是一樣的
  d! b/ z, ]5 a6 z  i$ v0 ~! ?% K
面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用9 }1 s9 ?, ^/ g# k  q4 L
1) dynamical insert module 的方式將新的 base address 傳給 driver
+ c9 q% O0 E: H5 y3 ]: ?. e( ?  l或者' Q4 O8 ^) g5 s- J9 x: P& h
2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address
+ }2 C9 q3 }$ N% x* c9 b# J  h/ y9 w3 _8 K* d5 L3 b# i. W
在新一點的Linux的kernel導入的所謂的platform driver的概念8 W# A% k- x2 L5 S
概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/)
) f( R, p/ f+ k0 ^" X原本的driver放在./drivers/5 x. |+ j+ O# U2 j% a! F6 @
這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver
9 ?7 R5 ^8 L1 m6 A# g& s如此一來對developer來講就變得比較直覺
2 Z: v2 I! X( U6 G  E) f1 ]driver本身只要針對不同的設定去動作- i) X& Z; a: _5 a
不需要因為平台改變了
# a2 r7 W3 {' S  S' }就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利+ t* m3 Y4 G* Y" V8 U
因為不同的SoC經常需要對base address做調整0 p& a7 U; [" a, _/ A
不同的SoC只要從platform level傳遞變更的資訊給driver
* b- [4 C' d& ~* I2 G新的平台就可以得到driver的支援
  _7 F0 k) E, J: @8 F' ]而對下游的廠商來說* U% m; J: h; F) K; B' c
他們編譯新的kernel時,只要選擇對的platform
# [" i6 ~) G- i- r1 [就可以得到對的結果. h$ E+ V8 x$ y! d. }

  ?$ L: q4 b) O" R" G5 x由以上的介紹
* t6 @% i: o+ m2 t: r0 q/ r/ i我們可以得知platform driver需要透過兩個部分的支援
' U% S6 e9 V' d% z5 d1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。9 U* [1 j6 ]; [8 W
2) driver level - 控制硬體平台和實現功能。
' [! ^! R6 R2 K
/ @+ V/ C: l# d% J* Y' T6 Lstep 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
7 Y! L( a! J+ _" A, k* @% q. Kplatform_device_register( information ); 將所有platform用到的device和相關的資
  v5 F0 _/ U& S& T: g% N訊註冊。3 \" I( R; D9 |2 A

7 a) ~5 m* s) o! Ostep 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統
  C  F) k5 {8 F2 U裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
$ T0 {1 J) L& @來服務這個device。
! \0 i' I5 \7 f* @  x6 O0 f5 \* j: o" b# a1 T
明眼人應該不難發現. H& f' @; Q. J& V" u4 M
新的機制將hardware information和功能實作的分開了( m: a' E0 ?) A% q% Q$ S( A; {. a
資訊放到platform level規劃# U! [1 v; G0 W, h6 C, d& ?
將driver功能實作獨立出來' l. ?5 ]- g+ T# p( I& v4 J
(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-16 12:40 PM , Processed in 0.151009 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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