首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将linux工作队列工作者的printk立即打印到dmesg中?

如何将linux工作队列工作者的printk立即打印到dmesg中?
EN

Stack Overflow用户
提问于 2020-04-30 13:51:54
回答 1查看 195关注 0票数 0

我有一个关于linux工作队列的问题。我找到了使用workqueue的示例内核模块,并对其进行了测试。这是密码。

代码语言:javascript
复制
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/workqueue.h>
#include <linux/slab.h>

MODULE_LICENSE( "GPL" );

static struct workqueue_struct *my_wq;

typedef struct {
    struct work_struct my_work;
    int    x;
} my_work_t;

my_work_t *work, *work2;


static void my_wq_function( struct work_struct *work)
{
    my_work_t *my_work = (my_work_t *)work;

    printk( "my_work.x %d", my_work->x );

    kfree( (void *)work );

    return;
}

static int __init init_workqueue( void )
{
    int ret;

    my_wq = create_workqueue("my_queue");
    if (my_wq) {

        /* Queue some work (item 1) */
        work = (my_work_t *)kmalloc(sizeof(my_work_t), GFP_KERNEL);
        if (work) {

            INIT_WORK( (struct work_struct *)work, my_wq_function );

            work->x = 1;

            ret = queue_work( my_wq, (struct work_struct *)work );

        }

        /* Queue some additional work (item 2) */
        work2 = (my_work_t *)kmalloc(sizeof(my_work_t), GFP_KERNEL);
        if (work2) {

            INIT_WORK( (struct work_struct *)work2, my_wq_function );

            work2->x = 2;

            ret = queue_work( my_wq, (struct work_struct *)work2 );

        }

    }

    return 0;
}

static void __exit exit_workqueue( void )
{
    flush_workqueue( my_wq );
    destroy_workqueue( my_wq );

    return;
}

module_init(init_workqueue)
module_exit(exit_workqueue)

这就是结果。左边显示我输入的内容,右边显示dmesg。我不知道为什么工作2的打印没有出现。

在我重新插入我的模块之后,它就出现了。

如何从排队的工作中获得printk消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 14:41:05

printk()的调用不会以换行符(\n)结尾,因此在下一次调用在内核消息缓冲区中添加新条目之前,dmesg不会打印任何内容。

只需在格式字符串的末尾添加一个换行符,如下所示:

代码语言:javascript
复制
printk("my_work.x %d\n", my_work->x);
//                  ^^
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61524979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档