|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
项目中经常需要把内存数据dump出来看看是否与自己设想的一样,dump之前我们需要把内核的虚拟地址先转换为物理地址才能借助工具dump出来。
X( r! P1 r6 V% T5 }5 P8 L; u% c n8 ^0 Z
+ s2 z: _3 d2 X+ t" H' b8 a% z5 W
废话不多说,直接说正题。1 \% D0 j! `% {
/ r& t: q2 |8 W9 A5 y
1. 内核里的地址是从3G开始算的,即起始地址为:0xc0000000
4 s$ K, C+ @# a8 [: f& ^% x
?6 }# }, k3 x3 V2. ARM小机端的内存起始地址并不是0,而是0x40000000
, C; M' N; Y, \9 L6 E- H' m! U: g! m" a6 [9 T
也就是说虚拟地址与物理内存起始地址两者的差为:0x80000000
7 h2 y; ~1 U" a1 B$ j% M) \; o" ~2 e4 U* m7 ~" u! |1 ]
那如果要将内核的虚拟地址转换为物理地址,则为:物理地址 = 虚拟地址 - 0x80000000+ o- E1 h) C- A+ K5 [. u
% q( u' H e) k$ d4 f1 ]% y
例如:虚拟地址:0xc09baf08 对应的物理内存地址应为:0x409baf08+ f7 u- `: @0 S6 c
6 q# L( ~8 X& m2 m$ r! P5 Y3 U
9 j! s% l6 M/ ?0 k" p% E/ K$ M! N
得出物理地址就可以通过工具抓取内存的真实数据了,这对于解决内核死机问题有极大的分析帮助作用。
$ r% [9 l7 F+ v0 M" I' j; F
* A/ [3 O9 y" N9 w' J4 @' M# i1 @1 Y, T2 }0 j4 B' u1 C
( |, U7 C w# D( f7 t7 P# O& X
|
|