c - Linux内核函数和内核模块开发

标签 c linux linux-kernel kernel kernel-module

我即将为 Linux ubuntu 3.8.0-29-generic 编写我的第一个内核模块

我没有内核函数的 man 9 部分(例如 kmalloc、kfree ...) 我在 /usr/include 中也看不到一些函数定义,而是在 /usr/src/linux-headers-3.2.0-53/include/linux 中。在这种情况下,如何在我的代码中包含 header ?

我怀疑可能有类似 apt-get install kernel-devel 的东西可以一次性解决所有这些问题,但我找不到。

也非常感谢链接到对内核模块编写的良好介绍。谢谢。

最佳答案

如果要用3.8.0的内核,为什么会有3.2.0的header?您可以使用 3.8.0 下载额外的源代码树并编译新内核,而无需替换现有的 3.2.0。

无论如何,让我们在现有的 3.2.0 上工作。

  • 首先确保系统运行的内核版本相同 作为您提到的标题目录。

    使用以下命令检查您的系统内核版本:

    $ uname -r

    然后看到您获得了 3.2.0。这意味着当你包括 (#include) 内核头文件在你的程序中,它们将是那些 在 /usr/src/linux-headers-3.2.0-53/include/linux 中。

  • 其次,安装 man 第 9 节:为此,您需要下载内核源代码。从https://www.kernel.org/中选择你想要的版本并将其下载到您的主目录。在该源目录中执行:

    $ sudo apt-get install xmlto

    $制作mandocs

    $ sudo make installmandocs

关于c - Linux内核函数和内核模块开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26747205/

相关文章:

c - 为什么 FreeRTOS 中需要程序集包装器?

regex - 如何在 find 命令下使用正则表达式

linux - 在 Linux 服务器上运行 selenium 脚本时遇到 Chrome 驱动程序问题

linux - 释放克隆的 skb(使用 skb_clone)将释放原始 skb?

linux - Linux DevFreq 驱动程序未被调用的探针

linux - 如何让一个进程中只有一个或多个线程停止消耗CPU资源?

c - 什么程序/实用程序在源代码中使用特殊字符串 "@(#)"?

c - 在 C 程序中使用 execvp 运行命令

python - 使用 Python C 扩展时如何修复 'UnicodeDecodeError: ' utf- 8' codec can' t decode byte'?

linux - 任何人都可以帮我为以下场景编写脚本吗