Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-5-6 18:32:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在linux OS上: J4 e% ^3 e3 \7 K, P# R  R
有沒有任何辦法在一個user mode process取得一個pointer的physical address?4 p% ^% U0 w) ?

' B3 P  e) U2 ?因為想把pointer指到的資料用另外一個hardware直接搬走,但是沒找到很好的方法。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-5-8 10:40:17 | 只看該作者
自己做了一些小實驗,如下:) O- L1 I* \, Z) Z( `
, S2 w- Z3 \+ m3 E. j. v
1) 掛了一個小支的kernel driver到系統上(簡稱findmapping.ko). U- O5 Y: F1 z( s& {
2) 把需要轉換的virtual address透過ioctl()丟到 findmmaping driver 裡頭。
0 K5 S6 _) E% }, Z! u! Z3) kernel driver 收到 ioctl command 之後,找到對應 process 的 task struct
; C/ N7 ?2 ?0 n+ i) Q5 `0 M4) 有了 task struct 就有所有的vma struct,可以找到這個virtual address是vma是哪個 entry。$ N; X$ C' T, P' H. ?
3 W7 J/ f. o8 w. e: J
   例如: 傳進來的virtual address = 0x40800000,因為我的va剛好是mapping block的開頭。
0 P' U5 @# f$ ?3 s! ^# ^   可以找到 vma->vm_start = 0x40800000 這個 entry。
/ v2 f3 r# ]7 T! `4 H
" k# y7 [+ h- d8 s問題是剛靠vma提供的資訊還是不足夠。有些entry可以找到對應的 PA,但是有的 va 傳進3 D; i' S; @* T2 z
來之後,沒辦法直接用vma的資訊做轉換。" m) a4 z+ {- i3 p3 D, u: l/ u/ o

% d1 y9 y/ _1 d目前打算再找到對應於這個process的page table的資訊,直接看table裡頭的mapping,不知道有沒有人
- X9 ^8 R2 N# _4 d. q有這方面的經驗,或是推薦好的文章?3 [/ N8 [8 X2 _) A# M2 E6 g
* u& d$ U" \* }! L$ h

評分

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

查看全部評分

3#
 樓主| 發表於 2009-5-8 18:09:19 | 只看該作者
剛剛似乎試出來一些成果. d8 m+ {* J0 A
方法就是在上一篇的基礎上
0 Y/ V: M# u+ ~1 o, J, h$ D0 F, _7 t: U! K
1) 找到task_struct* `4 U% p; V) ]: Y6 P5 L
2) 找到所屬的 mm& J3 d! f# ]* K& f2 ]: v6 _
2) 找到 mm 中的 pgd  (page descriptor)+ K9 m. |& @$ ^- J) O3 E0 \- r
3) 有了pgd就可以用系統的函式,找到對應的 page table entry(pte)( v6 M3 s5 Y7 ~+ q. @. @3 q
   例如: pgd_offset(), pmd_offset(), pte_offset()等等2 J0 M( [# D+ Q9 n
4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)
& I$ E3 @% x7 F0 Z& S
6 R4 T: _. N& k4 p1 [& h  z4 M應該就可以得到physical address。以上不知道有沒有錯誤或例外狀況。
) {' |6 l1 }$ V: C2 w; E目前猜想trust zone可能會造成加在 driver的這段code沒有access某些$ R' _, y6 O) o) v
資料的權利。但是對trush zone不是相當了解,不知道page table是不是
# \8 |6 ^8 X0 {9 A7 r會被保護到。
4#
 樓主| 發表於 2009-5-13 12:42:11 | 只看該作者
剛剛review文章% Z7 p8 d8 q6 v  P+ A  w
發現寫反了~& _! l8 W. C+ s+ F. Q2 n0 A" [
' _+ q6 z2 u3 E% ?$ l/ f. D4 |
4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)
  Y5 J8 r6 w) I5 K; {5 i) T- G$ q4 x應該改成( K/ z& h& i$ c' d4 Y
4) pa = (pte & 0xfffff000) | (virtual address & 0xfff)6 {% w1 @) H( v9 o% P/ V( F: D) p

! ?  {2 D; Y9 i- Y5 o" \, n8 R. M0 U另外,這個問題還會遇到/ j) F$ Z' P. |1 O  `
整塊記憶體跨太多page
7 ?5 a7 Q* g3 `/ |4 E8 e6 G/ F  _page可能在實體位址不連續或者被swap出去
6 o* N* w( |" q( J8 I! H- P所以要DMA搬運資料之前* X: N- z1 P2 [# F& L
這些因素必須要先排除~
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-5 11:16 AM , Processed in 0.113014 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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