• 高通 MSM8K bootloader 之四: ramdump


    前面说过高通平台,系统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 !

  • 相关阅读:
    Django创建模型。
    Kubernetes APIService资源
    应用系统管理风险
    [Golang] go list命令查看依赖的版本
    [Golang] 升级gin框架和jwtgo
    [Git] 解决git错误 OpenSSL SSL_read: Connection was reset, errno 10054
    [Github] 配置ssh免密码登录解决 You've successfully authenticated, but GitHub does not provide shell access.
    go循环遍历小坑
    Go 字符串拼接6种,最快的方式 strings.builder
    uniapp安卓真机调试提示检测不到手机【解决办法】
  • 原文地址:https://www.cnblogs.com/liang123/p/6325254.html
Copyright © 2020-2023  润新知