diff --git a/init/action.cpp b/init/action.cpp index eeed74415..f3e362eba 100644 --- a/init/action.cpp +++ b/init/action.cpp @@ -118,7 +118,7 @@ void Action::ExecuteCommand(const Command& command) const { Timer t; int result = command.InvokeFunc(); - if (klog_get_level() >= KLOG_INFO_LEVEL) { + if (klog_get_level() >= KLOG_DEBUG_LEVEL) { std::string trigger_name = BuildTriggersString(); std::string cmd_str = command.BuildCommandString(); std::string source = command.BuildSourceString(); diff --git a/init/init.cpp b/init/init.cpp index fc3e80f57..78d71a818 100644 --- a/init/init.cpp +++ b/init/init.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -487,12 +488,11 @@ int main(int argc, char** argv) { mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC)); mount("sysfs", "/sys", "sysfs", 0, NULL); mount("selinuxfs", "/sys/fs/selinux", "selinuxfs", 0, NULL); + mknod("/dev/kmsg", S_IFCHR | 0600, makedev(1, 11)); } - // We must have some place other than / to create the device nodes for - // kmsg and null, otherwise we won't be able to remount / read-only - // later on. Now that tmpfs is mounted on /dev, we can actually talk - // to the outside world. + // Now that tmpfs is mounted on /dev and we have /dev/kmsg, we can actually + // talk to the outside world... InitKernelLogging(argv); LOG(INFO) << "init " << (is_first_stage ? "first stage" : "second stage") << " started!"; @@ -536,6 +536,7 @@ int main(int argc, char** argv) { // This must happen before /dev is populated by ueventd. LOG(INFO) << "Running restorecon..."; restorecon("/dev"); + restorecon("/dev/kmsg"); restorecon("/dev/socket"); restorecon("/dev/__properties__"); restorecon("/property_contexts"); diff --git a/init/log.cpp b/init/log.cpp index 3934ca02f..379141a46 100644 --- a/init/log.cpp +++ b/init/log.cpp @@ -26,8 +26,12 @@ #include static const int kLogSeverityToKLogLevel[] = { - KLOG_NOTICE_LEVEL, KLOG_DEBUG_LEVEL, KLOG_INFO_LEVEL, - KLOG_WARNING_LEVEL, KLOG_ERROR_LEVEL, KLOG_ERROR_LEVEL, + [android::base::VERBOSE] = KLOG_DEBUG_LEVEL, + [android::base::DEBUG] = KLOG_DEBUG_LEVEL, + [android::base::INFO] = KLOG_INFO_LEVEL, + [android::base::WARNING] = KLOG_WARNING_LEVEL, + [android::base::ERROR] = KLOG_ERROR_LEVEL, + [android::base::FATAL] = KLOG_ERROR_LEVEL, }; static_assert(arraysize(kLogSeverityToKLogLevel) == android::base::FATAL + 1, "Mismatch in size of kLogSeverityToKLogLevel and values in LogSeverity"); @@ -68,7 +72,7 @@ void InitKernelLogging(char* argv[]) { if (fd > 2) close(fd); android::base::InitLogging(argv, &KernelLogger); - klog_set_level(KLOG_NOTICE_LEVEL); + klog_set_level(KLOG_INFO_LEVEL); } int selinux_klog_callback(int type, const char *fmt, ...) { diff --git a/libcutils/klog.cpp b/libcutils/klog.cpp index abf643f4f..061af1bf4 100644 --- a/libcutils/klog.cpp +++ b/libcutils/klog.cpp @@ -37,15 +37,7 @@ void klog_set_level(int level) { } static int __open_klog(void) { - int fd = open("/dev/kmsg", O_WRONLY | O_CLOEXEC); - if (fd == -1) { - static const char* name = "/dev/__kmsg__"; - if (mknod(name, S_IFCHR | 0600, (1 << 8) | 11) == 0) { - fd = open(name, O_WRONLY | O_CLOEXEC); - unlink(name); - } - } - return fd; + return TEMP_FAILURE_RETRY(open("/dev/kmsg", O_WRONLY | O_CLOEXEC)); } #define LOG_BUF_MAX 512