LINUX.ORG.RU

Не могу запустить символьный драйвер

 ldd3, , ,


0

1

Здравствуйте! Я сейчас занимаюсь изучением книги Linux Device Drivers 3 и столкнулся с проблемой запуска простейшего символьного драйвера-примера из этой книги. Драйвер называется scull, его исходники лежат тут. Это офф ссылка данная в книге. Сборка прошла успешно, все файлы, получаемые при сборке модулей появились (sсull.ko + объектные файлы). Однако я не могу этот драйвер запустить. Всего существует два варианта запуска:

  • скриптом scull.init с параметрами start, stop, restart и т.п. В этом случае я получаю следующую ошибку:
    sudo ./scull.init start
    Loading scull (loading file ./scull.o)insmod: error inserting './scull.o': -1 Invalid module format
     FAILED!
    Первая и последняя части выводящегося сообщения(до insmod и FAILED) выводятся скриптом.
  • Скриптами scull_load и scull_unload (для остановки драйвера). При попытке запуска scull_load я получаю следующую ошибку:
    sudo ./scull_load
    insmod: error inserting './scull.ko': -1 File exists
    

По словам авторов книги скрипт scull.init заменяет функционал scull_load и scull_unload, поэтому я в основном сосредоточился на нем, но в принципе это не важно - лишь бы работало. Так как сборка прошла успешно, то проблема именно в скриптах, причем проблема скорее всего дурацкая, тк я совсем новичек и очень плохо разбираюсь в скриптах.

Помогите мне пожалуйста запустить этот драйвер и понять, что не так в этих скриптах!

P.S. В коде scull.init есть следующий участок:

#FIXME: it looks like there is no misc section. Where should it be?
MODDIR="/lib/modules/${KERNEL}/kernel/drivers/${SECTION}"
if [ ! -d $MODDIR ]; then MODDIR="/lib/modules/${KERNEL}/${SECTION}"; fi
Судя по всему, автор скрипта хотел чтобы пользователи что-то изменили в этой строке, но я не понял что именно. Возможно проблема кроется здесь.

Заранее спасибо!



Последнее исправление: just_a_student (всего исправлений: 2)
Ответ на: комментарий от anonymous

Возможно, но конкретно эту проблему решить все же нужно

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

Вы на 100% уверены, что у вас та версия ядра, под которую вы компилируете модуль?

Как попробуйте грузить модуль командой modprobe --force-vermagic <modulename>, но вообще так делать не надо.

Еще вариант, менее не кошерный, в makefile кое-что поправить, а именно:

VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 32 EXTRAVERSION =

Впишите то, что вам нужно (скорее всего у вас отличается параметр EXTRAVERSION)

RiseOfDeath ★★★★
()

а руками пробовал sudo insmod ./scull.ko ?

EugeneBas ★★
()

а после scull_load глянуть что говорит lsmod? а то есть подозрение, что драйвер таки грузится, просто ты этого не видишь

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