【发布时间】: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