mtdoops

module_init(mtdoops_init);

static int __init mtdoops_init(void)

向workstruct &cxt->work_erase 注册延期执行函数

    INIT_WORK(&cxt->work_erase, mtdoops_workfunc_erase);
    INIT_WORK(&cxt->work_write, mtdoops_workfunc_write);


注册MTD 使用者,

/**
 *    register_mtd_user - register a 'user' of MTD devices.
 *    @new: pointer to notifier info structure
 *
 *    Registers a pair of callbacks function to be called upon addition
 *    or removal of MTD devices. Causes the 'add' callback to be immediately
 *    invoked for each MTD device currently present in the system.
 */

    register_mtd_user(&mtdoops_notifier);


static struct mtd_notifier mtdoops_notifier = {

    .add    = mtdoops_notify_add,
    .remove    = mtdoops_notify_remove,
};


static void mtdoops_notify_add(struct mtd_info *mtd)

注册kmsg_dump
/**
 * kmsg_dump_register - register a kernel log dumper.
 * @dumper: pointer to the kmsg_dumper structure
 *
 * Adds a kernel log dumper to the system. The dump callback in the
 * structure will be called when the kernel oopses or panics and must be
 * set. Returns zero on success and %-EINVAL or %-EBUSY otherwise.
 */

    cxt->dump.dump = mtdoops_do_dump;
    err = kmsg_dump_register(&cxt->dump);


发生kernel panic/oops, 调用注册的kmsg_dump callback 函数:

static void mtdoops_do_dump(struct kmsg_dumper *dumper,

panic 立即执行MTD 写入

    /* Panics must be written immediately */
    if (reason != KMSG_DUMP_OOPS) {
        if (!cxt->mtd->panic_write)
            printk(KERN_ERR "mtdoops: Cannot write from panic without panic_write\n");
        else
            mtdoops_write(cxt, 1);
        return;
    }

OOPS 向标准工作队列 events 添加workstruct,
    /* For other cases, schedule work to write it "nicely" */
    schedule_work(&cxt->work_write);

scheduler 调度events 线程时,执行

static void mtdoops_workfunc_write(struct work_struct *work)
{
    struct mtdoops_context *cxt =
            container_of(work, struct mtdoops_context, work_write);

    mtdoops_write(cxt, 0);
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值