|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
项目中经常需要把内存数据dump出来看看是否与自己设想的一样,dump之前我们需要把内核的虚拟地址先转换为物理地址才能借助工具dump出来。% _4 Y8 r6 }/ s# ~( ^0 h8 ?4 y
3 g" s: S, S& Y% f) `, v9 B
. l( c5 R) j1 c) s3 _( v7 U
废话不多说,直接说正题。1 d3 S, `) x- k$ w
' F' ^+ `, {. s# J1 U n8 [: R, A1. 内核里的地址是从3G开始算的,即起始地址为:0xc0000000/ w9 [( D4 t. Z6 U' c9 E% X* `
: j9 ^8 L- r& U& P: z* z( i( G$ b1 j
2. ARM小机端的内存起始地址并不是0,而是0x40000000 t' u# _: ^# `$ P& M2 J( o
6 u1 }6 l+ b. ]1 d- r/ c9 }& c ^也就是说虚拟地址与物理内存起始地址两者的差为:0x80000000
3 s( ]& o% E. t" S* x' C, Q, P* @' J- [- b6 ]
那如果要将内核的虚拟地址转换为物理地址,则为:物理地址 = 虚拟地址 - 0x80000000
7 q* T& G7 l/ s: n5 U8 ]
# n7 K+ z' E; a4 b$ i. n例如:虚拟地址:0xc09baf08 对应的物理内存地址应为:0x409baf080 j: Z0 L, k( |; x- S
1 h$ i6 W) L0 h- |' U
, q! g4 K% Y! c1 v4 J
得出物理地址就可以通过工具抓取内存的真实数据了,这对于解决内核死机问题有极大的分析帮助作用。. l# ?( ]! I2 Z. n2 r3 i& e
4 S) a2 k! ^6 W) ? u' P* O1 i( u% a/ U6 f ~+ D; Z/ P
0 J+ A" Q# [. ~! T |
|