Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-5-6 18:32:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在linux OS上
7 Q) B  v6 _2 X有沒有任何辦法在一個user mode process取得一個pointer的physical address?
8 \: Y) q+ }. K$ @" G0 [
  f8 L0 f: _# J1 e5 [0 R7 E因為想把pointer指到的資料用另外一個hardware直接搬走,但是沒找到很好的方法。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-5-8 10:40:17 | 只看該作者
自己做了一些小實驗,如下:
3 l5 R2 M) C* j: K+ V  w( d9 Z% B" `
6 U3 y* n* c, @( t3 A# c1) 掛了一個小支的kernel driver到系統上(簡稱findmapping.ko)
" ^; I- `0 M6 C* I2 ], G- s3 U2) 把需要轉換的virtual address透過ioctl()丟到 findmmaping driver 裡頭。2 N& ]& V) e& J. V9 p. h# N
3) kernel driver 收到 ioctl command 之後,找到對應 process 的 task struct
+ q/ Q( {* H8 w' z4) 有了 task struct 就有所有的vma struct,可以找到這個virtual address是vma是哪個 entry。) b4 X$ o# x1 a( V1 R) m! {: ]! b
  t' s8 _& x+ T7 A
   例如: 傳進來的virtual address = 0x40800000,因為我的va剛好是mapping block的開頭。
: b: e9 V7 w4 N. u   可以找到 vma->vm_start = 0x40800000 這個 entry。: {; R  w. j; w' A/ j& w8 I# J7 h) K
! G, \" \; n) {  N6 v: E
問題是剛靠vma提供的資訊還是不足夠。有些entry可以找到對應的 PA,但是有的 va 傳進
- z4 u& z6 w: {8 r. W5 g" l  h來之後,沒辦法直接用vma的資訊做轉換。
/ G* u3 \9 Y4 u4 _8 }7 N
1 }% t  j4 U+ {  Z5 c8 W目前打算再找到對應於這個process的page table的資訊,直接看table裡頭的mapping,不知道有沒有人" C( e; d2 V6 W  `: e5 v" v) G
有這方面的經驗,或是推薦好的文章?- ]$ Y2 ~  h* X

% [& P: s* }" @0 s

評分

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

查看全部評分

3#
 樓主| 發表於 2009-5-8 18:09:19 | 只看該作者
剛剛似乎試出來一些成果
$ \* N; P& j' V  L6 \方法就是在上一篇的基礎上
0 E) Z+ A9 y) f: M. ~7 f* t
5 X* ~: i# s) a2 D* `1) 找到task_struct
0 R! B6 D' [+ y3 e" ~7 s2) 找到所屬的 mm
) p* T$ u; _8 T# V& v" b" a  ~2) 找到 mm 中的 pgd  (page descriptor)5 u1 i: h( a* r- }; E7 `, C& ^: k: q
3) 有了pgd就可以用系統的函式,找到對應的 page table entry(pte)3 p8 h. B" z" o% N( J: A
   例如: pgd_offset(), pmd_offset(), pte_offset()等等
1 j( V+ q; M; |* Z9 E: a4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)2 a) s" r/ E& a9 }
6 L: H- y5 I# ]! P$ C/ ]
應該就可以得到physical address。以上不知道有沒有錯誤或例外狀況。( I+ i/ G; B8 u8 L# f
目前猜想trust zone可能會造成加在 driver的這段code沒有access某些
4 W" r  m! `" o+ e6 Q" b' a9 r4 c資料的權利。但是對trush zone不是相當了解,不知道page table是不是5 Q9 A2 m5 Y% w
會被保護到。
4#
 樓主| 發表於 2009-5-13 12:42:11 | 只看該作者
剛剛review文章
/ q% A( \; h8 |) x發現寫反了~6 V( K7 o8 _8 k' e4 Y5 p

  R# J2 j3 o& n( s4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)+ z( P! H8 h" U+ x' X, I/ u
應該改成. `, o- A* H6 q7 d9 _) o) Z' `: s
4) pa = (pte & 0xfffff000) | (virtual address & 0xfff)0 E% P: G1 x3 H% e
; O* H! f2 V% {$ p9 x
另外,這個問題還會遇到' z4 U) ]5 ?/ O, m
整塊記憶體跨太多page! @$ A4 p2 {% J3 _2 k8 ?! ~  F
page可能在實體位址不連續或者被swap出去
, ]4 G7 X4 h7 s% R  _1 v* m* f所以要DMA搬運資料之前
3 H+ F7 L) H' O. H2 ^. ]- d這些因素必須要先排除~
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-6 08:06 AM , Processed in 0.107006 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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