Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候
) J. t; |" }8 q常用的作法是拿原廠的reference design當參考
' h1 X+ b# t& S/ t2 Q+ Q1 w, ]3 V上頭component常常會換掉7 I$ h7 y7 m5 l
舊的平台和新的平台之間
* v9 N5 J3 `7 A! t- Y/ _! c常常某些部份只是位址的更動
& w  L' v1 N( L* ]6 W- E) I4 T例如:本來GPU的base address是0x80001000換到0x80002000
. Z; n. f* e8 \6 `hardware的功能和行為是一樣的
! h% w% f: J( X4 l+ |9 a
% n" b( J5 ?4 w, f, k3 G面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用
; B2 q* F6 E9 S# @- r1) dynamical insert module 的方式將新的 base address 傳給 driver
" _% P& [- K: [或者  N+ Y& n  U7 k$ v( o- z6 `
2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address# i+ o7 c! k  b2 Z

8 J. o! u8 N1 S1 R" d8 a$ L& y在新一點的Linux的kernel導入的所謂的platform driver的概念9 [" r& L; W, J) P9 s. q$ X
概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/): I; B# G$ ?2 o9 r
原本的driver放在./drivers/
/ E% B9 M& p3 N* d! Y這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver
  {& z, V7 x" L6 B0 d/ D$ i如此一來對developer來講就變得比較直覺
5 L" ^. w$ Q; ?, edriver本身只要針對不同的設定去動作  T1 ^) x" I8 b
不需要因為平台改變了' `" [4 o; F/ i3 y3 c& f! X8 }
就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
1#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利! Q( r  I' ^& z" x# J* N& l
因為不同的SoC經常需要對base address做調整
. m: q! P3 d9 R  i8 \  r不同的SoC只要從platform level傳遞變更的資訊給driver4 O3 x3 _3 ]8 w4 M  K" I8 o
新的平台就可以得到driver的支援8 u5 e% ~8 D7 z5 `% w3 U
而對下游的廠商來說# C# M- `' S1 w$ a: S, `, X7 J
他們編譯新的kernel時,只要選擇對的platform3 k7 O. F: ^" r8 w' n
就可以得到對的結果
( v' T& w6 h" e! B* S/ j; n/ n! T( M, b- S3 C
由以上的介紹4 T5 g- S+ ?0 t# p
我們可以得知platform driver需要透過兩個部分的支援
, M: u- P6 p- k8 S# I1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。# D6 ?7 c  ^8 R" [: M
2) driver level - 控制硬體平台和實現功能。
, ~0 t: b0 H4 e5 a
5 Z( M( Z( m4 P: ?step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
3 @+ W5 G5 C# l, J2 c( O+ Lplatform_device_register( information ); 將所有platform用到的device和相關的資& p" T! Z$ c4 L+ i, H  j" \
訊註冊。
( m- `- _+ b9 B7 ?
$ ]! {2 M4 X+ ?1 {+ M8 k  Ostep 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統% {7 p* s* Z( M2 ~2 I% E
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
1 W1 [, w5 w+ l0 B+ }來服務這個device。/ J( y0 F$ ?( k6 `  f# o1 r4 E

" p+ P8 p. R0 B( s" ~& H/ M$ u明眼人應該不難發現
- o3 a3 n1 g* g3 C3 }新的機制將hardware information和功能實作的分開了  p- U* O( k$ y1 i4 B; F
資訊放到platform level規劃
7 ^$ n7 [" ^" J2 G5 f將driver功能實作獨立出來
; V: e5 E: O9 }- F9 i1 I(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-16 08:11 AM , Processed in 0.140401 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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