Я построил собственное ядро и могу выполнить системный вызов, но теперь я хочу изменить логику в ссылке на файл .o в Makefile
obj-y + = sys_calls_test.o
blockquote>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 ядра
Большое спасибо
.o файлы компилируются непосредственно в выходной исполняемый файл, поэтому, если вы хотите, чтобы ваши изменения появились, вам придется перекомпилировать ядро, которое зависит от него.
Вы думаете о динамически связанных / совместно используемых объектных файлах, которые в linux обычно сохраняются как файлы .so.
Более подробную информацию см. В этом вопросе о потоке стека: