安卓8.0 开启init打印

安卓init进程没有打印,因为init的打印被重定向到/sys/fs/selinux/null。调试init时如果要开启打印,首先要解决打印重定向问题, 修改文件system/core/init/log.cpp,

@@ -25,6 +25,7 @@

 void InitKernelLogging(char* argv[]) {
     // Make stdin/stdout/stderr all point to /dev/null.
+#if 0
     int fd = open("/sys/fs/selinux/null", O_RDWR);
     if (fd == -1) {
         int saved_errno = errno;
@@ -36,7 +37,7 @@ void InitKernelLogging(char* argv[]) {
     dup2(fd, 1);
     dup2(fd, 2);
     if (fd > 2) close(fd);
+#endif

修改完毕,虽然可以打印log,但是 log稍微一多,发现打印不全,部分打印被忽略了,因为Kernel中对打印的频率做了监控,再修改Kernel代码屏蔽此控制,修改文件linux-4.9.y/kernel/printk/printk.c

@@ -742,10 +742,12 @@ static ssize_t devkmsg_write(struct kiocb *iocb, struct iov_it
er *from)
                return len;

        /* Ratelimit when not explicitly enabled. */
+#if 0
        if (!(devkmsg_log & DEVKMSG_LOG_MASK_ON)) {
                if (!___ratelimit(&user->rs, current->comm))
                        return ret;
        }
+#endif

        buf = kmalloc(len+1, GFP_KERNEL);
        if (buf == NULL)

上述方法直接修改代码,比较暴力,不过有效;如有命令或什么参数可以解决,欢迎指教。

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页