just_a_student писал(а):Здравствуйте! В данный момент изучаю книгу Linux Device Drivers 3. В ней в качестве учебного драйвера приводится пример символьного драйвера scull.
Исходники этого драйвера я скачал тут:
https://github.com/martinezjavier/ldd3/ ... ster/scull
(Это офф источник указанный в книге).
Эта книга довольно старая, даже в 3-м издании, некоторые вещи там не соотвествуют текущему состоянию дел.
А примеры там - очень неудачные для начала изучения (громоздкие и перегруженные деталями).
Это ваш выбор, но я
для начала советовал бы вам попрактиковаться с примерами вот отсюда:
http://mylinuxprog.blogspot.com/2013/01/linux.html ... а
потом уже грузите что хотите и откуда хотите (там, кстати,
очень подробно описано о сборке, загрузке и выгрузке....)
just_a_student писал(а):
Сборка прошла без проблем, но запустить я его так и не смог.
После сборки запуск производится скриптом scull.init с параметрами: start, stop, reload и т.п.
В ответ на команду
получаю следующий вывод:
Код: Выделить всё
Loading scull (loading file ./scull.o)insmod: error inserting './scull.o': -1 Invalid module format
FAILED!
Вообще то, самая частая причина такого сообщения insmod ("Invalid module format") бывает когда не соответствует версия ядра: например, собирали вы make в 3.3.A, а запускать стараетесь в 3.3.A (или собирал без PAE а запускается с PAE) ... например после простейшего обновления версий ядра из репозитария.
just_a_student писал(а):
P.S. драйвер можно так же запустить скриптом scull_load и отключить скриптом scull_unload (Они так же есть по ссылке). Однако при загрузке скрипта scull_load так же выскакивает ошибка insmod:
Код: Выделить всё
sudo ./scull_load
insmod: error inserting './scull.ko': -1 File exists
А такая ошибка бывает когда
экземпляр такого модуля уже был раньше загружен ... может с ошибками, неисправный и т.д.
just_a_student писал(а):
Скрипт scull.init заменяет по функционалу scull_load и scull_unload, поэтому сосредоточиться решил на нем, но если поможете запустить драйвер с помощью scull_load, то тоже будет здорово!
Не морочьте мозги ... ни себе, ни другим
:
- изучите команды:
- загружайте и выгружайте модуль предназначенными для этого
командами Linux, без всяких
скриптов...
- и показывайте вывод команд сюда, если что-то не получается...
- а кроме того научитесь смотреть состояние загруженных модулей командами по типу:
- потому что для работы с модулями вам нужно, прежде всего, достигнуть
понимания того, что происходит, а не фокусов с запуском чьих-то скриптов (тем более, что, как мне кажется, и со скриптовым языком bash вы не на коротке?
) ... а понимание приходит только через выполнение
команд (разбирательство с командами).