当前位置: 首页 > 面试题库 >

在这种情况下如何从Linux内核模块导出符号?

谢洛城
2023-03-14
问题内容

我已经构建了两个内核模块,其中一个是net_device。我的net_device模块A依赖于模块B,模块B提供了一些额外的控制机制来导出设备信息。

我希望模块B能够调用模块A中的“ xmit”函数。因此,如果我简单地从A导出符号,则模块B将依赖于模块A。这显然会产生“死锁”依赖性情况。

有没有人有解决这个问题的经验?如何正确导出A中的“ xmit”函数并让B使用它?


问题答案:

您可以从模块A提供回调函数。在这种情况下,您无需将所需的每个函数导出到内核名称空间。我想您可以为B提供一些结构。

内部标头:

struct possible_ops {
    int (*xmit)(...);
};

A:

struct private {
    struct possible_ops *ops;
};
...  
ops = kzalloc(sizeof(*ops));
ops->xmit = xmit;

B:

whatever(struct possible_ops *ops) {
    if (ops && ops->xmit) {
        ret = ops->xmit();
        ...
    }
}


 类似资料:
  • 这是我的建筑。格雷德尔: 我试图找出问题所在,使用以下代码来分析问题: 结果是:

  • 我在使用fs.readfile进行同步时遇到了一个问题,他们没有在第一次初始化,如果我再次尝试请求,那么我就有结果了。我知道我可以用promise和我从Kriskowal找到一些有用的东西。我试过但没有成功。我不太明白如何实施它。如果有人能帮忙,我将永远感激。 代码:

  • 事件处理程序添加到GameGui.java类的GridPane中,从第82行开始。 基本上,我试图找到您在网格窗格中拖动这个对象的任何节点的索引。通过将SetonMouseEnter应用到gridpane中的每个节点,我可以在不拖动的情况下完成这一任务,但是当我试图利用SetonMouseDragEnter时,我什么也没有得到。 有人有办法让这个工作吗? 这些是我应用于GridPane中节点的事件

  • 问题内容: 我有一个同时具有两个外部内核模块和一个用户空间守护程序的应用程序。我想在启动时从用C编写的守护程序代码中加载模块,然后在干净退出时将其卸载。我可以用比使用相应的方式更干净的方式加载它们吗? 问题答案: 最小的可运行示例 使用此简单的参数打印机模块,在QEMU + Buildroot VM和Ubuntu 16.04主机上进行了测试。 我们使用/ 和 Linux系统调用。 Linux内核为

  • 在这种情况下是否可以避免ArrayIndexOutOfBoundsException??

  • 问题内容: 我是T-SQL命令的新手,所以我在SQL逻辑中找到了一个可以使用它并想要对其进行测试的地方,但无法弄清楚我应该如何使用它: 请提出正确的用法。谢谢! 问题答案: 您在帮助中了吗?这是一个简单的例子: