http://www.perlmonks.org?node_id=1056090

mark4444az has asked for the wisdom of the Perl Monks concerning the following question:

I have a cpu running a very stripped version of Linux, it does have vi and it can run .sh files. I am able to give commands via teraterm which is linked to a cpu board through a serial connection. Is there some way to access the cpu through teraterm using Perl? Or maybe it would be better to just use an IO function of Perl and communicate that way?

Replies are listed 'Best First'.
Re: access vi through teraterm
by keszler (Priest) on Sep 28, 2013 at 04:07 UTC
    Assuming that the serial connection is from a Windows box to a console/TTY on the Linux box, this old code excerpt may be instructive.
    use strict; use warnings; use Win32::SerialPort; my $loggedin = 0; my $term = Win32::SerialPort->new('COM1') or die "bad COM1\n"; $term->baudrate(9600); $term->databits(8); $term->parity("none"); $term->parity_enable(0); $term->stopbits(1); $term->handshake('xoff'); $term->user_msg(1); # misc. warnings $term->error_msg(1); # hardware and data errors $term->read_interval(1000); # max time between chars 1000 ms (1 +sec) $term->read_interval(0xffffffff); # non-blocking read $term->write_settings; $term->write("\r"); my $esccount = 0; while ($prompt !~ /Supervisor Name :/) { die "$esccount attempts to contact the PBX have failed." if $escco +unt++ > 10; # loop sending ESCs until we get the login prompt $term->write("\e"); sleep 2; ($count, $prompt) = $term->read(2000); } # we should now be at the Supervisor Name prompt $term->write("REPORTS\r"); sleep 2; ($count, $prompt) = $term->read(2000); if ($prompt =~ /Password\s+:/) { $term->write("REPORTS\r"); sleep 3; ($count, $prompt) = $term->read(2000); if ($prompt =~ /Main Menu/) { $loggedin = 1; } } . . .
    (yes, I did just give away the password to that old PBX. If it's still running and you can find it and connect to its serial port, feel free to hack away)
Re: access vi through teraterm
by wjw (Priest) on Sep 28, 2013 at 01:48 UTC
    I am not clear on what you are after. The title of your post says you want to access vi via teraterm which you are already doing apparently. What I gather is:

    What you have:

    • A minimal linux system
    • A rs232 connection from a windows machine to the linux machine controlled by Teraterm

    You want to run Perl scripts on the windows machine that will do things to the linux box.(?)

    A quick look at Teraterm shows that there is no API available for it, thus no simple way to control Teraterm from Perl and thus straight forward way to pass things through Teraterm to the linux machine. Thus, Teraterm is unlikely to be part of your solution.

    The only thing I can think of to try is to set up the rs232 connection as a network to get tcpip over rs232. Then I would use something like Net::SSH in my Perl scripts on the windows machine to automate whatever it is you want to accomplish on the linux machine. That assumes of course that the minimal linux machine is ssh capable.

    It would be helpful to undestand a bit better what you want to do via this connection: Are you manipulating things on the linux box?..or are you just simply sending commands to it?...

    Hope that is at least somewhat helpful...

    • ...the majority is always wrong, and always the last to know about it...
    • ..by my will, and by will alone.. I set my mind in motion
      Thanks for your response. There is firmware on the Linux box that has .sh files. I would like to run those scripts from perl, loop though them x amount of times, and gather data. I agree teraterm will not work, I believe your assesment is accurate. I need to setup an rs232 connection and use ssh to run the script files.