【问题标题】:What needs to be done to import and use a Linux kernel module in python?在 python 中导入和使用 Linux 内核模块需要做什么?
【发布时间】:2013-04-21 17:15:15
【问题描述】:

我需要做什么才能将 Linux 内核模块导入 python,以便我可以在我想要构建的应用程序中使用它的功能。

我的目标是使用自 2.6 以来已包含在 Linux 内核中的更好的移动 Ad-Hoc 网络 (B.A.T.M.A.N) 内核模块,用于由 Raspberry Pi 组成的网状网络的路由目的。我将使用 Twisted 进行所有的网络编程。

【问题讨论】:

  • 我认为你需要构建一个python c-extension。
  • -1:写的这个问题显示了对内核模块是什么以及如何使用它们的一些混淆。模块通常在用户空间启动过程中使用udev 从“rc”(启动)脚本加载。在设备探测期间未配置的其他模块可以在/etc/modules.d 中加载。见man modules.d。从以 root 身份运行的 Python 脚本中,您可以执行 call(["modprobe", "my_module"]) 之类的操作来加载模块,但以 root 身份运行通常不是一个好主意,除非您在没有用户访问权限的嵌入式系统上。

标签: python linux linux-kernel twisted kernel


【解决方案1】:

您不想加载内核模块。内核模块有许多非常奇怪的属性(例如,一些指令被编译为无操作,然后根据处理器在加载时替换。)

相反,将代码重新编译到可以从 Python 调用的用户空间库中会简单得多。

更简单的是,您可以抓住 BATMAN 算法的“用户空间”分支,称为 batmand 并使用它。 http://www.open-mesh.org/projects/open-mesh/wiki/BranchesExplained

【讨论】:

    【解决方案2】:

    触发将该模块加载到内核中。将其加载到用户空间进程中可能是徒劳的。从理论上讲,您可以使用内核模块的源代码在 C 中构建 Python 模块,但这仍然不能为您提供例如硬件访问,您也必须模拟/复制大部分内核基础架构。听起来是个坏主意。

    【讨论】:

    • 所以基本上我应该编写一个Shell脚本,在系统上调用它来将该模块加载到内核中? Python 将如何使用它?
    • 可以直接启动modprobe或类似工具,不需要shell脚本。查看子流程模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多