Изменения в .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 ядра

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

0
задан 25 October 2013 в 21:43

1 ответ

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

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

Более подробную информацию см. В этом вопросе о потоке стека:

https://stackoverflow.com/questions/9688200/difference-between-shared-objects-so-static-libraries-a- и-DLLs-так

0
ответ дан 25 October 2013 в 21:43

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

Похожие вопросы: