У меня был маленький модуль с одним исходным файлом C foo.c
, и все было хорошо.
#include <linux/init.h>
#include <linux/module.h>
static int __init foo_init(void) {
printk(KERN_INFO "foo_init says hello (%d)\n");
return 0;
}
static void __exit foo_exit(void) {
}
module_init(foo_init);
module_exit(foo_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("ACME");
Makefile
было просто:
obj-m += foo.o
Теперь, когда источник вырос, я хочу добавить второй исходный файл bar.c
:
#include <linux/init.h>
#include <linux/module.h>
int aux(int x) {
return x + 1;
}
Я добавил вызов функции aux
в foo.c
. (Ну, в реальной жизни я объявляю функцию aux
в заголовке, и мой код делает больше, чем просто печатает сообщение, но я сократил мою проблему до этого небольшого примера.) И я добавил строку, чтобы объявить компоненты модуля в make-файле, следующие Documentation/kbuild/makefiles.txt
.
foo-objs += bar.o
obj-m += foo.o
Но теперь, когда я собираю модуль, кажется, что foo.o
не связан (modinfo
сообщает об отсутствии лицензии на модуль и автора, nm foo.ko
не находит символы, определенные в foo.c
, foo_init
очевидно не запускается при загрузке модуля). Помещение foo-objs := foo.o bar.o
в make-файл не помогает.
Почему при добавлении второго исходного файла происходит смещение первого исходного файла и как мне вернуть foo
обратно?
В случае, если это имеет значение: версия ядра 2.6.35, архитектура arm, а модуль встроен в дерево.