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

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!/n"); exit(EXIT_FAILURE);

}

/* NOTE: driver guarantees we read exactly one full entry */

entry->msg[entry->len] = '/0';

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] = '/0';

if (g_printBinary) {

printBinary(entry);

} else {

(void) processBuffer(entry);

}

}

}

}

}

当然经过此步的修改后,在源码编译中一定会出现问题,会出现什么呢?答案是在编译时找不到相应的类库。那么怎么办呢? 不要着急,第2步会说明。

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

#include <sys/klog.h>

#define KERNEL_TAG "Kernel"

great! 此时将可以顺利通过编译了哦。

3.即将修改后的源文件进行整体编译一边,方法见源码编译的相关方法。边以后生成的logcat文件放在/android/out/host /common/obj/JAVA_LIBRARIES/ddmuilib_intermediates/classes/com/android /ddmuilib/logcat目录下。

4.将上述目录下的logcat文件adb push到你的手机上的/system/bin目录下,然后adb reboot一下手机。之后就可以正常执行logcat了,相应的能够打印出kernel下的相关日志哦。

更多相关文章

  1. android投屏和媒体共享相关 && audio focus机制相关 && AudioTra
  2. Android从远程服务器下载文件到本地sd卡中
  3. 关于Android方法数量限制的问题
  4. Android第三方登录-----微信登录接入方法
  5. 【转载】Android事件分发机制完全解析,带你从源码的角度彻底理解(
  6. Android SDK Manager 更新方法
  7. Android文件访问权限问题
  8. android 源码下载 ARM/x86架构

随机推荐

  1. pc 应用 通过 usb adb 与 android客户端
  2. ArcGIS for Android(安卓)Runtime100 基
  3. 使用jni接口完成android本地程序的运行--
  4. flutter系列之flutter工程如何与android
  5. android listview 单选功能
  6. Android之SurfaceView简介(三)
  7. Android(安卓)6.x 新的运行时权限
  8. 定制android主界面。让你自己写的Android
  9. Android、js&html5的基础资料&书籍
  10. Android漏洞挖掘工具收集与整理