Я новичок в программировании Linux, и я борюсь с созданием в make-файле. Я получил 3 файла: hello.cmakefile в linux, не в состоянии вставить модуль
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include "funcs.h"
int init_module(void) {
asgard();
return 0;
}
void cleanup_module(void) {
printk(KERN_INFO "Goodbye world 1.\n");
}
funcs.c
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include "funcs.h"
void asgard(void) {
printk(KERN_INFO "Asgard balordo\n");
return;
}
funcs.h
#include <linux/module.h> /* Needed by all modules */
void asgard(void);
Тогда Makefile:
obj-m += hello.o
hello-objs := funcs.o
first:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
all: funcs.o hello.o
gcc -o start funcs.o hello.o
funcs.o: funcs.c funcs.h
gcc -C funcs.c
hello.o: hello.c funcs.h
gcc -C hello.c
clean:
rm -f *.o
rm -f ./start
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Когда я компилирую , все нормально, когда я звоню в insmod. /hello.ko сказано, что невозможно вставить модуль. Можете ли вы сказать мне, где я ошибаюсь, пожалуйста?
Есть 2 исходных файла, hello.c и funcs.c, hello.o - это двусмысленность здесь. Поэтому, пожалуйста, попробуйте переименовать hello.c на hello_1.c и установите hello-objs: = funcs.o hello_1.o и rebuild – Eric
Хорошо, теперь это работает, спасибо 4 помощи! – alteration