Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Parallel port

    Scheduled Pinned Locked Moved General pfSense Questions
    34 Posts 5 Posters 9.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      matumbo
      last edited by

      I've managed with help from a friend to create a program that should work and I compile it in my VirtualBox FreeBSD 8.1 and it seems to work there but when I copy it to PFsense it doesn't. It complains about
      /libexec/ld-elf.so.1: /root/program/a.out: Shared object has no run-time symbol table
      or
      Exec format error. Binary file not executable.
      or
      /libexec/ld-elf.so.1: /usr/lib/: invalid file format.

      1 Reply Last reply Reply Quote 0
      • stephenw10S
        stephenw10 Netgate Administrator
        last edited by

        Hmm, something odd here. As is says in the code I cut and pasted from lcdproc:

        Use i386_get_ioperm, i386_set_ioperm from <machine sysarch.h="">and inb and outb from <machine cpufunc.h="">(FreeBSD)</machine></machine>

        Compiles and runs using gcc no problems for me.  :-\

        Steve

        1 Reply Last reply Reply Quote 0
        • M
          matumbo
          last edited by

          Did you compile it on another machine and copy it to PFsense?
          I tried to run your program on pfsense and it worked just fine, but if I compiled it on my virtual box and moved it to Pfsense it wouldn't work. I thought that should work since it's the same release of FreeBsd.

          Edit: Do I need to use any special options with gcc to compile it or just "gcc code.c" ?

          1 Reply Last reply Reply Quote 0
          • G
            gderf
            last edited by

            @matumbo:

            Do I need to use any special options with gcc to compile it or just "gcc code.c" ?

            Just a guess, but you probably want to compile and statically link to all libraries that are not available on your pfsense box.

            1 Reply Last reply Reply Quote 0
            • M
              matumbo
              last edited by

              @gderf:

              @matumbo:

              Do I need to use any special options with gcc to compile it or just "gcc code.c" ?

              Just a guess, but you probably want to compile and statically link to all libraries that are not available on your pfsense box.

              How can I do that? I am not very good at programming nor compiling.

              1 Reply Last reply Reply Quote 0
              • stephenw10S
                stephenw10 Netgate Administrator
                last edited by

                I am using a real machine, an old laptop, and the only other option I specified was the output file:

                root@.box/home/admin# gcc -o WGXepc WGXepc.c
                
                

                Is this a 32bit vs 64bit problem?

                Steve

                1 Reply Last reply Reply Quote 0
                • M
                  matumbo
                  last edited by

                  Okey, but it should work with a Virtual Machine aswell. I am running a 32bit-machine.

                  1 Reply Last reply Reply Quote 0
                  • stephenw10S
                    stephenw10 Netgate Administrator
                    last edited by

                    Yep, should work.  :-
                    I'm out of my depth here.  ;)

                    Steve

                    1 Reply Last reply Reply Quote 0
                    • M
                      matumbo
                      last edited by

                      Found out that this means that the libraries the headers refer to are not found in the system:
                      /libexec/ld-elf.so.1: /root/program/a.out: Shared object has no run-time symbol table

                      Are there no libs present in pfsense? And can someone tell me how to statically link libraries to the program?

                      1 Reply Last reply Reply Quote 0
                      • stephenw10S
                        stephenw10 Netgate Administrator
                        last edited by

                        About the only thing I can think you may have done is used some cut down version of FreeBSD. Alternatively I have installed some extra stuff in my FreeBSD install.  :-
                        I don't remember doing that but some package or other may have pulled in some dependencies. It's a few years since I installed it.

                        Steve

                        1 Reply Last reply Reply Quote 0
                        • M
                          matumbo
                          last edited by

                          I installed with the dvd image, which I think is the full version and I installed all standard packets or something like that. But it seems like the problem is not with my virtual FreeBSD, it's with my pfsense missing libraries which I suppose is normal. From what I understand, the only possible solution is for me to somehow statically link the required libraries into the program so that they are not needed on pfsense when I execute the program. But what I really don't understand is why I can run your program with no problem but if I compile it by myself it won't work. Especially when you didn't use any option with gcc to compile it.

                          1 Reply Last reply Reply Quote 0
                          • stephenw10S
                            stephenw10 Netgate Administrator
                            last edited by

                            @matumbo:

                            what I really don't understand is why I can run your program with no problem but if I compile it by myself it won't work. Especially when you didn't use any option with gcc to compile it.

                            It's exactly that reason makes me think it's a problem with your compile box.
                            One way to test would be if I compile your code (unless it's top secret).

                            Steve

                            1 Reply Last reply Reply Quote 0
                            • M
                              matumbo
                              last edited by

                              @stephenw10:

                              It's exactly that reason makes me think it's a problem with your compile box.
                              One way to test would be if I compile your code (unless it's top secret).

                              Steve

                              You are welcome to compile it, maybe that would do the trick :P But I'm not sure the program is working correctly yet since I haven't been able to try it at all.

                              code.c.png

                              1 Reply Last reply Reply Quote 0
                              • stephenw10S
                                stephenw10 Netgate Administrator
                                last edited by

                                Ok, Here is your compile code.
                                However it doesn't seem to work. It's hard to say because it doesn't have many printf statements so it just does nothing.  ;)

                                Running it on the compile box:

                                root@.box/home/admin# ./readio 378
                                Reading 378 :4
                                root@.box/home/admin# ./code 2 378
                                fel antal argroot@.box/home/admin# ./code 2
                                root@.box/home/admin# ./readio 378
                                Reading 378 :32
                                
                                

                                Running on my pfSense box:

                                [2.0.1-RELEASE][root@pfsense.fire.box]/tmp(6): ./code
                                fel antal arg[2.0.1-RELEASE][root@pfsense.fire.box]/tmp(7):
                                
                                

                                Seems to run fine. I didn't try to actually write any registers as that box needs to stay up!

                                When I was investigating the firebox LED I wrote a program almost the same as yours: writeio and another to compliment it: readio. I now think there is a function in FreeBSD to do this already but it was a fun exercise. See attachments.

                                Steve

                                Edit: Actually your code seems to work, just not as I'd expected.

                                code.png
                                writeio.png
                                writeio.c.png
                                readio.png

                                1 Reply Last reply Reply Quote 0
                                • M
                                  matumbo
                                  last edited by

                                  Thanks!
                                  I know, but as I said it's not really complete :P I want to add some messages that tell me what I am doing, and I want to be able to control specific pins like this: "./code 1h 2l" which would set the first pin to 1 and the second to 0. This program was a test to see if me and my friend had found the right way to communicate with the port.

                                  What does Readio and writeio do?

                                  I tried to statically link the library libc.a to my program while compiling(thought that might have been what was missing in pfsense) and after that I didn't get the same error message on my pfsense box. Instead it was a segmentation fault. Don't know which of the error-messages I prefer :P

                                  I haven't received my equipment that is going to be connected to the parallel port yet, so I can't try if it works correctly right now. I am thinking that I might be able to use a multimeter/multitester to see If I can change one of the datapins to 1. The supported command for the program should be: 0, 1, 2 or 3.
                                  That would translate to:
                                  0= set both to 0
                                  1= set first datapin to 1
                                  2= set second datapin to 1
                                  3= set first and second datapin to 1

                                  1 Reply Last reply Reply Quote 0
                                  • stephenw10S
                                    stephenw10 Netgate Administrator
                                    last edited by

                                    readio and writeio allow you to read and write any memory mapped io space, such as the parallel port or in my case the southbridge gpio pins.
                                    They are used:
                                    readio (address)
                                    writeio (address, value)
                                    Values in Hex.

                                    e.g.:

                                    root@.box/home/admin# ./readio 378
                                    Reading 378 :34
                                    root@.box/home/admin# ./writeio 378 21
                                    Setting 378 to 21
                                    root@.box/home/admin# ./readio 378
                                    Reading 378 :21
                                    
                                    

                                    Steve

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      matumbo
                                      last edited by

                                      I just tried your programs(writeio and readio) and they are great :) I used a multimeter to verify that the port did output 50 mA when I set a pin to 1 and it seems to work. I tried my program as well and it worked :) Can't understand why it works when you compile it, but I am happy it does :P

                                      I received the equipment I've been waiting for today, so now I will start to build the circuit to control my power strip.
                                      Thank you for all the help you have given me!

                                      //Matumbo

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post
                                      Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.