Как получить доступ к параллельному порту в 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

Другие вопросы по тегам