我已经构建了一个自定义内核,并且能够执行系统调用,但现在我想更改 Makefile 中 .o 文件引用中的逻辑
obj-y += sys_calls_test.o
sys_calls_test.o 有
#include<linux/linkage.h>
asmlinakge long sys_hello(void)
{
printk("hello");
}
我将其修改为
#include<linux/linkage.h>
asmlinakge long sys_hello(void)
{
printk("Testing this block");
}
当我尝试重新编译 sys_calls_test.c 文件时,更改没有显示出来
我用了
gcc file_name.c -o testing_comp
./testing_comp
我在内核的 makefile 中引用的 sys_calls_test.c 文件。
#include <stdio.h>
#include <linux/unistd.h>
#include <sys/syscall.h>
#define sys_hello 349
int main(void)
{
int c = syscall(sys_hello, a, b);
printf("System call returned %d\n", c);
return 0;
}
我仍然看到“你好”,而不是“测试这个块”
有人能告诉我是否必须重新编译 Linux 源代码,以及为什么我的更改没有显示出来吗?我是否需要使用 make 命令并重建整个内核源代码来显示此更改,因为我已更改了内核 Makefile 中的 .o 引用
多谢
答案1
.o 文件直接编译到输出可执行文件中,因此如果您希望更改出现,则必须重新编译依赖于它的内核。
您正在考虑动态链接/共享对象文件,在 Linux 中它们通常保存为 .so 文件。
请参阅此 stackoverflow 问题以了解更多详细信息: