源文件如下,通过修改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
#include
#include
#include
#include
#include
#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 10
int 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;
}