Изменения в.o файлах после компиляции

Я собрал собственное ядро ​​и могу выполнить системный вызов, но теперь я хочу изменить логику в ссылке на файл.o в Makefile

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

Мой файл sys_calls_test.c, на который я ссылался в make-файле ядра.

#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 и пересобрать весь исходный код ядра, чтобы показать это изменение, так как я изменил ссылку.o в Makefile ядра

большое спасибо

1 ответ

Решение

Файлы.o компилируются непосредственно в выходной исполняемый файл, поэтому, если вы хотите, чтобы ваши изменения появились, вам придется перекомпилировать ядро, которое зависит от него.

Вы думаете о динамически связанных / совместно используемых объектных файлах, которые в linux обычно сохраняются как файлы.so.

Пожалуйста, обратитесь к этому вопросу stackoverflow для более подробной информации:

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

Другие вопросы по тегам