EDA365电子论坛网

标题: ARM Linux虚拟地址转换为内存物理地址 [打印本页]

作者: baqiao    时间: 2020-4-16 11:26
标题: ARM Linux虚拟地址转换为内存物理地址
项目中经常需要把内存数据dump出来看看是否与自己设想的一样,dump之前我们需要把内核的虚拟地址先转换为物理地址才能借助工具dump出来。# F1 h- ?  I7 s3 M4 g: D+ F2 \

3 O0 u( B" |" K1 @$ d, @" e$ O
9 y' V2 J' v/ a# l* _" [废话不多说,直接说正题。
" z/ J; o' b* |: k' I. v6 }" S3 e0 P, t* p4 Q5 Y+ R& _3 j9 r
1. 内核里的地址是从3G开始算的,即起始地址为:0xc0000000& {; s3 f; _( z1 F0 m

* F- M; M3 h4 H( ~: h" v# r( g2. ARM小机端的内存起始地址并不是0,而是0x40000000
* W: S0 W0 c9 _( t, U. h9 k$ {6 R4 I$ w6 A' {3 x/ t
也就是说虚拟地址与物理内存起始地址两者的差为:0x800000001 [2 E9 N1 I6 i; c

  {! V) {4 r6 l. O0 {那如果要将内核的虚拟地址转换为物理地址,则为:物理地址 = 虚拟地址 - 0x80000000
: q$ }5 i1 V, u  q
' R" R0 v. F, c# Y0 s* i例如:虚拟地址:0xc09baf08  对应的物理内存地址应为:0x409baf084 K! T7 z1 i5 z- \5 |5 B

# b; b7 b; ]& @+ x
5 a3 b' n# m0 T2 Z" ^3 O; P: X得出物理地址就可以通过工具抓取内存的真实数据了,这对于解决内核死机问题有极大的分析帮助作用。8 N" c2 k  |- a: k7 @! R

, j( C. V% M7 r( p# b1 B% d, Q2 i7 f1 ~$ a4 L

" Y) o/ x9 {  s0 J* X# K
作者: ExxNEN    时间: 2020-4-16 18:57
ARM Linux虚拟地址转换为内存物理地址




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2