前面说过高通平台,系统crash发生时,抓取crash ramdump非常重要,否则很难定位crash原因。
平台默认抓取ramdump的方法都有很强的局限性,如下:
1、PC端工具QPST提供的 Memory Debug Application工具。
局限性:完全信赖PC
2、sbl1将crash现场dump到外置sdcard。 boot_sd_ramdump.c
局限性:很多手机根本没有配置外置sdcard。
3、今天再看高通代码,还有种ram dump 方法,直接dump到raw partition :boot_raw_partition_ramdump .c
boot_procedure_func_type sbl1_pre_dload_procs[] =
{
............
/*-----------------------------------------------------------------------
* Ram dump to eMMC raw partition, this function will reset device
* after successful dump collection if cookie is set
*----------------------------------------------------------------------*/
(boot_procedure_func_type) boot_ram_dump_to_raw_parition,
#ifdef FEATURE_BOOT_RAMDUMPS_TO_SD_CARD
/*----------------------------------------------------------------------
* Take the Ramdumps to SD card if cookie file is
* present in SD card
*---------------------------------------------------------------------*/
boot_ram_dumps_to_sd_card,
#endif /*FEATURE_BOOT_RAMDUMPS_TO_SD_CARD*/
NULL
};
对于没有外置sdcard的手机,我考虑按如下方法改进ramdump机制,大概思路如下:
1、emmc分区添加一个400M左右的新分区,格式化成fat文件系统。
2、external/zlib中的gzip到boot_images,minigzip要针对内存压缩做一些修改。
3、boot_ram_dumps_to_sd_card函数修改:ramdump先使用minigzip对内存压缩,而后保存到添加的新分区。
根据我测试2G ram 以binary gzip压缩后都在200M左右。
4、android启动起来后,将这个添加的新分区mount到/storage/sdcard1,当作外置sdcard供用户使用,不浪费存储空间。
这种改进机制工作还是挺大的,但如果做好,对抓取ramdump是非常有好处,且一劳永逸的事情。
但具体方案是否可行?还需进一步实做!
最近又想了一下,应该不需要额外添加一个分区存储ramdump。
似乎可以使用cache分区来做这个工作。 android 默认cache分区mount成ext4格式,显然sbl无法访问。
所以,我想sbl进行ramdump时将cache分区直接格式化成fat32, 将ramddump压缩到这个fat分区,然后重启手机。
==========》两个重要工作:格式化fat32分区、并mount ; zlip压缩ramdump
重启过程中,将这个fat分区的数据拷贝到内置sdcard后,重新将cache格式化成ext4格式,供android系统使用。
==========》data mount起来,sdcard正常挂载后,将ramdump gzip 拷贝到内置sdcard,然后格式化cache分区ext4。
哈哈,可行不? 实现难度适中啊!
May be hard to develop these works in SBL ,
So , it is a good idea to move ramdump function to bootloader LK .
we can use MTK's zip : bootable/bootloader/lk/lib/zlib .
or lz4 : bootable/bootloader/lk/lib/lz4
WOW ! it is not a good idea using cache partition to save ramdump .
please using data partition tail to save ramdump !!!!~ perfect idea !