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( g
2. ARM小机端的内存起始地址并不是0,而是0x40000000
* W: S0 W0 c9 _( t
, U. h9 k$ {6 R4 I$ w6 A' {3 x/ t
也就是说虚拟地址与物理内存起始地址两者的差为:0x80000000
1 [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 对应的物理内存地址应为:0x409baf08
4 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