c - module_init 没有显示我想要的 printk

标签 c linux module terminal kernel

我试图让我的模块显示一个printk。我是新手,所以我可能会遇到一些编程错误。这是我的模块 C 文件:

#include <linux/linkage.h>
#include <linux/time.h>
#include <linux/module.h>

asmlinkage long sys_mycall(int myid, char* firstname)
{
    printk ("Hello, %s! \n sys_mycall called from process %d with  ID %d. \n",
        firstname, current->id, myid);

    return 0;
}

static int my_init(void)
{
    return 0;
}

static int my_exit(void)
{
    printk("Goodbye!");
    return 0;
}

module_init(sys_mycall);
module_exit(my_exit);

首先,我不知道箭头指针是如何工作的,所以我通常在 printk 中省略它,所以它可以完美编译。如果有人可以给我一个链接或一些关于如何理解它的东西,我将非常感激。

当我在终端中使用 insmod 插入它,然后使用 dmesg 显示消息时,我通过 module_init 调用 sys_mycall 但我无法向它添加任何参数,它会显示消息,但不会显示 firstnamemyid 的任何内容。

最佳答案

我认为模块 init 期望函数中没有参数的问题,它必须是 void(你可以用不同的方式添加它们),所以基本上你的函数是用当前在堆栈中的垃圾调用的,这可能是除了它可能为零之外的任何内容,否则您的内核将崩溃。

你要打印什么?我理解 current->id,但不理解其他的。

关于c - module_init 没有显示我想要的 printk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837446/

相关文章:

c - 将二进制文件读入 char* 并转换为结构体?

C:如何迭代 `signed int` 的所有可能值,从 `INT_MIN` 到 `INT_MAX` ?

c - 尝试在 xv6 操作系统中实现三重间接寻址时 XV6 崩溃

c++ - 从源代码 : *** No targets specified and no makefile found. 停止编译 openCV

linux查找文件并复制到目录

javascript - 在 IE7 中,require 回调函数中未定义模块

c - 确定设置了字节中的哪一位

linux - 理解Linux内核中的异常

node.js - 具有NodeJS/CommonJS样式模块系统的语言

angular - 通过模块导入多个 Angular 组件