Hallo, mein C Programm soll eigentlich den Parallelport ansteuern, tut sich aber nix. ich habe diese Karte hier: https://www.amazon.de/dp/B0093LI2UM die Adresse des Parallelports hab ich so rausgefunden: root@pc1:/home/user1/lernen/ctest# cat /proc/ioports | grep parport d000-d002 : parport0 d010-d012 : parport0 d013-d017 : parport0 root@pc1:/home/user1/lernen/ctest# ./lpt root@pc1:/home/user1/lernen/ctest# das C Programm schaut so aus: root@pc1:/home/user1/lernen/ctest# cat lpt.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/io.h> #define base 0xd000 //compile: gcc -O lpt.c -o lpt //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(3); outb(0,base); //set all pins lo return 0; } root@pc1:/home/user1/lernen/ctest# Wisst ihr was da schieflaeuft? Also ich hab das genauso auf einem anderen Mainboard laufen lassen mit onboard lpt port, und da gings, halt mit 0x0378 als Adresse. aber hier auf diesem Mainboard leuchtet die LED einfach nicht. aber das Programm liefert auch keinen Error. also permissions sind schon da. Gruss attiny
:
Bearbeitet durch User
Ich vermute mal dass das was du mit grep parport zu sehen bekommst die mainboard-Ressourcen sind und eben nicht die Karte.
Hallo! Man kann auf Periferie an einem PCI-E Adapter nicht über einfache OUTB(irgendwas) zugreifen! Es geht nur über passende Treiber.
Hi Johnny, danke fuer den Hinweis. Jetz hab ich nochmal anders die Adresse geprueft: root@pc1:/home/user1/lernen/ctest# lspci -v 03:00.2 Parallel controller: MosChip Semiconductor Technology Ltd. PCIe 9912 Multi-I/O Controller (prog-if 03 [IEEE1284]) Subsystem: Device a000:2000 Flags: bus master, fast devsel, latency 0, IRQ 19 I/O ports at d010 [size=8] I/O ports at d000 [size=8] Memory at f0401000 (32-bit, non-prefetchable) [size=4K] Memory at f0400000 (32-bit, non-prefetchable) [size=4K] Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+ Capabilities: [78] Power Management version 3 Capabilities: [80] Express Legacy Endpoint, MSI 00 Capabilities: [100] Advanced Error Reporting Kernel driver in use: parport_serial Kernel modules: parport_serial root@pc1:/home/user1/lernen/ctest# und da steht wirklich was von 2 verschiedenen Startadressen fuer die io Ports, d000 hatte ich ja schon, der ging ja nicht. aber da steht auch der d010, und dieser hat jetz funktioniert. muss ich mal ueberlegen warum das so ist... naja, jetz gehts jedenfalls, also Problem geloest. Gruss Stefan
Route 6. schrieb: > Man kann auf Periferie an einem PCI-E Adapter nicht über einfache > OUTB(irgendwas) zugreifen! Es geht nur über passende Treiber. Hi, die Treiber sind dann anscheinend im Linuxkernel schon von Haus aus mit dabei. weil wie gesagt, jetz gehts.
ioperm sollte man höchstens nutzen, wenn es überhaupt nicht anders geht. Und selbst dann sollte man dreimal drüber nachdenken. Besser ist es, auf den Parallelport über den Treiber statt am Treiber vorbei zuzugreifen. Stefan E. schrieb: > root@pc1:/home/user1/lernen/ctest# cat /proc/ioports | grep parport > d000-d002 : parport0 > d010-d012 : parport0 > d013-d017 : parport0 Warum nutzt du dann nicht einfach /dev/parport0? Siehe https://mockmoon-cybernetics.ch/computer/linux/programming/parport.html (nicht den Teil unter "not recommended", sondern den unter "Full access via /dev/parport".
:
Bearbeitet durch User
Rolf M. schrieb: > Siehe > https://mockmoon-cybernetics.ch/computer/linux/programming/parport.html danke, schaut interessant aus die Seite.
Route 6. schrieb: > Hallo! > Man kann auf Periferie an einem PCI-E Adapter nicht über einfache > OUTB(irgendwas) zugreifen! Es geht nur über passende Treiber. Stefan E. schrieb: > Hi, die Treiber sind dann anscheinend im Linuxkernel schon von Haus aus > mit dabei. > weil wie gesagt, jetz gehts. Dann mach das bitte rückgängig, sonst hat die Route scheissdreck geschrieben und das darf nicht sein...
Rolf M. schrieb: > Warum nutzt du dann nicht einfach /dev/parport0? > Siehe > https://mockmoon-cybernetics.ch/computer/linux/programming/parport.html > (nicht den Teil unter "not recommended", sondern den unter "Full access > via /dev/parport". Da sage ich auch mal schnell Danke für den Link!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.