编译后对 .o 文件的更改

编译后对 .o 文件的更改

我已经构建了一个自定义内核,并且能够执行系统调用,但现在我想更改 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 问题以了解更多详细信息:

https://stackoverflow.com/questions/9688200/difference-between-shared-objects-so-static-libraries-a-and-dlls-so

相关内容