高通 MSM8K bootloader 之四: ramdump
2016-03-30 14:17
1261 查看
前面说过高通平台,系统crash发生时,抓取crash ramdump非常重要,否则很难定位crash原因。平台默认抓取ramdump的方法都有很强的局限性,如下:1、PC端工具QPST提供的 Memory Debug Application工具。局限性:完全信赖PC2、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 !
{
............
/*-----------------------------------------------------------------------
* 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 !
相关文章推荐
- 二、Spring组装BeanDefinition详情(1)
- 百度地图缩放、比例尺、logo操作
- 高通 MSM8K bootloader 之四: ramdump
- java.lang.NoSuchFieldError:包.R$id.xxx
- 【splay】poj3468
- Qt生产者消费者实验:等待条件QWaitCondition
- 获取验证码倒计时功能
- java Socket编程初探_TCP
- hdu 1754 I Hate It(线段树单点更新求区间最大值)
- MYSQL级联条件删除数据
- HTTP/1.1
- IOS开发-UI学习-NSBundle和NSURL的区别(读取文件以及写入文件)
- 高通 MSM8K bootloader 之三: LK
- 【图像处理】FFmpeg-0
- exists in SQL
- 网页中JS函数自动执行常用三种方法
- 高通 MSM8K bootloader 之三: LK
- Java 多线程线程池 - 线程池原理
- Linux启动流程
- windows中mac虚拟机网络连接