1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Paralell Port zugriff

Dieses Thema im Forum "Programmieren" wurde erstellt von tassilo, 26 Februar 2012.

  1. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    Moin Moin

    Hat jemand ein funktionierendes Beispiel wie man den paralell Port mit OpenBSD benutzen kann? Ich habe bereits gegoogelt und auch die Suche hier Versucht, viele Tipps gefunden, aber ein wirklich funktionierendes Beispiel habe ich nicht gefunden.

    Ich will z.b. 0x9A also "10011010" ausgeben. Normalerweise würde ich das einfach "nach" 0x378 schreiben, aber da bekomme ich einen core dump.

    openbsd scheint meinen port aber zu finden :

    lpt0 at isa0 port 0x378/4 irq 7

    verwenden tu ich ein openbsd 4.9

    grüße und im voraus vielen dank.

    tassilo
     
  2. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    Ach ja ein beispiel das ich hier in Forum gefunden habe :


    [tassilo@gigant:~/workbench/control]$ cat bsd_forum_01.c
    #include <stdio.h>

    int main(void)
    {
    FILE *f;
    f=fopen("/dev/lpt0","a+");
    fprintf(f,"der parallelport funktioniert!!!\n");
    fclose(f);
    }


    [tassilo@gigant:~/workbench/control]$ gcc bsd_forum_01.c
    [tassilo@gigant:~/workbench/control]$ ./a.out
    Segmentation fault
     
  3. Crest

    Crest rm -rf /*

    Registriert seit:
    25 Juni 2008
    Beiträge:
    1.570
    Ort:
    /dev/random
    Glaubst du wirklich OpenBSD würde die I/O Ports direkt in den Adressraum eines jeden Prozesses einblenden? Ein Blick in die lpt Manpage legt nahe das es ein oder mehrere Devicenodes für deinen Parallelport gibt.
     
  4. Crest

    Crest rm -rf /*

    Registriert seit:
    25 Juni 2008
    Beiträge:
    1.570
    Ort:
    /dev/random
    fopen() gibt NULL zurück, wenn dir die nötigen Rechte fehlen.
     
  5. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    hallo,

    Danke für die schnelle Antwort. ich greife doch auf /dev/lpt0 zu wie in der manpage gesagt, oder habe ich hier schon den fehler?
    ansonsten lasse ich das auch als root (der dürfte das bestimmt?) aber funkt auch nicht.

    EDIT : ok bei root kommt kein segmentation fault aber ein "lpt0: out of paper" hmm....

    grüße

    tassilo
     
  6. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    Ich frage mich gerade wieso meint Openbsd das da kein papier da ist (es ist ja nicht mal ein drucker angeschlossen)? und wieso wird das überhaupt nachgeprüft, ich mein ich schreibe doch auf das "device" und nicht in sowas wie eine druckerque oder?
     
  7. Yamagi

    Yamagi Possessed With Psi Powers Mitarbeiter

    Registriert seit:
    14 April 2004
    Beiträge:
    8.851
    Ort:
    Schleswig-Holstein
    Ich glaube (Ich bin kein OpenBSDler), dass es so nicht geht. lpt(4) ist ein relativ hoch im System sitzender Treiber, der dazu gedacht ist mit einem Drucker zu kommunizieren. Willst du direkt auf den Parallelport schreiben, musst du dich selbst auf diese tiefe Ebene hinabbegeben. Eine Möglichkeit dazu ist, dir mit i386_get_ioperm() und i386_set_ioperm() die Rechte zu holen und dann per outb() und inb() rumzufummeln, aber das ist gefährlich und es würde mich sehr wundern, wenn es da keine besseren Methoden gibt...
     
  8. batboy

    batboy Member

    Registriert seit:
    19 Oktober 2006
    Beiträge:
    112
    Ort:
    AC.DE
  9. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    Hallo,

    danke für die Antworten. Hab auch noch etwas weiter gegoogelt. Finde diese Seite auch recht informativ (falls mal jemand das gleiche Problem hat) : http://0x1392.livejournal.com/78937.html?thread=439385

    doch leider bekomme ich bei dem dort vorgestellten Programm wie auch beim 4x4 LED Matrix Programm immer diese meldung :

    [root@gigant:~/work]$ ./portio out 378 255
    portio: i386_set_permio: Operation not permitted

    compilieren ohne probleme (mit -li386) ich führe es auch als root aus, aber bekomm immer " i386_set_permio: Operation not permitted" ...
    wenn man das mal so einfach 1zu1 in googel eingibt gibt es genau 0 treffer...

    grüße

    Tassilo
     
  10. dettus

    dettus Bicycle User

    Registriert seit:
    9 August 2004
    Beiträge:
    2.562
    Ort:
    nuernberg
    bloede frage...

    hast du schonmal als root
    Code:
    # cat /etc/fstab >/dev/lpt0
    
    probiert?
    und was hast du ueberhaupt fuer einen drucker?
     
  11. unull

    unull Nervensäge

    Registriert seit:
    28 Februar 2005
    Beiträge:
    147
    Ort:
    ::1
    So als kleiner Tipp fuer die Zukunft (was Crest auch schon meinte): Es ist gut[TM], wenn man sich gleich angewoehnt die Return-Werte zu checken. mit perrror() bekommt man dann auch veruenftigen Output. Also z.B.:

    Code:
    ...
    FILE *f;
    if ( (f=fopen("/dev/lpt0","a+")) == NULL)
      perror("lpt0");
    
     
  12. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    Ja, kommt no paper...

    ich habe keinen drucker. Z.Zt. sind ein paar wiederstände mit led's am Stecker damit ich sehen kann ob da überhaupt was raus kommt. Wie schon geschrieben will ich auf den Port zugreifen aber nicht zum drucken :)

    grüße
     
  13. oenone

    oenone Programmierer

    Registriert seit:
    30 November 2002
    Beiträge:
    2.551
    Ort:
    Bremen
    Ist das ein (Ab-)Schreibfehler und es heißt in Wirklichkeit i386_set_ioperm?

    Laut Manpage liegt das daran, dass du es nicht als superuser aufrufst:
    Code:
         [b]i386_set_ioperm[/b]() sets the I/O permission bitmap from the data pointed to
         by iomap.  This call is restricted to the superuser.
     
  14. hades

    hades the unseen one Mitarbeiter

    Registriert seit:
    22 Dezember 2006
    Beiträge:
    512
    Ort:
    Biberach an der Riß
    Wenn Du genau gelesen hättest was tassilo geschrieben hat, wäre Dir aufgefallen, dass er das Kommando als root ausgeführt hat...
     
  15. oenone

    oenone Programmierer

    Registriert seit:
    30 November 2002
    Beiträge:
    2.551
    Ort:
    Bremen
    Dann hat er einen Bug aufgedeckt und sollte ihn schleunigst melden!
    In der Manpage steht nämlich, dass der Fehler (EPERM) nur auftritt, wenn er nicht superuser-Rechte hat. Sollte etwas anderes dazu geführt haben, ist es entweder ein Bug in der Funktion oder ein Bug in der Manpage.
     
  16. HUE

    HUE Member

    Registriert seit:
    20 März 2006
    Beiträge:
    156
    Ort:
    Die Sachsen sind hier überall!
    Hallo BSDler,

    ich habe hier auf meiner Homepage einen Punkt EISENBAHN. Dort findet man unter DOWNLOAD den Sourcecode für ein simple LPT ausgabe zur Lampen- und Motorsteuerung per LPT.

    MfG

    echo "HUE\a"

    HOMEPAGE www.volker-wolfram.de
     
  17. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    Hallo HUE

    ich hab mal alle schritte hier mitgenommen (einfach consolen log).
    was mache ich falsch ?

    grüße

    tassilo


    # pwd
    /root
    # id
    uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem), 3(sys), 4(tty), 5(operator), 20(staff), 31(guest)
    # mkdir test
    # cd test
    # wget http://www.volker-wolfram.de/source/bahn.tgz
    --2012-02-28 20:32:30-- http://www.volker-wolfram.de/source/bahn.tgz
    Resolving www.volker-wolfram.de (www.volker-wolfram.de)... 95.129.49.139
    Connecting to www.volker-wolfram.de (www.volker-wolfram.de)|95.129.49.139|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 991 [application/x-gzip]
    Saving to: `bahn.tgz'

    100%[=============================================================================================================================>] 991 --.-K/s in 0s

    2012-02-28 20:32:31 (3.33 MB/s) - `bahn.tgz' saved [991/991]

    # tar xvfz bahn.tgz
    bahn.c
    Makefile
    # make
    cc -lcurses bahn.c -o bahn
    # ./bahn
    Segmentation fault (core dumped)
    #
     
  18. HUE

    HUE Member

    Registriert seit:
    20 März 2006
    Beiträge:
    156
    Ort:
    Die Sachsen sind hier überall!
    Hallo,

    ich benutze dafür folgende Anweiseung:

    $ sudo ./bahn

    MfG

    HUE
     
  19. HUE

    HUE Member

    Registriert seit:
    20 März 2006
    Beiträge:
    156
    Ort:
    Die Sachsen sind hier überall!
    Ein wenig witzig von mir!

    Ich habe zu spät gesehen, dass Du schon ROOT bist.

    Ich habe mein Programm noch einmal geprüft und stelle fest, dass es der Befehl OUTB ist, der den Absturz auslöst. Ich finde diesen in dem Header PIO.H wieder.

    Verstehen tue ich das ganze unter OBSD nicht, da es bei mir unter NetBSD prima bis heute läuft. D.h, dass die Bahn jährlich in den Wintermonaten bei meinem Neffen ihre Runde dreht.

    MfG

    HUE
     
  20. HUE

    HUE Member

    Registriert seit:
    20 März 2006
    Beiträge:
    156
    Ort:
    Die Sachsen sind hier überall!
    Hallo tassilo,

    ich habe folgenden Kommentar im Netz gefunden:


    List: openbsd-tech
    Subject: Re: parallel port programming
    From: Matthieu Herrb <matthieu.herrb () wanadoo ! fr>
    Date: 2002-04-26 18:58:07
    [Download message RAW]

    Musawir Ali wrote (in a message from Friday 26)
    > Hello,
    >
    > I'm doing some parallel port programming and I was wondering what include
    > files need to be used for port I/O ? In linux i used #include <asm/io.h> and
    > it had the functions such as inb(), outb(), etc.
    > Also, is there anything special needed to be done to give exclusive read/write
    > access to the ports? or just being root will work?

    No, you also need to allow access to I/O ports by calling
    i386_iopl(2). And you need to have the machdep.allowaperture sysctl
    set to >=1 if running at securelevel 1 or above. Then you can use
    inb/outb and friends.

    Note that this is not the recommended way to manipulate the parallel
    port. It is acceptable for a prototype application, but for something
    serious, it's better to write a real kernel driver, which is the only
    way to have proper access control, correct timings, interrupt
    handlings, etc.
     
  21. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    WOW! Das wars. Meine LED blinken und ich kann weitermachen. Vielen dank an dich und all die anderen Helfer!

    grüße

    tassilo

    p.s.: ich fände aber einen hinweis in den manpages dennoch hilfreich :)
     
  22. HUE

    HUE Member

    Registriert seit:
    20 März 2006
    Beiträge:
    156
    Ort:
    Die Sachsen sind hier überall!
    Hallo tassilo,

    es wäre auch für die Anderen und auch für mich nicht schlecht, wie Deine Lösung zum Schluss aussieht.

    Bitte poste mal das Wichtigste vom Quellcode und der Compileranweisung.

    Vielen Dank und freundlichen Gruss!

    echo "HUE\a"
     
  23. tassilo

    tassilo New Member

    Registriert seit:
    15 Mai 2006
    Beiträge:
    25
    Moin Moin

    ...sorry für die späte antwort aber mich hatte ein virus kurzzeitig darnieder gestreckt..

    also :

    - code von http://0x1392.livejournal.com/78937.html?thread=439385 benutzt
    - compiliert mit "cc portio.c -o portio -li386"
    - in /etc/sysctl.conf den wert machdep.allowaperture=2 gesetz

    das wars.

    grüße

    tassilo
     
  24. HUE

    HUE Member

    Registriert seit:
    20 März 2006
    Beiträge:
    156
    Ort:
    Die Sachsen sind hier überall!
    Ein Hallo dem Suchenden von bahn.tgz!

    Beim Durchsehen meines Logfiles am Webserver habe ich festgestellt, dass jemand kürzlich in diesem Monat einen Zugriff auf eine verwaiste Seite meines alten Internetauftrittes hatte.

    Er wollte die Datei "bahn.tgz" herunterladen…

    Sowas aber auch ;-)

    Ich hoffe, ich kann dem Suchenden nachträglich noch eine Hilfe sein.

    Bis dahin

    HUE\a
     

    Anhänge:

    • bahn.zip
      Dateigröße:
      4,7 KB
      Aufrufe:
      7