The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"rk30xxnand"
Версия для распечатки Пред. тема | След. тема
Форум Программирование под UNIX
Исходное сообщение [ Отслеживать ]

. "rk30xxnand" +1 +/
Сообщение от skb7 (ok), 19-Янв-14, 18:15 
>[оверквотинг удален]
> я конечно наугад попробывал
> cat ./rk30xxnand-3.0.36.ko | sed 's|vermagic=3.0.36+ SMP preempt mod_unload
> ARMv7 |vermagic=3.0.36+ SMP mod_unload ARMv7 \x00      
>  |g'>rk30xxnand-3.0.36+.ko
> теперь оно даже пытается грузиться, НО
> 'rk30xxnand_ko: Unknown symbol _raw_spin_unlock_irq (err 0)'
> собственно вопрос :
> я правильно понимаю что это не вылечить никак кроме как пересобрать ядро
> под "нужды" модуля
> особенно приветствуются коменты от pavinux'а и skb7, кито ещё ядерщики?

Мне кажется вот что происходит:

1. Модуль собран для ядра с включенным preemption, а ваше ядро собрано без preemption. Включается это через CONFIG_PREEMPT.

2. Спинлоки, насколько я знаю, работают только когда preemption включен, а когда выключен -- они вырождаются в пустой код. Подробнее тут http://landley.net/kdocs/htmldocs/kernel-locking.html:


For kernels compiled without CONFIG_SMP, and without CONFIG_PREEMPT spinlocks do not exist at all.


3. Таким образом, в вашем ядре не экспортируется символ (функция) _raw_spin_unlock_irq, а модуль требует, чтобы такая функция присутствовала в таблице символов ядра. Поэтому при попытке загрузить модуль (даже с обманом типа "modprobe --force") происходит ошибка линковки и модуль не может быть загружен.


Так что да, вариантов тут только два: пересобирать модуль под ваше ядро или пересобирать ядро под модуль. И поскольку исходников модуля нет, остается один вариант. Оцените все прелести проприетарных драйверов, как говорится.

Хотя с другой стороны не совсем понятно, зачем было отключать вытеснение в ядре. Проверьте у себя:


$ grep CONFIG_PREEMPT /boot/config-3.12-1-amd64
$ grep CONFIG_SMP /boot/config-3.12-1-amd64
$ grep _raw_spin_unlock_irq /proc/kallsyms


или можно в каталоге исходников ядра (после сборки):


$ grep CONFIG_PREEMPT .config
$ grep CONFIG_SMP .config
$ grep _raw_spin_unlock_irq System.map


И вывод этих команд сюда.
В конечном итоге вам придется собрать ядро с такой же конфигурацией, как собран модуль.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
rk30xxnand, pavel_simple, 19-Янв-14, 11:10  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру