Makefile для модуля ядра LinuxLinux

Ответить
Anonymous
 Makefile для модуля ядра Linux

Сообщение Anonymous »

Я пытаюсь создать makefile для составления модуля ядра Linux с несколькими исходными файлами. Тем не менее, я сталкиваюсь с ошибкой компиляции , если я не указал файлы объектов.

Код: Выделить всё

#include 
#include 
#include 

int Fun(int Arg);
< /code>
simple_lkm.h

Код: Выделить всё

#include 
#include 
#include 
#include "Fun.h"

#define MODULE_NAME "SimpleLKM"

int __init simple_lkm_init(void);
void __exit simple_lkm_exit(void);
< /code>
[b]Source Files:[/b]
`Fun.c`
#include "Fun.h"

int Fun(int Arg)
{
return Arg + 777;
}
< /code>
simple_lkm.c

Код: Выделить всё

#include "simple_lkm.h"

MODULE_LICENSE("Dual MIT/GPL");

module_init(simple_lkm_init);
module_exit(simple_lkm_exit);

//////////////////////////////////////////////////////////////
int __init simple_lkm_init(void)
{
printk("%s: simple_lkm_init called\n", MODULE_NAME);
int res = Fun(0);
printk("res = %d\n", res);
printk("%s: simple_lkm_init completed\n", MODULE_NAME);

return 0;
}

//////////////////////////////////////////////////////////////
void __exit simple_lkm_exit(void)
{
printk("%s: simple_lkm_exit called\n", MODULE_NAME);
printk("%s: simple_lkm_exit completed\n", MODULE_NAME);
}
< /code>
`Makefile`
MODULE_NAME := SimpleLKM2
PWD := $(shell pwd)
KERNEL := $(shell uname -r)

SRCS := $(wildcard *.c)
#OBJS := $(SRCS:.c=.o)
OBJS := simple_lkm.o Fun.o

obj-m := $(MODULE_NAME).o
$(MODULE_NAME)-y := $(OBJS)

all:
make -C /lib/modules/$(KERNEL)/build  M=$(PWD) modules

clean:
make -C /lib/modules/$(KERNEL)/build M=$(PWD) clean

.PHONY: all clean
< /code>
Compilation failed with the following message:
make -C /lib/modules/6.11.0-21-generic/build  M=/home/dev/LKM/SimpleLKM modules make[1]: Entering directory '/usr/src/linux-headers-6.11.0-21-generic' warning: the compiler differs from the one used to build the kernel The kernel was built by: x86_64-linux-gnu-gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 You are using:           gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 make[3]: *** No rule to make target '/home/dev/LKM/SimpleLKM/SimpleLKM2.o', needed by '/home/dev/LKM/SimpleLKM/'.  Stop. make[2]: *** [/usr/src/linux-headers-6.11.0-21-generic/Makefile:1932: /home/dev/LKM/SimpleLKM] Error 2 make[1]: *** [Makefile:224: __sub-make] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-6.11.0-21-generic' make: *** [Makefile:15: all] Error 2
< /code>
However, if I [b]manually[/b] set OBJS := simple_lkm.o Fun.o
, компиляция успешна.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... nel-module
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»