您的位置:首页 > 移动开发 > Android开发

android logcat里打印kernel信息

2013-11-29 22:44 591 查看
没试过,摘录下来 有空研究下:

1.在Android的源码中(目标路径为:system/core/logcat/logcat.cpp),将其此logcat.cpp文件中的static void readLogLines(int logfd)函数作出如下修改:

2 在如上修改的.cpp文件的头文件中加入如下两个头文件:

#include < sys/klog.h>

  #define KERNEL_TAG "Kernel"

static void readLogLines(int logfd) {
char buffer[256] = {0} ;
while (1) {
unsigned char buf[LOGGER_ENTRY_MAX_LEN + 1] attribute ((aligned(4)));
struct logger_entry *entry = (struct logger_entry *) buf;
int ret;
ret = read(logfd, entry, LOGGER_ENTRY_MAX_LEN);
if (ret < 0) {
if (errno == EINTR)
continue;
if (errno == EAGAIN)

break;

perror("logcat read"); exit(EXIT_FAILURE);
} else if (!ret) {
fprintf(stderr, "read: Unexpected EOF! "); exit(EXIT_FAILURE);
}
/* NOTE: driver guarantees we read exactly one full entry */
entry->msg[entry->len] = '';
if (g_printBinary) {
printBinary(entry);
} else {
(void) processBuffer(entry);
}

/*读入内核调试信息*/ if((ret = klogctl(9, buffer, sizeof(buffer))) > 0) {
if((ret = klogctl(2, buffer, sizeof(buffer))) > 0) {

entry->tid = 0;
entry->pid = getpid();
/*priority*/
entry->msg[0] = ANDROID_LOG_INFO;
/*tag*/

strcpy(entry->msg+1, KERNEL_TAG); /*message*/
strncpy(entry->msg+1+sizeof(KERNEL_TAG), buffer, ret);
entry->len = 1 + sizeof(KERNEL_TAG) + ret + 1;
entry->msg[entry->len] = '';
if (g_printBinary) {
printBinary(entry);
} else {
(void) processBuffer(entry);
}
}
}
}

}


可能要修改init.rc 里的 服务,需要root权限

有空研究一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: