Как получить доступ к параллельному порту в Linux
На моей машине с Linux (Debian Wheezy) я пытался получить доступ к параллельному порту request_region()
но это не удалось, потому что система уже загрузила модуль ядра parport
...
Так что я rmmod
модули lp
, ppdev
, parport_pc
а также parport
, Затем я мог бы успешно вставить свой модуль.
Однако с базового адреса inb()
возвращенный 0xff
независимо от того, какое значение было написано.
До rmmod
эти модули из ядра, я мог бы написать и прочитать этот регистр. Затем я поместил эти модули в черный список при загрузке системы, и я мог читать и записывать эти регистры, и мой модуль также работал. Кажется, что clearup
функция parport_pc
сделал что-то, что сделало аппаратное обеспечение непригодным для использования. (По крайней мере, статус порта не такой, каким он был до загрузки модуля).
У меня вопрос, почему и что я должен сделать, чтобы восстановить порт вместо перезагрузки parport_pc
?
2 ответа
Вы можете использовать C для написания небольшой программы, которая будет читать и записывать напрямую с / на выводы параллельного порта с помощью функций outb и inb. Затем вы можете просто вызвать программу на C из командной строки оболочки из другого скрипта. Обычно (по умолчанию) адрес 0x378 является адресом параллельного порта LPT0 в памяти, поэтому вам просто нужно использовать inb и outp для чтения / записи по этому адресу. Например:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>
#define base 0x378 //LPT0
//to compile: gcc -O parport.c -o parport
//after compiling, set suid: chmod +s parport then, copy to /usr/sbin/
int main(void) {
if(ioperm(base,1,1))
fprintf(stderr, "Couldn't open parallel port"), exit(1);
outb(255,base); //set all pins hi
sleep(5);
outb(0,base); //set all pins lo
return 0;
}
Некоторые моды драйверов заблокировали вам доступ к параллельному порту. Отредактируйте файл /etc/modprobe.d/blacklist.conf и добавьте следующие строки, затем перезагрузите Linux.
blacklist ppdev
blacklist lp
blacklist parport_pc
blacklist parport
И если чашки установлены, вы должны изменить /etc/modules-load.d/cups-filters.conf:
#lp
#ppdev
#parport_pc
Вот некоторые подробности: /questions/38827198/outb-ne-rabotaet-v-korotkom-module-primera-ldd3/38827212#38827212