Parallel port
-
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" ?
-
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.
-
-
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
-
Okey, but it should work with a Virtual Machine aswell. I am running a 32bit-machine.
-
Yep, should work. :-
I'm out of my depth here. ;)Steve
-
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 tableAre there no libs present in pfsense? And can someone tell me how to statically link libraries to the program?
-
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
-
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.
-
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
-
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.
-
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.