Parallel port
-
Hello!
Can someone tell me how to access the Parallel port through the shell? I am trying to write a program to activate a specific pin and to deactivate it depending on the input, but I don't know a whole lot about programming. So I started to make just a simple hello world program, but I can't compile it with gcc; it cannot find stdio.h or stdlib.h etc.
Is the kernel somewhat incomplete in pfsense or am I just missing something?
-
There are no build tools in pfSense. Including them would be only a security risk on a firewall.
To compile something for pfSense 2.0.x you need to do it on a FreeBSD 8.1 box.There should be no problem writing to the parallel port.
Steve
-
Hi,
Thanks for a quick answer!
I am not so concerned with security on this server so is it possible to add the required build tools to pfsense? -
It is stil a bad idea, but if you really have to, you could do something like pkg_add -r gcc. I have not done this before and it might not be the correct package, but pkg_add is the way to do it.
i would still use a different freebsd box to do the build on. -
I have tried to find the right package with pkg_add but nothing I have tried seems to work. Guess I will have to keep looking for the right package. I would use a different FreeBSD box if I could, but that is the only one with a parallel port and it's a bit harder to do it without the interface.
-
You should be able to compile on the second box, copy over and test. Just have to be creative with any debugging. It is interesting that you don't have another box with parallel port, even some of the newer high end MBs still have that port. Well anyway … good luck. BTW ... What is going to happen at the other end of the parallel port when you activate the pin? Just being curious.
-
This is a home environment so I don't have too many boxes just sitting around and that is also the reason I am not so concerned with the security. I started to do it on another machine, but I was missing some files associated with the parallel port that I guess is only present if you have a parallel port installed or something.
I am going to build a power strip that I can control via the Parallel port. On the other end of that cable I will connect a transistor that controls a relay that control the power strip. In that way I could powercycle anything I want by using the program I am trying to create.
-
is it possible to add the required build tools to pfsense?
No. ;)
Technically it may be possible but by the time you have added all the required tools and dependencies you will almost certainly have broken pfSense. Even if you did manage to do it the resulting system could not be upgraded without breaking I suspect.
You can do this by booting from a USB stick or live CD (I think PC-BSD 8.1 has a live CD). Even if your spare box doesn't have a parallel port you can compile code and transfer it to test. That's what I did for my own hardware coding challenge.Steve
-
Okey, but is it possible to make the program on another distribution or would that not work? Does it have to be FreeBSD 8.1?
-
If you use another distro, you run the risk of missing libraries.
-
Okey. I guess I will try to boot up some computer with FreeBSD 8.1 or use another Distro and make sure I have got all libs.
Thanks for the help! -
There aren't that many FreeBSD based distros to choose from. BSD is not Linux. ;)
If your program is sufficiently basic then it will probably work across FreeBSD versions. The various lcdproc drivers that connect via the parallel port continued to function between pfSense 1.2.3 (FreeBSD 7.3) and 2.0 (FreeBSD 8.1).Steve
Edit: you could try this: http://forum.pfsense.org/index.php/topic,52691.0.html
You might want to use 32bit sources, whatever is appropriate for you. -
Are there any restrictions to execute programs aswell? I tried to execute a program as root that I compiled on another distro but it returns Permission Denied.
-
I'd just install a virtual machine of FreeBSD 8.1 (assuming you're running 2.0.1, you can get the 8.1 iso from ftp-archive.freebsd.org), compile it there, copy it over. The only thing you'll have to do after copying over a binary is make it executable, chmod +x filename.
-
I tried the thing with chroot, but it seems like I don't have the rsync-command supported.
I installed FreeBSD 8.1 on another computer in VirtualBox. I compiled my program there and copied it to my pfsense router, made it executable and tried to run it. It seems like somthing else is missing because I got the following error: /libexec/ld-elf.so.1: /root/program/a.out: Shared object has no run-time symbol tableWhen I tried to run it on my Virtual machine with FreeBSD it worked just fine except that I could write anything to the parallel port due to segfault. I suspect that it might be because it's in a Virtual machine.
-
Hmm, you have probably included a library that isn't present in pfSense. Which you probably don't need anyway.
I included code in my arm/disarm LED program to switch a single pin on the parallel port, in this case it switches the LCD backlight in the Firebox. Have a look at the code I used and try not to laugh too hard at my terrible coding style. ;)
http://forum.pfsense.org/index.php/topic,32013.msg270534.html#msg270534Steve
-
Can't say that I am good at programming, so I am not in a position to laugh at anything ;)
From what I understand I need ioperm to access the parallel port and I guess that is included in one of these:
#include <machine cpufunc.h="">#include <machine sysarch.h="">Since I have no libs nor headers at all in pfsense I guess it is not possible to include anything in the code? Or how does it work?</machine></machine> -
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. -
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
-
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" ?