Kompilacja modułu jądra linux

Kompilacja modułu jądra linux
B8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Cześć,
Chciałem stworzyć moduł jądra Linux który jako argumenty przyjmie moje imię, oraz dwie liczby całkowite, a potem wypisze imię oraz sumę tych liczb na standardowym wyjściu. Niestety plik się nie kompiluje. Dostaję komunikat: make[2]: *** Brak reguł do zrobienia obiektu '/home/rafal/Core/core.o', wymaganego przez '/home/rafal/Core/core.mod'. Stop. Poniżej wklejam kod Makefile oraz modułu. Ktoś podpowie co jest nie tak.

Kopiuj
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

static char *my_name= "Janusz";
module_param(my_name, charp, 0644);
MODULE_PARM_DESC(my_name, "String");

static int first_value = 1;
module_param(first_value, int, 0644);
MODULE_PARM_DESC(first_value, "Integer");

static int second_value = 2;
module_param(second_value, int, 0644);
MODULE_PARM_DESC(second_value, "Integer");

static int __init my init(void)
{
int sum;
sum= first_value+second_value;

	printk(KERN_INFO "[parameters] Init module!\n");
	printk(KERN_INFO "[parameters] my_name = %s\n", my_name);
	printk(KERN_INFO "[parameters] sum = %d\n", sum);

	
	return 0;
}

void __exit my_exit(void)

module_init(my_init);
module_exit(my_exit);
Kopiuj
obj-m := core.o
KERNELDIR = /lib/modules/$(shell uname -r)/build

all:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
	
clean:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) clean

enedil
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1028
1

Nie wiem dokładnie jak wywołujesz kompilację, jaką masz dokładnie strukturę plików, ale jak chcesz sensowny przykład minimalistycznego modułu, i jak go budować, to proszę:
https://students.mimuw.edu.pl/ZSO/PUBLIC-SO/2020-2021/06_modules/index.html
Źródła nie byle jakie!

VT
  • Rejestracja: dni
  • Ostatnio: dni
1

@believer88: Po usunięciu oczywistych błędów jak brak ciała proc my_exit(), oraz poprawieniu nazwy proc "my init" na "my_init", u mnie kompiluje się poprawnie. Przy czym kompiluję przy pomocy "make" bez jakichkolwiek parametrów. Zakładam również, że plik ze źródłami nazwałeś "core.c" bo jeśli nazwałeś go inaczej to właśnie taki błąd możesz dostać jak "brak reguł do zrobienia...".

B8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

@vtx: Dzięki wielkie, poprawiłem te błędy o których pisałeś. Mój plik nazywał się "Core.c". Tutaj też poprawiłem na wielką literę, teraz wszystko dobrze chodzi. Enedil, dzięki za link, na pewno skorzystam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.