LINUX.ORG.RU

Linux Driver ERROR - Unresolved Symbol


0

0

Практический вопрос Делаю Linux Driver, собираю - все нормально. Делаю insmod driver.o и получаю Unresolved Symbol.

Не понимаю , где грабли? Пожалуйста подскажите, кто может.


ну значит функцию какую-то используешь, которой нет в ядре.

на что именно она пишет на Unresolved Symbol?

Dead ★★★★
()

Пишет имя функции которую unresolved

yric
() автор топика
Ответ на: комментарий от SadStork

Спасибо за комплимент. Если это важно , то queue_task, декларирована она в <linux/tqueue.h> Жду ответа и задания для разведки.

yric
() автор топика

все функции доступные в ядре можно увидеть запустив cat /proc/ksyms

SadStork
()

есть у меня предчувствие - что у тебя она есть в ядре, но с окончанием вроде _R3g4hd

SadStork
()

Я тоже это хотел написать, но потом глянул в свой /proc/ksyms и очень удивился.

Там были только функции по работе с ipv6.

Видно с моего последнего драйвера, что-то они в ядре поменяли :-) Ядро 2.4.18

Dead ★★★★
()

Все очень просто. Эти функции объявлены в ядре как extern inline. У тебя gcc воспринял как extern. При компиляции добавь в командную строку ключ -O (О большое) xlin@list.ru

xlin
()
Ответ на: комментарий от xlin

Продолжаем разговор. В VALinux - была проблема unresolved - решилась переходом на RH7.3, но вот новая заковыка В книге Померанца "Программирование драйверов" есть пример с использованием этой самой queue_task.

Вот код ============= CUT ========================= static struct wait_queue*WaitQ=NULL; static void intr_sub(void*);

static struct tq_struct Task = { NULL, //NEXT Element filled by queue_task 0, //Flag intr_sub,//Function NULL //Function parameter };

static void intr_sub(void*ptr){ TimerCount++; if (WaitQ!=NULL) wake_up(&WaitQ); else queue_task(&Task,&tq_timer); } int module_start(){ Major = register_chrdev(0,DEV_NAME,&Fops); if (Major<0){ printk("Kernel: register failed\n"); return Major; } queue_task(&Task,&tq_timer); return 0; } void module_stop(){ if(unregister_chrdev(Major,DEV_NAME)<0){ printk("Kernel: unregister failed\n"); } sleep_on(&WaitQ); } ============= CUT =========================

Проблема в том, что функция intr_sub не вызывается и соответственно в module_stop() sleep_on виснет. Кто знает где ошибка?

yric
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.