2019-08-19 10:20:06 +00:00
|
|
|
#include "klog_api.h"
|
|
|
|
#include <linux/slab.h>
|
|
|
|
#include <linux/module.h>
|
|
|
|
|
|
|
|
#define LOG_MSG_SZ 1024
|
|
|
|
#define MODULE_FMT "[%s]"
|
|
|
|
|
|
|
|
klog_t *g_klog = NULL;
|
|
|
|
|
|
|
|
klog_t *klog_init(const char *module_name)
|
|
|
|
{
|
|
|
|
klog_t *log = NULL;
|
|
|
|
u32 len = 0;
|
|
|
|
|
|
|
|
if(NULL == module_name) {
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
len = strlen(module_name);
|
|
|
|
|
2019-08-28 08:54:10 +00:00
|
|
|
if (len > MAX_MODULE_NAME_SZ) {
|
|
|
|
printk(KERN_ERR"The length:%d of module_name must be not more than %d, but input module_name is %s", len, MAX_MODULE_NAME_SZ, module_name);
|
2019-08-19 10:20:06 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
log = (klog_t *)kmalloc(sizeof(*log), GFP_KERNEL);
|
|
|
|
if (NULL == log) {
|
|
|
|
printk(KERN_ERR"Allocating log memory is failure");
|
|
|
|
return NULL;
|
|
|
|
}
|
2019-08-28 08:54:10 +00:00
|
|
|
memset(log->module_name, '\0', MAX_MODULE_NAME_SZ+1);
|
2019-08-19 10:20:06 +00:00
|
|
|
strncpy(log->module_name, module_name, len);
|
|
|
|
|
|
|
|
return log;
|
|
|
|
}
|
|
|
|
|
|
|
|
void klog_close(klog_t *log)
|
|
|
|
{
|
|
|
|
if (log != NULL) {
|
|
|
|
kfree(log);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void klog_record(const klog_t *log, const char* level_str, const char *fmt, ...)
|
|
|
|
{
|
|
|
|
char log_buf[LOG_MSG_SZ];
|
|
|
|
va_list args;
|
|
|
|
|
|
|
|
va_start(args, fmt);
|
|
|
|
vsnprintf(log_buf, sizeof(log_buf), fmt, args);
|
|
|
|
va_end(args);
|
|
|
|
|
|
|
|
if (NULL != log) {
|
|
|
|
printk("%s"MODULE_FMT" %s", level_str, log->module_name, log_buf) ;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
printk("%s %s", level_str, log_buf) ;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
EXPORT_SYMBOL_GPL(klog_init);
|
|
|
|
EXPORT_SYMBOL_GPL(klog_close);
|
|
|
|
EXPORT_SYMBOL_GPL(klog_record);
|
|
|
|
|
|
|
|
|
|
|
|
static int __init klog_api_init(void)
|
|
|
|
{
|
|
|
|
g_klog = klog_init("klog_api");
|
|
|
|
|
|
|
|
KLOG_INFO(g_klog, "Klog is initiated");
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void __exit klog_api_exit(void)
|
|
|
|
{
|
|
|
|
KLOG_INFO(g_klog, "Klog is exited");
|
|
|
|
|
|
|
|
klog_close(g_klog);
|
|
|
|
}
|
|
|
|
|
|
|
|
module_init(klog_api_init);
|
|
|
|
module_exit(klog_api_exit);
|
|
|
|
|
|
|
|
MODULE_LICENSE("GPL");
|
|
|
|
MODULE_DESCRIPTION("Klog_api process module");
|
|
|
|
MODULE_AUTHOR("zhangtao");
|
|
|
|
|