printk_time
来源:互联网 发布:信阳烟草网络 编辑:程序博客网 时间:2024/05/01 19:40
可以通过uboot 添加time 或者打开CONFIG_PRINTK_TIME 来让通过prink 或者do_syslog 打印log的时候显示时间戳
1044 static bool printk_time = IS_ENABLED(CONFIG_PRINTK_TIME);
1045 module_param_named(time, printk_time, bool, S_IRUGO | S_IWUSR);
前面讲过prink 中的log都是通过console_unlock 来调用console driver来打印log的,在调用console driver之前会调用msg_print_text 来给log前面加上时间戳,我们来看看具体实现
2203 void console_unlock(void)
2204 {
2291 len += msg_print_text(msg, console_prev, false,
2292 text + len, sizeof(text) - len);
2293 if (nr_ext_console_drivers) {
2294 ext_len = msg_print_ext_header(ext_text,
2295 sizeof(ext_text),
2296 msg, console_seq, console_prev);
2297 ext_len += msg_print_ext_body(ext_text + ext_len,
2298 sizeof(ext_text) - ext_len,
2299 log_dict(msg), msg->dict_len,
2300 log_text(msg), msg->text_len);
2301 }
msg_print_text 的实现如下:
1086 static size_t msg_print_text(const struct printk_log *msg, enum log_flags prev,
1087 bool syslog, char *buf, size_t size)
1088 {
1118 if (buf) {
1119 if (print_prefix(msg, syslog, NULL) +
1120 text_len + 1 >= size - len)
1121 break;
1122
1123 if (prefix)
1124 len += print_prefix(msg, syslog, buf + len);
1125 memcpy(buf + len, text, text_len);
1126 len += text_len;
1127 if (next || newline)
1128 buf[len++] = '\n';
1143 }
msg_print_text 又是调用print_prefix
1063 static size_t print_prefix(const struct printk_log *msg, bool syslog, char *buf)
1064 {
11082 len += print_time(msg->ts_nsec, buf ? buf + len : NULL);
1083 return len;
1084 }
继续调用print_time
1047 static size_t print_time(u64 ts, char *buf)
1048 {
1049 unsigned long rem_nsec;
1050
1051 if (!printk_time)
1052 return 0;
1053
1054 rem_nsec = do_div(ts, 1000000000);
1055
1056 if (!buf)
1057 return snprintf(NULL, 0, "[%5lu.000000] ", (unsigned long)ts);
1058
1059 return sprintf(buf, "[%5lu.%06lu] ",
1060 (unsigned long)ts, rem_nsec / 1000);
1061 }
哈哈哈终于看到sprintf来格式字符串加时间戳了吧
1044 static bool printk_time = IS_ENABLED(CONFIG_PRINTK_TIME);
1045 module_param_named(time, printk_time, bool, S_IRUGO | S_IWUSR);
前面讲过prink 中的log都是通过console_unlock 来调用console driver来打印log的,在调用console driver之前会调用msg_print_text 来给log前面加上时间戳,我们来看看具体实现
2203 void console_unlock(void)
2204 {
2291 len += msg_print_text(msg, console_prev, false,
2292 text + len, sizeof(text) - len);
2293 if (nr_ext_console_drivers) {
2294 ext_len = msg_print_ext_header(ext_text,
2295 sizeof(ext_text),
2296 msg, console_seq, console_prev);
2297 ext_len += msg_print_ext_body(ext_text + ext_len,
2298 sizeof(ext_text) - ext_len,
2299 log_dict(msg), msg->dict_len,
2300 log_text(msg), msg->text_len);
2301 }
msg_print_text 的实现如下:
1086 static size_t msg_print_text(const struct printk_log *msg, enum log_flags prev,
1087 bool syslog, char *buf, size_t size)
1088 {
1118 if (buf) {
1119 if (print_prefix(msg, syslog, NULL) +
1120 text_len + 1 >= size - len)
1121 break;
1122
1123 if (prefix)
1124 len += print_prefix(msg, syslog, buf + len);
1125 memcpy(buf + len, text, text_len);
1126 len += text_len;
1127 if (next || newline)
1128 buf[len++] = '\n';
1143 }
msg_print_text 又是调用print_prefix
1063 static size_t print_prefix(const struct printk_log *msg, bool syslog, char *buf)
1064 {
11082 len += print_time(msg->ts_nsec, buf ? buf + len : NULL);
1083 return len;
1084 }
继续调用print_time
1047 static size_t print_time(u64 ts, char *buf)
1048 {
1049 unsigned long rem_nsec;
1050
1051 if (!printk_time)
1052 return 0;
1053
1054 rem_nsec = do_div(ts, 1000000000);
1055
1056 if (!buf)
1057 return snprintf(NULL, 0, "[%5lu.000000] ", (unsigned long)ts);
1058
1059 return sprintf(buf, "[%5lu.%06lu] ",
1060 (unsigned long)ts, rem_nsec / 1000);
1061 }
哈哈哈终于看到sprintf来格式字符串加时间戳了吧
0 0
- printk_time
- printk_time 中时间戳的获取
- struts2中的类型转换
- 重点:货车帮
- 一些开源框架的使用
- 建议5: 使用int?来确保值类型也可以为null
- 网址
- printk_time
- 167. Two Sum II - Input array is sorted
- JavaSE Swing Menu
- 大数据Spark“蘑菇云”行动-第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏
- awk按照某个字段排列,求某个列的最大值最小值
- 中文分词比较困难的句子
- *浙大PAT甲级 1081
- memcache集群的安装和配置
- pdf文件太大?看pdf压缩大小的方法吧