kmsg_dump提供一种机制在系统挂掉的时候将log转存到其他介质如ramoos或者mtd等.我们以mtd中的使用为例来分析kmsg_dump机制.
使用kmsg_dump之前要先使用kmsg_dump_register来注册一个dumper,用于实际的log写函数.
我们先来看看kmsg_dump_register的定义,只定义了一个dump_list,将系统中所有注册的dump都挂在同一个list下,这就说明系统可以注册多个dumper
kernel/printk/printk.c
2819 int kmsg_dump_register(struct kmsg_dumper *dumper)
2820 {
2821 unsigned long flags;
2822 int err = -EBUSY;
2823
2824 /* The dump callback needs to be set */
2825 if (!dumper->dump)
2826 return -EINVAL;
2827
2828 spin_lock_irqsave(&dump_list_lock, flags);
2829 /* Don't allow registering multiple times */
2830 if (!dumper->registered) {
2831 dumper->registered = 1;
2832 list_add_tail_rcu(&dumper->list, &dump_list);
2833 err = 0;<
kmsg_dump
于 2016-08-09 17:46:34 首次发布