您的位置:首页 > 其它

高通 MSM8K bootloader 之四: ramdump

2014-09-09 17:41 239 查看
前面说过高通平台,系统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 !
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: