Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

在Linux user mode process取得一個pointer的 PA?

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-5-6 18:32:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在linux OS上0 d8 y' \" h2 m% p% V$ E% u
有沒有任何辦法在一個user mode process取得一個pointer的physical address?1 G" T7 D2 C* f/ B0 G
- ~" y3 V/ ~- T: {# b
因為想把pointer指到的資料用另外一個hardware直接搬走,但是沒找到很好的方法。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-5-8 10:40:17 | 只看該作者
自己做了一些小實驗,如下:! i6 w9 }! K& C6 }& M1 o
* C1 y- h* i' ~" A  e
1) 掛了一個小支的kernel driver到系統上(簡稱findmapping.ko)
2 B; _" A7 ?5 j- j+ ]9 ?2) 把需要轉換的virtual address透過ioctl()丟到 findmmaping driver 裡頭。( p( b6 a  e* G( G% _3 E; f
3) kernel driver 收到 ioctl command 之後,找到對應 process 的 task struct
. [% D' P2 a" `1 d% D9 Q- A4) 有了 task struct 就有所有的vma struct,可以找到這個virtual address是vma是哪個 entry。2 `1 S" O" D0 b5 O  y1 J* D1 r& |
3 l2 u3 ?' N+ A& |1 I9 r; c% L  G$ X
   例如: 傳進來的virtual address = 0x40800000,因為我的va剛好是mapping block的開頭。; d8 b+ d$ W1 m
   可以找到 vma->vm_start = 0x40800000 這個 entry。
4 [) c: }# Q; j* e# o; l  q
5 {$ c, H! W$ u問題是剛靠vma提供的資訊還是不足夠。有些entry可以找到對應的 PA,但是有的 va 傳進
1 S" X% c! z# T來之後,沒辦法直接用vma的資訊做轉換。
$ G# @$ K, V/ _: {2 q4 G' y* i8 {) Z8 l. m
目前打算再找到對應於這個process的page table的資訊,直接看table裡頭的mapping,不知道有沒有人9 S: A  f& u8 [+ `$ ]
有這方面的經驗,或是推薦好的文章?
4 q3 V5 N; m2 ]7 f
8 n7 ~9 Y+ ~1 x. g) h9 k

評分

參與人數 1Chipcoin +5 收起 理由
jacky002 + 5 大大願意分享出來 真的好棒唷!!

查看全部評分

3#
 樓主| 發表於 2009-5-8 18:09:19 | 只看該作者
剛剛似乎試出來一些成果, M- m& L7 p% Y* A( ^' _
方法就是在上一篇的基礎上
, U4 s& T* ~, m- j/ Y" k* e/ U" Q( n2 r/ S! u$ Z
1) 找到task_struct8 d# E" o8 P5 k1 M2 S
2) 找到所屬的 mm) J! |8 D: s$ \# }
2) 找到 mm 中的 pgd  (page descriptor)( `: V5 z( {0 O/ u8 G7 \
3) 有了pgd就可以用系統的函式,找到對應的 page table entry(pte)
, I/ O$ a% F, p5 w( G! O   例如: pgd_offset(), pmd_offset(), pte_offset()等等
' ]8 J0 s1 N0 p' y& K5 v" |; q. Q4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)
4 S4 c% V" B  D2 e
0 u: A- o; R0 Y% Z) B應該就可以得到physical address。以上不知道有沒有錯誤或例外狀況。* a# a9 c& ~% |+ P
目前猜想trust zone可能會造成加在 driver的這段code沒有access某些. N5 F0 r% ?5 h1 E% z3 T$ \; y
資料的權利。但是對trush zone不是相當了解,不知道page table是不是, Y2 g* Z* q. z% t0 b4 F, R8 b' S6 V
會被保護到。
4#
 樓主| 發表於 2009-5-13 12:42:11 | 只看該作者
剛剛review文章
$ f( N+ }1 S" e# S7 m+ e* H& v0 V發現寫反了~6 X7 h9 b, N; ^9 D
/ V/ z- {+ p( ]
4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)) Q! u( e) b% T& n4 f  @3 i
應該改成
0 X, u$ h" x: L4) pa = (pte & 0xfffff000) | (virtual address & 0xfff)
+ a6 t/ x' m  K, @: }( G" g: |0 u# U6 J* C- J
另外,這個問題還會遇到
/ v# ?& z+ `* M' }+ ~, U. y( R整塊記憶體跨太多page
" y8 E2 p0 ?$ `9 i  ?- }0 Jpage可能在實體位址不連續或者被swap出去4 ]* i8 g) s+ N  x' q! k2 R0 a
所以要DMA搬運資料之前. M. i. Y2 \8 L2 i1 w
這些因素必須要先排除~
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-16 12:36 PM , Processed in 0.140401 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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