Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候/ S4 S( s$ k# ?8 a0 {+ q( N# [
常用的作法是拿原廠的reference design當參考
1 B# }' z- g: f! q7 P0 k上頭component常常會換掉7 ]" m, H8 k& ]4 a0 s
舊的平台和新的平台之間2 A' o/ s* Y& ^. c5 ]
常常某些部份只是位址的更動1 L  \, m, i, [( p  G' Y
例如:本來GPU的base address是0x80001000換到0x800020006 y& I6 ]9 u9 u" F0 D3 ~
hardware的功能和行為是一樣的; j/ X; n2 ^: J/ O, U' `6 u6 a

& b! z" v- N; c# \" N9 Z! C面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用4 ^4 H# F1 d" E4 l- c% i( W
1) dynamical insert module 的方式將新的 base address 傳給 driver
9 v( d9 n. }- q5 y9 }$ a* m或者
8 J# ^) u2 R0 S3 f2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address+ E5 g/ g+ P2 q5 E

7 m. M' C2 t$ Q4 L/ `1 n在新一點的Linux的kernel導入的所謂的platform driver的概念
8 }  }3 \0 v! {! b& @. B概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/); G# R( G, d* [6 b. I0 o. l. `  C
原本的driver放在./drivers/
" H3 c0 N' A# P3 J" u/ T2 ?這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver
+ |4 U6 B- x0 B7 P0 K. d如此一來對developer來講就變得比較直覺
' N3 _' Z5 d& L. K( Y9 G: zdriver本身只要針對不同的設定去動作
8 E/ k! G# I& F  W+ C( p1 j不需要因為平台改變了
' w4 G/ O6 J/ W( g+ M就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利( {( A8 f, N6 e7 h) z8 O: X* _9 K
因為不同的SoC經常需要對base address做調整) s/ j: E' e6 [* m! U0 |3 ^
不同的SoC只要從platform level傳遞變更的資訊給driver4 o) Z) h% s7 S2 h
新的平台就可以得到driver的支援
9 v7 @# H, e% c而對下游的廠商來說
( o, m! d. l& J5 V他們編譯新的kernel時,只要選擇對的platform7 m7 y3 P% Y% W8 d& h
就可以得到對的結果0 q, N, b% d! E9 I
9 O8 P( \3 I& }0 m/ w* f
由以上的介紹
# O1 h  v6 ]# r! M$ @我們可以得知platform driver需要透過兩個部分的支援
4 b/ [3 S) d; X% D1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。0 u8 [. ~* Y" j
2) driver level - 控制硬體平台和實現功能。9 b" m. W1 }2 o: O

, d& u$ t6 D* Z2 c% ystep 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫, ~7 D2 z) [1 j* A9 h
platform_device_register( information ); 將所有platform用到的device和相關的資$ L3 \4 G' o; w- c
訊註冊。
  t% F. n( Y4 E$ I9 J* k+ q
3 O( ?$ ~3 r- g2 s, T7 K' dstep 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統1 N- F- k8 [+ U& v8 P
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
, ^% J" @/ p) `9 T  A6 ^$ {5 c來服務這個device。- S" _0 t. d, {. B4 h2 c: q' C

7 t+ \8 @- j' @* A; r9 h3 j" k明眼人應該不難發現8 ^1 q/ Q; g' l4 z
新的機制將hardware information和功能實作的分開了
$ T" m, \: p1 Q6 O7 @# u資訊放到platform level規劃* W7 |  p3 Q. F! z
將driver功能實作獨立出來
3 x2 i# H+ E8 r- [(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-1 07:00 AM , Processed in 0.156009 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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