outb() не работает в коротком модуле примера LDD3

Я пытаюсь short.c в примерах Linux Device Driver 3

На моем компьютере есть параллельный порт, и после загрузки Ubuntu я вижу следующее:

cat /proc/ioports
0378-037a : parport0
037b-037f : parport0

outp 0x378 1 
(outp is another example in LDD3 which write data to ports)
the LED on the port is ON.

Затем я запускаю эти команды для удаления модулей

rmmod lp
rmmod parport_pc
cat /proc/ioports
(There is no module on 0378-037f any more.)

Я запускаю это снова, но на этот раз светодиод не горит.

outp 0x378 1

Затем я устанавливаю short.ko и request_region() завершается успешно.

cat /proc/ioports
0378-037f : short

cat /proc/devices
249 short

outp 0x378 1
the LED is not ON this time either.

Я тоже пробовал, но результат тот же (светодиод не горит)

mknod /dev/short0 c 249 0
echo -n "a" > /dev/short0

"a" равно 0x61, поэтому последний бит равен 1.

Почему я не могу записать данные, хотя у меня есть область ввода / вывода?

Спасибо за Ваш ответ.

1 ответ

Наконец-то я нашел решение.

Убедитесь, что модуль "parport" не загружен и не скомпилирован в ваше ядро. Недостаточно просто выгрузить модуль parport, поскольку он оставляет порты в несогласованном состоянии. Вы должны перезагрузить компьютер и в первую очередь не загружать парспорт и все связанные модули / код.

Один из способов сделать это - отредактировать файл /etc/modprobe.d/blacklist.conf и добавить следующие строки:

blacklist ppdev
blacklist lp
blacklist parport_pc
blacklist parport

Похоже, что partport изменил режим параллельного порта.

И если чашки установлены, вы должны изменить /etc/modules-load.d/cups-filters.conf:

#lp
#ppdev
#parport_pc
Другие вопросы по тегам