Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

Linux Platform Device & Driver~

  [複製鏈接]
跳轉到指定樓層
1#
發表於 2009-12-20 15:19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當我們在重新規劃新的system or hardware platform的時候
6 v, F; s( G3 _+ V) f常用的作法是拿原廠的reference design當參考
* J2 K3 g0 N; n" ]3 n7 q上頭component常常會換掉
2 S5 V# K9 H* d6 g; n$ N- d舊的平台和新的平台之間
, |7 A; d6 v$ n9 O5 O' ]. t; Q常常某些部份只是位址的更動
6 D5 p4 n* m- _9 E6 h* z, X例如:本來GPU的base address是0x80001000換到0x80002000
' q4 e  r" N+ [' yhardware的功能和行為是一樣的
5 `" c" C' s* m, E0 ]/ n3 v2 z! H* r
面對的這樣的問題,在舊一點的Linux Kernel我們通常可以用
" \; e2 Y" s- w1) dynamical insert module 的方式將新的 base address 傳給 driver
5 _8 j0 V( E* a2 `! Q或者, ~5 R& d5 M4 q4 ?! F& x
2) 更改 driver 的 code 直接使用新的 0x80002000 的 base address0 L/ d, |% J. N7 P+ h

  ^4 D. V. D) n0 q/ n' r5 r+ q在新一點的Linux的kernel導入的所謂的platform driver的概念
$ }% Z5 x4 E$ U" O, t$ ^概念上我們將某一些和platform相關的資訊放在platform的level (arch/arm/mach-xxx/)7 I2 k' Q4 e0 \) a
原本的driver放在./drivers/3 |/ P" c, D- x- e% w. Z
這樣一來只要選擇到對的platform,相對應的資訊就會pass給driver
  P; x, x6 C! ], K如此一來對developer來講就變得比較直覺2 W* d+ \- F- n' Z
driver本身只要針對不同的設定去動作
9 `2 W6 x1 y0 r  C/ R- F" E% j不需要因為平台改變了1 i8 z+ U! k0 K& y
就改寫driver
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂1 踩 分享分享
2#
 樓主| 發表於 2009-12-20 15:19:34 | 只看該作者
這樣的機制對於生產SoC的vendor相當便利1 z$ j0 y2 a) D
因為不同的SoC經常需要對base address做調整9 U4 Y5 ?: z( ~. P
不同的SoC只要從platform level傳遞變更的資訊給driver* J0 V) Z# `5 z3 T
新的平台就可以得到driver的支援
5 H) v2 f3 N* w' G( c而對下游的廠商來說( I. G' G$ Q7 d2 N8 n
他們編譯新的kernel時,只要選擇對的platform  ~: K. g( v7 x' k
就可以得到對的結果
. Z/ ^4 H4 H- g- l: G" q5 P1 z* Z
# d# N. r! ?4 [0 m% N由以上的介紹5 z( O5 [9 K4 S7 O' m
我們可以得知platform driver需要透過兩個部分的支援
7 _# V" g4 U4 ]& ]: D6 [: d+ n# V3 c1) platform level - 提供硬體平台資訊,例如irq line, base address, etc。
/ N' z7 U, p4 |( X) x( H2 J0 J% w4 I2) driver level - 控制硬體平台和實現功能。+ {/ N, G# Z) O# a! I3 I

- G4 A  z9 u8 O; z* f+ i3 Sstep 1) 首先,概念上我們必須對系統註冊一個新的platform device,使用的方式就是呼叫
, }$ @+ h" \0 X. T7 ~- zplatform_device_register( information ); 將所有platform用到的device和相關的資
; n! y( t. G$ K. e訊註冊。
+ P8 ?2 h- m' D5 Y0 f1 V' W% Q& u+ y9 d- ?1 W6 P3 T
step 2) 接著drvier level這邊,我們會使用 platform_driver_register()將driver註冊到系統' a' V! F7 P/ q1 r8 c9 ]
裡頭,假如有任何platform device指定了這個driver,就可以將driver初始化,請它/ v- \2 V6 W+ s& h* x% k- ~
來服務這個device。' [9 z9 e6 r7 l

! ?) b/ X" N: c2 }6 J明眼人應該不難發現
* b- k5 D# ?& z+ f8 J% r0 Y新的機制將hardware information和功能實作的分開了0 z1 U3 ]( [5 C* [& N0 V8 C9 B
資訊放到platform level規劃9 e6 o, `, g: q+ ]6 P: a
將driver功能實作獨立出來5 ~9 M$ D& Z! o" ^% x4 x; V
(其實有點像是C++導入了template的概念,將資料型別和演算法分開)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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