К сожалению, эта функция мне предоставляется уже заполненной и я ничего не могу с этим поделать. Я уверен, что он совместим с ядром и не имеет внешних зависимостей.
На данный момент я скомпилировал очень простой модуль, но при попытке insmod получаю сообщение "Неизвестный символ в модуль".
Макияжный файл:
Код: Выделить всё
obj-m := test3.o
test2-y := privatemdule.o
KDIR := /lib/modules/$(shell uname -r)/build
KBUILD_EXTRA_SYMBOLS := /home/pi/test3/extra/Module.symvers
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
Код: Выделить всё
#include
#include
#include
#include
extern int private(int a, int b);
static int __init testthree_init(void)
{
int a, b, c = 0;
a = 0x1234;
b = 0x2468;
c = private(a, b);
printk(KERN_INFO "Result of %d + %d = %d\n", a, b, c);
return 0;
}
static void __exit testthree_exit(void)
{
printk(KERN_INFO "Unloading module\n");
}
module_init(testthree_init);
module_exit(testthree_exit);
MODULE_LICENSE("GPL 3.0");
MODULE_DESCRIPTION("Test module 3");
privatemodule.o и Privatemodule.o_shipped
И файл Module.symvers, содержащий:
Код: Выделить всё
0x7fffffff private /home/pi/test3/privatemodule EXPORT_SYMBOL
Что сделает вывод:
Код: Выделить всё
pi@ZeroW2:~/test3 $ make
make -C /lib/modules/6.1.21-v7+/build M=/home/pi/test3 modules
make[1]: Entering directory '/usr/src/linux-headers-6.1.21-v7+'
MODPOST /home/pi/test3/Module.symvers
CC [M] /home/pi/test3/test3.mod.o
LD [M] /home/pi/test3/test3.ko
make[1]: Leaving directory '/usr/src/linux-headers-6.1.21-v7+'
Что я делаю не так?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/792 ... nel-module