使用klogctl接口离线保存android kernel log

来源:互联网 发布:淘宝远望数码手机真假 编辑:程序博客网 时间:2024/04/30 09:52

源文件如下,通过修改dmesg文件,借用klogctl接口将LOG保存到文件中。

使用方法:
1 拷贝该文件到/system/core/toolbox目录,覆盖掉原文件。
2 编译
make /system/core/toolbox

3 将生成的二进制文件out/target/product/iXXXXXX/system/bin/toolbox 拷贝到手机内部
adb push out/target/product/iXXXXXX/system/bin/toolbox /system/bin/toolbox

4 然后在手机shell中,调用dmesg,将保存LOG文件到log_eric.txt中。
1 拷贝该文件到/system/core/toolbox目录,覆盖掉原文件。
2 编译
make /system/core/toolbox

3 将生成的二进制文件out/target/product/iXXXXXX/system/bin/toolbox 拷贝到手机内部
adb push out/target/product/iXXXXXX/system/bin/toolbox /system/bin/toolbox

4 然后在手机shell中,调用dmesg,将保存LOG文件到log_eric.txt中。

adb shell
cd /data/
dmesg

将会生成/data/log_eric.txt
1 拷贝该文件到/system/core/toolbox目录,覆盖掉原文件。
2 编译
make /system/core/toolbox

3 将生成的二进制文件out/target/product/iXXXXXX/system/bin/toolbox 拷贝到手机内部
adb push out/target/product/iXXXXXX/system/bin/toolbox /system/bin/toolbox

4 然后在手机shell中,调用dmesg,将保存LOG文件到log_eric.txt中。

adb shell
cd /data/
dmesg

将会生成/data/log_eric.txt
1 拷贝该文件到/system/core/toolbox目录,覆盖掉原文件。
2 编译
make /system/core/toolbox

3 将生成的二进制文件out/target/product/iXXXXXX/system/bin/toolbox 拷贝到手机内部
adb push out/target/product/iXXXXXX/system/bin/toolbox /system/bin/toolbox

4 然后在手机shell中,调用dmesg,将保存LOG文件到log_eric.txt中。

adb shell
cd /data/
dmesg

将会生成/data/log_eric.txt
adb shell
cd /data/
dmesg

将会生成/data/log_eric.txt

#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include <errno.h>#include <sys/klog.h>#include <string.h>#define FALLBACK_KLOG_BUF_SHIFT 17  /* CONFIG_LOG_BUF_SHIFT from our kernel */#define FALLBACK_KLOG_BUF_LEN   (1 << FALLBACK_KLOG_BUF_SHIFT)#define KLOG_CLOSE         0#define KLOG_OPEN          1#define KLOG_READ          2#define KLOG_READ_ALL      3#define KLOG_READ_CLEAR    4#define KLOG_CLEAR         5#define KLOG_CONSOLE_OFF   6#define KLOG_CONSOLE_ON    7#define KLOG_CONSOLE_LEVEL 8#define KLOG_SIZE_UNREAD   9#define KLOG_SIZE_BUFFER   10int main(int argc, char **argv){    char *buffer;    char *p;    ssize_t ret;    int n, op, klog_buf_len;    FILE *fp = fopen("log_eric.txt","wa");    if(fp == NULL){        printf("Eric Open File Failed!!!\n");        return EXIT_FAILURE;    }    klog_buf_len = klogctl(KLOG_SIZE_BUFFER , 0, 0);    if (klog_buf_len <= 0) {        klog_buf_len = FALLBACK_KLOG_BUF_LEN;    }    buffer = (char *)malloc(klog_buf_len + 1);    if (!buffer) {        perror("malloc");        return EXIT_FAILURE;    }    p = buffer;    if((argc == 2) && (!strcmp(argv[1],"-c"))) {        op = KLOG_READ_CLEAR;    } else {        op = KLOG_READ_ALL;    }    n = klogctl(op, buffer, klog_buf_len);    if (n < 0) {        perror("klogctl");        return EXIT_FAILURE;    }    buffer[n] = '\0';    fwrite(p,n,1,fp);#ifdef DISPLAY_KLOG    while((ret = write(STDOUT_FILENO, p, n))) {        if (ret == -1) {        if (errno == EINTR)                continue;        perror("write");        return EXIT_FAILURE;    }    p += ret;    n -= ret;    }#endif    fflush(fp);    fclose(fp);    return 0;}
1 0
原创粉丝点击