【问题标题】:Implementing a custom system call in Kernel Version 3.16.x在内核版本 3.16.x 中实现自定义系统调用
【发布时间】:2019-09-10 19:40:14
【问题描述】:

网络上有很多资源(也在 Youtube 上)关于如何在制作内核之前实现自定义系统调用。它们大多是简单的(比如打印 hello world/添加两个数字)。我想实现一个更复杂的(使用其 PID 为进程打印 task_struct),这不可能一次就正确。我是否必须一次又一次地运行“make modules_install”才能查看我对调用代码的更改结果? 考虑到我不能使用传统的 GCC 编译器干运行我的代码,因为我包含了 linux/xyz.h 和其他头文件和命令,如 (printk()),它们只能在内核模式下使用。 我是 C 和内核黑客的新手,如果我问的问题非常明显,请原谅。

我要运行的代码: http://tuxthink.blogspot.com/2012/07/module-to-find-task-from-its-pid.html

【问题讨论】:

  • 由于系统调用是内核的一部分,而不是模块的一部分,因此不需要在更改后重新运行make modules_install。但是,您仍然需要运行make install 来更新内核映像。
  • 那我是不是要重新做内核了
  • 当你修改内核的代码时,你需要重新构建它。请注意,make 是一个非常智能的工具:它只会重建那些自上次构建后源已被修改的对象文件。
  • 我尝试使用 make,当它再次开始制作驱动程序时,我停止了内核构建,是否需要传递一些特殊标志?
  • 我找到了解决方案,我写在这里以供将来参考。尝试安装 ccache (ccache.dev),同时使用命令 'sudo ccache make' 而不是 'sudo make'。自创建缓存以来,第一次编译将是正常时间。随后的编译在我的机器上花费的时间不超过 2 分钟。

标签: linux operating-system kernel


【解决方案1】:

Make 仅重建更改的源代码文件。您不需要像 ccache.dev 这样的外部库。尝试做 make -j 8 。

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多