Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-5-6 18:32:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在linux OS上
1 T8 F* Z8 l9 ?有沒有任何辦法在一個user mode process取得一個pointer的physical address?1 C+ s' ^5 k: y

) c8 z% m! [% V: B( V2 l因為想把pointer指到的資料用另外一個hardware直接搬走,但是沒找到很好的方法。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-5-8 10:40:17 | 只看該作者
自己做了一些小實驗,如下:* Q0 F* l3 \8 E
" h# Y" g9 `0 g
1) 掛了一個小支的kernel driver到系統上(簡稱findmapping.ko)
% f8 V. r- a! ~6 b( h" a) ^2) 把需要轉換的virtual address透過ioctl()丟到 findmmaping driver 裡頭。/ _. a( {" o9 G
3) kernel driver 收到 ioctl command 之後,找到對應 process 的 task struct+ z3 r4 N2 v# ~( U8 y" ^+ R
4) 有了 task struct 就有所有的vma struct,可以找到這個virtual address是vma是哪個 entry。" F# V& F  ?& m) N8 H
2 p! W+ S0 c8 w; _
   例如: 傳進來的virtual address = 0x40800000,因為我的va剛好是mapping block的開頭。: [/ {! f) y! j$ R% v
   可以找到 vma->vm_start = 0x40800000 這個 entry。; J& b  B0 @( H- }2 z, n

! R1 K$ c! L8 ?) w6 O問題是剛靠vma提供的資訊還是不足夠。有些entry可以找到對應的 PA,但是有的 va 傳進
$ S* T. j" n& ^' P$ C來之後,沒辦法直接用vma的資訊做轉換。7 v; \5 J3 K8 l" o# _2 o
# H% p* ?6 F( ~3 \
目前打算再找到對應於這個process的page table的資訊,直接看table裡頭的mapping,不知道有沒有人0 G8 a' I) N# s) ]7 _
有這方面的經驗,或是推薦好的文章?. B1 f+ h( X" K
8 [4 }# [7 N) ?% ~( f  |% C3 h1 P

評分

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

查看全部評分

3#
 樓主| 發表於 2009-5-8 18:09:19 | 只看該作者
剛剛似乎試出來一些成果
+ k- s1 ~( ]! [1 k$ B$ D4 v; ^1 t* p方法就是在上一篇的基礎上
( o% X: F; [5 ?5 w0 @
2 t) g. ^0 K) K1 L. |7 o1) 找到task_struct
' p6 D. N& `5 e2 r5 l3 ]2) 找到所屬的 mm
# p9 Z- C! |" |4 n6 [4 W2) 找到 mm 中的 pgd  (page descriptor)
5 y- V4 J; |6 t3) 有了pgd就可以用系統的函式,找到對應的 page table entry(pte)! [5 \$ @! Z8 |9 m2 h' X$ k9 T$ c
   例如: pgd_offset(), pmd_offset(), pte_offset()等等$ T( P- j; I; o0 Z3 h  W) x' N
4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)
" J( u; s; P$ [0 ?3 d( x/ Q6 [8 @
$ m* g# I" m: {3 }' B! W應該就可以得到physical address。以上不知道有沒有錯誤或例外狀況。
8 ~! K0 I0 K6 }目前猜想trust zone可能會造成加在 driver的這段code沒有access某些
% S; i$ X) U( ?. P7 u) h! Y; n! X0 C資料的權利。但是對trush zone不是相當了解,不知道page table是不是" x7 m! ~4 W. z: Q8 f6 T( B
會被保護到。
4#
 樓主| 發表於 2009-5-13 12:42:11 | 只看該作者
剛剛review文章* r: I2 h4 E4 o  Z( o' S* K4 G
發現寫反了~* t& c  m/ N% n8 ]6 H" P  d* S

4 S7 p' L$ g- X4) pa = (virtual address & 0xfffff000) | (pte & 0xfff)
  L3 [* q4 ^0 }2 z0 F應該改成
8 J, `: {0 _' {6 H0 k0 y) C! H, j4) pa = (pte & 0xfffff000) | (virtual address & 0xfff)
4 i: d8 S7 x8 W8 ?& [
- S1 ?5 z; d' L# {; d另外,這個問題還會遇到
3 _6 N' N( T$ L2 v/ k& ~整塊記憶體跨太多page6 Z! @- y" Y% n# v' L8 ^+ w
page可能在實體位址不連續或者被swap出去
7 Q4 ?8 p8 I$ V3 w& u% S所以要DMA搬運資料之前
. f# r/ z: M' G' M" B這些因素必須要先排除~
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-16 05:52 AM , Processed in 0.156001 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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