Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候1 t4 v% H" r0 `
常用的作法是拿原廠的reference design當參考
6 X- l. c& z- d" @+ q9 Q, M上頭component常常會換掉
5 _3 E6 h: i- I6 N. o$ G舊的平台和新的平台之間6 |7 j6 N0 p1 l% C
常常某些部份只是位址的更動7 T: X& d. v8 B, J
例如:本來GPU的base address是0x80001000換到0x80002000& w* H2 g- ?& _7 h8 ~; K
hardware的功能和行為是一樣的" U9 G# c! |6 k: ~% |2 c
9 n, R! A5 {: @: M* Z, h
面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用
) h! s  r  Q6 i1) dynamical insert module 的方式將新的 base address 傳給 driver
$ |) S; @/ A6 V& S1 J; h或者, s5 [1 U/ K' x0 E  n
2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address
! i* F% e0 \% G( d/ {
% ?* Q+ Z+ m2 L5 r9 A在新一點的Linux的kernel導入的所謂的platform driver的概念
$ v+ t8 N7 ?5 b概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/)& C8 Z8 @4 R7 e, W, t9 K/ o
原本的driver放在./drivers/
1 Y* @/ k3 ^2 b! [' z$ T0 g; |  N8 X這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver# }3 ]* J: j2 j& x5 Z. J
如此一來對developer來講就變得比較直覺
8 R" P* B: b/ {1 w) edriver本身只要針對不同的設定去動作
# |: g' k4 D, U  t( N$ g5 V+ Y% Q8 J不需要因為平台改變了& b" o- I5 p3 }; |! u
就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利  i8 ^- p) k: b6 c( m: s
因為不同的SoC經常需要對base address做調整
3 v+ Z" X+ c9 f- r% m1 X不同的SoC只要從platform level傳遞變更的資訊給driver: M. B6 v" j/ N) X8 A
新的平台就可以得到driver的支援6 ~$ U' }) u; {# E) w
而對下游的廠商來說
$ U$ N3 c+ b# K+ v7 c7 u$ E8 C他們編譯新的kernel時,只要選擇對的platform
7 {2 N; p- l+ [- _: q' W就可以得到對的結果0 q' J2 _9 P6 c* Q( V, p; j

, D" n* F6 Z" q* A由以上的介紹6 G4 I  V$ E1 x, z# d1 [
我們可以得知platform driver需要透過兩個部分的支援9 s, c7 r* g/ _) \; o1 v7 P
1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。; I/ M; k5 L0 y+ Q6 q% i
2) driver level - 控制硬體平台和實現功能。
1 q& c& D. O) C- v  J5 m4 t' p5 X% V5 K6 i  M; M8 `# z7 O
step 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
. f! p& t, h3 c/ @platform_device_register( information ); 將所有platform用到的device和相關的資  W0 @0 m3 j: v3 L3 v# [
訊註冊。
5 i; ^' z2 X" ]; a' h- {) O* s  e5 E
step 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統# ~3 V* @; |4 u9 o9 c
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它
& y3 P1 A7 Z" B6 l來服務這個device。' X$ Z9 {" p/ T8 z2 T6 Z: F* Z, t  @; r

) o) C% D8 n: z1 J7 V0 x* _: R明眼人應該不難發現# ~- d& J7 U8 \0 O- m1 y1 [: t6 Z  _
新的機制將hardware information和功能實作的分開了' g- T# v8 }0 l. F8 r, F! {
資訊放到platform level規劃1 g2 t% \/ {2 h5 D
將driver功能實作獨立出來
/ k6 z- W% X' ?( j5 j(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 02:32 PM , Processed in 0.098013 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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