pstore -last kmsg

作者: xuefeng_apple | 来源:发表于2020-01-06 16:52 被阅读0次

    To enable it, take the below step (test on MSM8916)

    enable below config in kernel config:

    ```

    CONFIG_PSTORE=y

    CONFIG_PSTORE_CONSOLE=y

    CONFIG_PSTORE_RAM=y

    CONFIG_PSTORE_FTRACE=y

    CONFIG_PSTORE_PMSG=y

    CONFIG_DEBUG_FS=y

    CONFIG_FUNCTION_TRACER=y

    ```

    and disable below config:

    # CONFIG_STRICT_MEMORY_RWX

    -----code changes ------

    LINUX/android/kernel/fs/pstore/ram.c

    ```

    -static ulong ramoops_console_size = MIN_MEM_SIZE;

    +static ulong ramoops_console_size = 256*1024UL;

    - static ulong mem_address;

    + static ulong mem_address=0x9ff00000;

    module_param(mem_address, ulong, 0400);

    MODULE_PARM_DESC(mem_address,  "start of reserved RAM used to store oops/panic logs");

    - static ulong mem_size;

    + static ulong mem_size=0x100000;

    ```

    kernel/arch/arm/boot/dts/qcom/msm8916-memory.dtsi

    ```   

        peripheral_mem: pheripheral_region@0 {

                linux,reserve-contiguous-region;

                linux,reserve-region;

                linux,remove-completely;

                reg = <0x0 0x8b600000 0x0 0x0600000>;

                label = "peripheral_mem";

            };

    +        pstore_reserve_mem: pstore_reserve_mem_region@0 {

    +            linux,reserve-contiguous-region;

    +            linux,reserve-region;

    +            linux,remove-completely;

    +            reg = <0x0 0x9ff00000 0x0 0x00100000>;

    +            label = "pstore_reserve_mem";

    +        };

    ```

    -----test command ------

    enable record ftrace

    ```

    # mount -t debugfs debugfs /sys/kernel/debug/

    # echo 1 > /sys/kernel/debug/pstore/record_ftrace

    disable download mode:

    # echo 0 > /sys/module/msm_poweroff/parameters/download_mode

    # echo c > /proc/sysrq-trigger

    ```

    [...device restart]

    ```

    # ls /sys/fs/pstore/

      console-ramoops

      dmesg-ramoops-0

      dmesg-ramoops-1

      ftrace-ramoops

    # cat /sys/fs/pstore/ftrace-ramoops

    0 c08bf830  c08bfbf0  do_page_fault.part.8 <- do_page_fault+0x3c/0xa8

    0 c001b770  c08bfb48  fixup_exception <- do_page_fault.part.8+0x32c/0x398

    0 c0045bb0  c001b780  search_exception_tables <- fixup_exception+0x20/0x38

    0 c008914c  c0045bd8  search_module_extables <- search_exception_tables+0x38/0x44

    0 c08bff5c  c008915c  add_preempt_count <- search_module_extables+0x24/0xc0

    0 c08bfe78  c00891cc  sub_preempt_count <- search_module_extables+0x94/0xc0

    0 c08b2e28  c08bfb64  __do_kernel_fault.part.7 <- do_page_fault.part.8+0x348/0x398

    ```

    --------------------------------------------------------

    workaround for 8916/39/94 64 bit version:

    ram_core.c (kernel\fs\pstore)  

    ```

    +static void *memcpy_pstore(void *dest, const void *src, size_t count)

    +{

    +    char *tmp = dest;

    +    const char *s = src;

    +

    +    while (count--)

    +        *tmp++ = *s++;

    +    return dest;

    +}

    static void notrace persistent_ram_update(struct persistent_ram_zone *prz,

        const void *s, unsigned int start, unsigned int count)

    {

        struct persistent_ram_buffer *buffer = prz->buffer;

    -    memcpy(buffer->data + start, s, count);

    +    memcpy_pstore(buffer->data + start, s, count);

        persistent_ram_update_ecc(prz, start, count);

    }

    ```

    # 立即重新启动计算机

    echo b > /proc/sysrq-trigger

    # 立即关闭计算机

    echo o > /proc/sysrq-trigger

    # 导出内存分配的信息 (可以用/var/log/message 查看)

    echo m > /proc/sysrq-trigger

    # 导出当前CPU寄存器信息和标志位的信息

    echo p > /proc/sysrq-trigger

    # 导出线程状态信息

    echo t > /proc/sysrq-trigger

    # 故意让系统崩溃

    echo c > /proc/sysrq-trigger

    # 立即重新挂载所有的文件系统

    echo s > /proc/sysrq-trigger

    # 立即重新挂载所有的文件系统为只读

    echo u > /proc/sysrq-trigger

    备注: 上面的patch重点是找到一个地址,作为resvered 0x1000000开始地址

    // user 版本有问题

    pstore 有没有build  check .config

    如果不能保存pstore,需要check 是否是warm reboot 还是cold reboot

    echo 1 /sys/module/msm_poweroff/parameters/download_mode

    bool need_warm_reset = true;

    in_panic=1---> 会进入download mode, 如果设定成0 , 则download ->reboot,

    相关文章

      网友评论

        本文标题:pstore -last kmsg

        本文链接:https://www.haomeiwen.com/subject/qomkactx.html