Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-5-6 18:32:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在linux OS上
# C' Y3 i' M$ V( Y6 p有沒有任何辦法在一個user mode process取得一個pointer的physical address?* D- J: e  h2 A, y$ ~0 w& s

8 C- k, l+ V) U5 n2 d因為想把pointer指到的資料用另外一個hardware直接搬走,但是沒找到很好的方法。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-5-8 10:40:17 | 只看該作者
自己做了一些小實驗,如下:
3 V- g, o6 [% K; m
1 i3 u- L5 d! e0 z% N1) 掛了一個小支的kernel driver到系統上(簡稱findmapping.ko)
* ^* z* f: j; M! _2) 把需要轉換的virtual address透過ioctl()丟到 findmmaping driver 裡頭。5 G# h& `3 B% ^( v' R5 T
3) kernel driver 收到 ioctl command 之後,找到對應 process 的 task struct
& u/ @' j$ Z( O  ~' C8 z" _4) 有了 task struct 就有所有的vma struct,可以找到這個virtual address是vma是哪個 entry。
) d8 E0 [% T4 ^  ~( ?6 X5 o! y7 N/ G' G& X- E
   例如: 傳進來的virtual address = 0x40800000,因為我的va剛好是mapping block的開頭。! e* f4 ~4 B" D! a- y
   可以找到 vma->vm_start = 0x40800000 這個 entry。
+ h4 U( Y( \! L/ f! N1 O# z2 m' t* F
問題是剛靠vma提供的資訊還是不足夠。有些entry可以找到對應的 PA,但是有的 va 傳進* i! n: i0 `. g" Q5 b  N
來之後,沒辦法直接用vma的資訊做轉換。/ A; g/ A0 R" r3 o
1 \7 z* B4 C! W! p  k
目前打算再找到對應於這個process的page table的資訊,直接看table裡頭的mapping,不知道有沒有人
8 N$ B2 O, B! e4 Z有這方面的經驗,或是推薦好的文章?
2 f! P3 m5 a% _0 D% ?% F
8 C% }, R( r$ _' a2 f

評分

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

查看全部評分

3#
 樓主| 發表於 2009-5-8 18:09:19 | 只看該作者
剛剛似乎試出來一些成果1 s  v  f/ h, o, M9 d3 g  D
方法就是在上一篇的基礎上! |- i9 E, u' L; ?# S1 ]3 }
; `! @( x4 h5 c- Z
1) 找到task_struct
2 V, y9 y2 o/ y/ C& b5 f" T5 y6 ?* U2) 找到所屬的 mm
$ w; n" I9 K& i' E, f( o2) 找到 mm 中的 pgd  (page descriptor)
& t( V% R# A' ~4 k8 [3) 有了pgd就可以用系統的函式,找到對應的 page table entry(pte)
; K4 I# f* h$ R8 G1 Q4 _   例如: pgd_offset(), pmd_offset(), pte_offset()等等' \/ I) o$ |# f
4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)
# }; i: a0 R* @- x
& b. j3 x' }: p8 \7 `' h0 E應該就可以得到physical address。以上不知道有沒有錯誤或例外狀況。5 r# O. Z: X5 W8 E- h
目前猜想trust zone可能會造成加在 driver的這段code沒有access某些
, r! {- k0 ^& t資料的權利。但是對trush zone不是相當了解,不知道page table是不是
7 U. u- E3 {: ^7 O& b會被保護到。
4#
 樓主| 發表於 2009-5-13 12:42:11 | 只看該作者
剛剛review文章
: N4 I% G2 J" E8 a' C" M8 `/ m/ ?發現寫反了~
8 V1 j0 [+ ^0 M! ?  x9 k1 R' O; M, o3 l6 K8 K* @  w
4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)
, j( n4 ]# h& b4 a2 l應該改成; e# u: z+ z% ~9 G4 M0 [
4) pa = (pte & 0xfffff000) | (virtual address & 0xfff)! a. T& R% E& S) `* g7 X
1 ?% F/ z" k' Y" p  f4 J
另外,這個問題還會遇到
* z" }- e! M+ a# \7 R整塊記憶體跨太多page
, Z5 l* g$ o1 w3 b. N* s9 h# t1 Wpage可能在實體位址不連續或者被swap出去
- \3 W% k. y  ]# I, q1 ^+ \4 ]* S& D2 L所以要DMA搬運資料之前
( v' Y' u* ]' l: j) A, I. G) t這些因素必須要先排除~
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 06:17 PM , Processed in 0.104014 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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