打印日志消息到内核
在Android java层面,经常会需要比较下开机时序,或是要知道该进程是开机多长时间执行,但由于内核kernel 日志并没有打印相应的时间戳,故此时就需要打印日志到内核,包括消息、时间戳、进程pid等。
打开/dev/kmsg的权限
需要打开/dev/kmsg的权限,重新生成并替换boot.img
路径:/system/core/rootdir/init.rc
on init
sysclktz 0
loglevel 3
+
+ #modify /dev/kmsg
+ chmod 666 /dev/kmsg
示例1:打印数值到内核
#include
......
char buf[256];
sprintf(buf,"echo "%d" > /dev/kmsg", 2333);
system(buf);
示例2:打印时间戳到内核
#include
#include
time_t timep;
struct tm *p;
time (&timep);
p=gmtime(&timep);
char buf[256];
pid_t pid = getpid();
sprintf(buf,"echo "kejd pid=%d,year=%d,mon=%d,day=%d,hour=%d,min=%d,sec=%d" > /dev/kmsg", pid,1900+p->tm_year, 1+p->tm_mon, p->tm_mday, 8+p->tm_hour, p->tm_min, p->tm_sec);
system(buf);
示例:打印进程号到内核
#include
......
pid_t pid = getpid();
sprintf(buf,"echo "kejd pid=%d" > /dev/kmsg", pid);
其它方式的打印
写法1:system("echo test123 > /dev/kmsg");
写法2:klog_writev(7,"testkernel log");
写法3:BOOTINFO("testEntered dsi_mni_init mainn");
写法4:
do {
KLOG_ERROR("charger", "kejd dsi_mni_init debug: dsi_mni_init: ENTRY");
} while (0);
写法5:
system("echo 123 > /dev/__kmsg__");



