搜索

430

主题

515

帖子

2118

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2118
QQ
发表于 2020-8-8 09:57:58 6260 浏览 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
回复

使用道具 举报

430

主题

515

帖子

2118

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2118
QQ
 楼主| 发表于 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
回复

使用道具 举报

430

主题

515

帖子

2118

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2118
QQ
 楼主| 发表于 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"
当然,以上关机就失效,如果要永久开启,需要直接修改代码:
  1. <div><span style="font-size: 10pt;">alsp/kernel-3.10/drivers/misc/mediatek/aee/mrdump/mrdump_full.c</span></div>
  2. <div>
  3. <pre class="brush:c;">static int __init mrdump_init(void)
  4. {
  5.     ......
  6.     atomic_notifier_chain_register(&panic_notifier_list, &mrdump_panic_blk);
  7.     // add this block
  8.     {
  9.         mrdump_enable = 1;
  10.         mrdump_plat->hw_enable(mrdump_enable);
  11.         mrdump_cb->machdesc.nr_cpus = NR_CPUS;
  12.         __inner_flush_dcache_all();
  13.     }
  14. }</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"
  1. <font color="#000000"><font style="font-size: 10pt">build_mt_ramdump := <b>yes</b>  ##原先是no,这里修改为yes
  2. ifneq ($(TARGET_BUILD_VARIANT),user)
  3.     ifeq ($(ARCH_HAVE_MT_RAMDUMP),yes)
  4.         build_mt_ramdump := yes
  5.     endif
  6. </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则不需要修改)
  1. <font color="#000000"><font style="font-size: 10pt"># CONFIG_MTK_AEE_MRDUMP is not set</font></font>
  2. <font color="#000000"><font style="font-size: 10pt"># CONFIG_HAVE_DDR_RESERVE_MODE is not set</font></font>
  3. <font color="#000000"><font style="font-size: 10pt">修改为enable
  4. <b>CONFIG_MTK_AEE_MRDUMP=y</b></font></font>
  5. <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
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


登录或注册
快速回复 返回顶部 返回列表