LINUX.ORG.RU

__global_cli && __global_sti


0

0

Доброе время суток.
Такой вопрос: есть исходники некоторых драйверов, написанных под ядро 2.2.х, их нужно перетащить на 2.4.х. Практически все проходят, но в паре при загрузке вылетает
unresolved symbol __global_cli
и
unresolved symbol __global_sti
Эти функции явным образом не вызываются в модуле. Как бы от этого хозяйства избавиться? Имеется в виду как обойти эту фигню?

__global_{cli,cli} в 2.4 есть.

> Эти функции явным образом не вызываются в модуле.

См. cli()/sti()

Скорее всего, модуль компилируется с CONFIG_SMP,
а загружается в UP kernel.

Либо это 2.6, тогда:

Murr:

> Возьми реализацию этих функций из arch/.../kernel/irq.c
> и вставь модулем, предварительно проэкспортировав.

Вряд ли получится. Пришлось бы модифицировать irq_enter(),
hardirq_trylock() etc.

Лучше всего просто избавиться от cli()/sti().
Если SMP не нужно, заменить на local_irq_{disable,enable},
иначе см. spin_{,un}lock_irq().

Вообще, если код использует cli(), он, скорее всего
неправильный в SMP случае :)

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

idle:

>Скорее всего, модуль компилируется с CONFIG_SMP,
а загружается в UP kernel.

Это разве что товарищ криво пути к заголовочным файлам написал :) А-ля без "-I/lib/modules/`uname -r`/build/include".

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

Насчет вырезания символов я какой-то бред написал выше ;(. Видимо - действие разборок с ld (так можно сделать через ld script). Сами же символы надо определять после сборки модуля через ld -r --defsym my_symbol=my_symbol_address mymodule.o

По поводу модуля еще раз.
Надо все же сделать grep global_sti /proc/ksyms.

Если ывод будет пустым, то значит, что такого символа нет в ядре. Скорее всего, как заметил idle, это означает, что ты суешь SMP модуль в UP ядро. Убедись, что при компиляции ты указываешь путь к корректным исходникам, причем конфигурация которых соответствует текущему (целевому) ядру, убедись, что ты нигде не переопределяешь CONFIG_* (вообще, дурной тон).

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