|
发表于 2020-8-8 09:57:58
8530 浏览 2 回复
MTK ramdump介绍
本帖最后由 tangh 于 2020-8-8 09:59 编辑
全名是MT-RAMDUMP,应用于MTK smart phone平台,是在异常时将DRAM内容和CPU寄存器保存起来,以供后续调试用(比如gdb等调试工具)。
该功能主要用于调试kernel异常。
当发生kernel panic时,会重启到lk阶段,在lk阶段将信息保存到文件系统中(这个过程需要2~3分钟):
具体现象看下图!
这些信息以elf coredump格式组织,方便gdb/crash等工具调试,主要有以下内容:
- 当前cpu寄存器和调用栈
- 除了frame buffer和security OS外的DRAM内容
信息可以被保存在2个位置(2选1):
- EMMC/VFAT (/sdcard)
- EMMC/EXT4 (/data)
在开机时aee起来后,aee会将相关信息和coredump打包到db文件(/sdcard/mtklog/aee_exp/db.fatal.xx.KE/db.fatal.xx.KE.dbg),其中coredump在db的文件名为:SYS_COREDUMP。
注意:只有KE才会将SYS_COREDUMP打包到db,其他类型如HWT、HW REBOOT不会打包,这些类型可能不会将L1/L2的cache刷到DRAM,导致DRAM上的资料不完整。
[size=13.3333330154419px]如果在抓取过程中出现异常,可以通过以下文件查看出错原因:
[size=13.3333330154419px]adb shell cat /sys/module/mrdump/dump_log
[size=13.3333330154419px]或者
[size=13.3333330154419px]adb shell cat /sys/module/mrdump/dump_status
[size=13.3333330154419px]1st Line: status => OK, NONE, FAILED … etc
2nd Line: Format => DEVICE:FSTYPE, e.g. emmc:vfat or emmc:ext4
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|
手机微信同号:13682654092
|
|
|
|
|
|
楼主|
发表于 2020-8-8 10:03:38
使能mrdump key 手动触发dump
1、Please find out the platform dts file
example:kernel-4.9/arch/arm64/boot/mediatek/mt6761.dts
2、search for mrdump key word and you will see below text
mrdump_ext_rst: mrdump_ext_rst {
compatible = "mediatek, mrdump_ext_rst-eint";(注意mediatek, mrdump_ext_rst-eint中逗号之后有个空格)
source = "EINT";
mode = "IRQ";
status = "okay";
};
Change as below, saved and rebuild bootimage
mrdump_ext_rst: mrdump_ext_rst {
compatible = "mediatek, mrdump_ext_rst-eint";
source = "SYSRST";
mode = "IRQ";
status = "okay";
};
3、How to trigger MRDUMP_KEY
Please long press power key(you may use power + volumn up , but need another patch) for around 9 seconds
Please do have a watch on hand to confirm the time in seconds
Please do not press longer than 15 seconds , if press too long , external PMIC will recognize as battery lost and everything is lost
|
|
手机微信同号:13682654092
|
|
|
|
|
|
楼主|
发表于 2020-8-8 10:08:02
ramdump如何开启?
ramdump功能默认支持eng build,不支持user/user debug build,如果需要支持请查看下面的说明。
[size=13.3333px]以下修改仅适合<=L0版本,>=L1版本默认开启,无需另外设定
使用以下命令即可开启:
adb shell "echo Y > /sys/module/mrdump/parameters/enable"
当然,以上关机就失效,如果要永久开启,需要直接修改代码:
- <div><span style="font-size: 10pt;">alsp/kernel-3.10/drivers/misc/mediatek/aee/mrdump/mrdump_full.c</span></div>
- <div>
- <pre class="brush:c;">static int __init mrdump_init(void)
- {
- ......
- atomic_notifier_chain_register(&panic_notifier_list, &mrdump_panic_blk);
- // add this block
- {
- mrdump_enable = 1;
- mrdump_plat->hw_enable(mrdump_enable);
- mrdump_cb->machdesc.nr_cpus = NR_CPUS;
- __inner_flush_dcache_all();
- }
- }</pre></div>
复制代码
开启之后,如果fstype选择EXT4(默认值),则还需检查是否生成临时文件No_Delete.rdmp:
- 检查/sys/module/mrdump/parameters/lbaooo是否不为0
- /data/No_Delete.rdmp是否存在
如果没有还需手动生成该文件,请查看FAQ13777:ramdump如何设置No_Delete.rdmp预留空间大小
让user/user debug build支持ramdump:
第1步:修改LK的make file "bootable/bootloader/lk/app/mt_boot/rules.mk"
- <font color="#000000"><font style="font-size: 10pt">build_mt_ramdump := <b>yes</b> ##原先是no,这里修改为yes
- ifneq ($(TARGET_BUILD_VARIANT),user)
- ifeq ($(ARCH_HAVE_MT_RAMDUMP),yes)
- build_mt_ramdump := yes
- endif
- </font></font><div><font color="#000000"><font style="font-size: 10pt">endif</font></font></div>
复制代码 第2步:修改user-build kernel config(kernel/arch/arm/configs/xxx_defconfig或kernel/arch/arm64/configs/xxx_defconfig)把(没有对应的config则不需要修改)
- <font color="#000000"><font style="font-size: 10pt"># CONFIG_MTK_AEE_MRDUMP is not set</font></font>
- <font color="#000000"><font style="font-size: 10pt"># CONFIG_HAVE_DDR_RESERVE_MODE is not set</font></font>
- <font color="#000000"><font style="font-size: 10pt">修改为enable
- <b>CONFIG_MTK_AEE_MRDUMP=y</b></font></font>
- <font color="#000000"><font style="font-size: 10pt"><b>CONFIG_HAVE_DDR_RESERVE_MODE=y</b></font></font>
复制代码 第3步:编译下载后复现时请打开mtklogger,如果没有打开也不会抓ramdump。
P版本:
1、lk/platform/mt67XX/rules.mk中 ARCH_HAVE_MT_RAMDUMP设为 yes。【默认已经为yes,可以check一下】
2、lk/project/$(project).mk中设置MTK_MRDUMP_ENABLE = yes。【MTK_MRDUMP_ENABLE不设定时,eng版本默认应该是打开mrdump的】
Q版本:
在P版本基础上,新增dconfig配置方式,配置方法是在lk/project/$(project).mk中设置MTK_MRDUMP_ENABLE = dconfig。
dconfig配置方式时候一种动态控制,根据boot_para.img里的标志位来判断是否要打开mrdump(没有烧录特定的boot_para.img则不开启mrdump)。
boot_para.img要如何生成呢?具体请看DCC上的文档:CS6000-BH8B-UMD-V1.5EN_MediaTek Logging SOP.docx里的《Dynamic enable fulldump for user load》章节
|
|
手机微信同号:13682654092
|
|
|
|
|
登录或注册
|